Name: series-workflow2pwsl Phase: Succeeded StartedAt: 2026-09-12 13:53:14 +0000 UTC FinishedAt: 2026-09-12 17:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[0] Phase: Succeeded StartedAt: 2026-09-12 13:53:14 +0000 UTC FinishedAt: 2026-09-12 13:58:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 13:53:14 +0000 UTC FinishedAt: 2026-09-12 13:58:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "966b795d-2cd2-4228-8cf2-7d670f9480fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_fill_ifinfo", "br_getlink", "rtnl_bridge_getlink", "ndo_dflt_bridge_getlink", "rtnl_bridge_notify" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZpbGxfaWZpbmZvJiMzNDssCiAgICAmIzM0O2JyX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgcG9pbnRlciBhcml0aG1ldGljIHJlbGllcyBvbiB2YWxpZCBidWZmZXIgcG9pbnRlcnMgKGBza2JfdGFpbF9wb2ludGVyKHNrYilgIGFuZCBgYWZgKSwgYW5kIE5MX1NFVF9FUlJfTVNHX01PRCBzYWZlbHkgaGFuZGxlcyBib3RoIHZhbGlkIGFuZCBOVUxMIGV4dGFjayBwb2ludGVycy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQ7IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgKG5ldC9icmlkZ2UgYW5kIG5ldC9jb3JlL3J0bmV0bGluayksIGFkZGluZyBhIHNpemUgYm91bmRhcnkgY2hlY2sgaW4gYnJfZmlsbF9pZmluZm8oKSB0byBwcmV2ZW50IHUxNiBubGFfbGVuIG92ZXJmbG93IHdoZW4gc2VyaWFsaXppbmcgYnJpZGdlIFZMQU4gaW5mb3JtYXRpb24gaW50byBJRkxBX0FGX1NQRUMsIGFuZCBwbHVtYnMgbmV0bGlua19leHRfYWNrIHRocm91Z2ggbmRvX2JyaWRnZV9nZXRsaW5rIGFjcm9zcyBuZXRfZGV2aWNlX29wcyBhbmQgcnRuZXRsaW5rIGNhbGxlcnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgcmVxdWVzdHMgb24gYnJpZGdlIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YTAyODA3NTVmZWUxZjk5ODNlNzljYWM4ODY3ZjQ1OGU1Y2YzZTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuaW5kZXggY2E5OWY0YjFhNjNjMy4uYTc1MmU2NmJmNjM2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuQEAgLTE2MTU0LDEyICYjNDM7MTYxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZHBfdHVubmVsX25pY19pbmZvIGJueHRfdWRwX3R1bm5lbHMgPSB7XG4gXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHQgICAgICAgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdCAgICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBibnh0ICpicCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBicC1cdTAwM2Vicl9tb2RlLCAwLCAwLFxuLVx0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYm54dF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xuaW5kZXggZWQzMDJmNWVjNDc2OC4uY2M5Yzg3NTM5YTQyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcbkBAIC01MDExLDcgJiM0Mzs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXG4gc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0IGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHN0YXR1cyA9IDA7XG5AQCAtNTAzNyw3ICYjNDM7NTAzNyw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIGhzd19tb2RlID09IFBPUlRfRldEX1RZUEVfVkVQQSA/XG4gXHRcdFx0XHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQixcbi1cdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5pbmRleCBhYmJjNzFlODE1YWUzLi41MmMyYjM5M2FhY2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuQEAgLTEzMTUxLDYgJiM0MzsxMzE1MSw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcbiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZFxuICAqIEBubGZsYWdzOiBuZXRsaW5rIGZsYWdzIHBhc3NlZCBpblxuJiM0MzsgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFja1xuICAqXG4gICogUmV0dXJuIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBoYXJkd2FyZSBicmlkZ2UgaXMgb3BlcmF0aW5nIGluXG4gICogaS5lIFZFQiBvciBWRVBBLlxuQEAgLTEzMTU4LDcgJiM0MzsxMzE1OSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgIGludCBubGZsYWdzKVxuJiM0MztcdFx0XHRcdCAgIGludCBubGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaTQwZV9uZXRkZXZfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGk0MGVfdnNpICp2c2kgPSBucC1cdTAwM2V2c2k7XG5AQCAtMTMxNzUsNyAmIzQzOzEzMTc3LDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIHZlYi1cdTAwM2VicmlkZ2VfbW9kZSxcbi1cdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBmZTQ3ZWMwYmE4MDk0Li4wMzhjZTFmZTViZmU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtODA4NiwxMiAmIzQzOzgwODYsMTQgQEAgaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKVxuICAqIEBkZXY6IHRoZSBuZXRkZXYgYmVpbmcgY29uZmlndXJlZFxuICAqIEBmaWx0ZXJfbWFzazogZmlsdGVyIG1hc2sgcGFzc2VkIGluXG4gICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluXG4mIzQzOyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXG4gICpcbiAgKiBSZXR1cm4gdGhlIGJyaWRnZSBtb2RlIChWRUIvVkVQQSlcbiAgKi9cbiBzdGF0aWMgaW50XG4gaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tXHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuJiM0MztcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihkZXYpO1xuIFx0dTE2IGJtb2RlO1xuQEAgLTgwOTksNyAmIzQzOzgxMDEsNyBAQCBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdGJtb2RlID0gcGYtXHUwMDNlZmlyc3Rfc3ctXHUwMDNlYnJpZGdlX21vZGU7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncyxcbi1cdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbmluZGV4IGY5MTg1NjQ5OGViMmQuLjc3ZGZkODBhNmUzNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuQEAgLTEwNzI2LDcgJiM0MzsxMDcyNiw4IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXG5AQCAtMTA3MzUsNyAmIzQzOzEwNzM2LDcgQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXG4gXHRcdFx0XHQgICAgICAgYWRhcHRlci1cdTAwM2VicmlkZ2VfbW9kZSwgMCwgMCwgbmxmbGFncyxcbi1cdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcbmluZGV4IGZjMTEwYTdkMTZlOGQuLjUzYmY3OWRiZTA4ZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5AQCAtNTI3Nyw3ICYjNDM7NTI3Nyw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXG4gI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcbiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRpbnQgbmxmbGFncylcbiYjNDM7XHRcdFx0XHRpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuQEAgLTUyODgsNyAmIzQzOzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRtb2RlID0gc2V0dGluZyA/IEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUI7XG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbmluZGV4IDc5MjhlNzZkYTcyM2UuLmNiNzUxZGRkYjY4ODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuQEAgLTIyNTcsNyAmIzQzOzIyNTcsNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpXG4gXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZnBfbmV0ICpubiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1MTYgbW9kZTtcbkBAIC0yMjY5LDcgJiM0MzsyMjY5LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jXG5pbmRleCAyOTM1YzJlY2MzMTRiLi5mOTYwY2Y1YTk3YTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xuQEAgLTkzNSw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIHZvaWQgcWV0aF9sMl9icjJkZXZfcHV0KHZvaWQpXG4gXG4gc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBxZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi1cdTAwM2VtbF9wcml2O1xuQEAgLTk0OSw3ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIG1vZGUsIHByaXYtXHUwMDNlYnJwb3J0X2ZlYXR1cmVzLFxuIFx0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlYnJwb3J0X2h3X2ZlYXR1cmVzLFxuLVx0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZXRoX2JycG9ydF9wb2xpY3lbSUZMQV9CUlBPUlRfTUFYICYjNDM7IDFdID0ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA3MDdiMmU1MWMyYjk3Li4xOGEwM2YwZjZmMTEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4gICpcdFx0XHQgICAgIHUxNiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuICAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiAgKlx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLSAqXHRcdFx0ICAgICBpbnQgbmxmbGFncylcbiYjNDM7ICpcdFx0XHQgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiAgKlx0XHRcdCAgICAgdTE2IGZsYWdzKTtcbiAgKlxuQEAgLTE2NTksNyAmIzQzOzE2NTksOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuIFx0XHRcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0XHQgICAgICB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0ICAgICAgaW50IG5sZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBpbnQgbmxmbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdGludFx0XHRcdCgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdFx0XHRcdCAgICAgIHUxNiBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMjIyLDcgJiM0MzsyMjIsOCBAQCBleHRlcm4gaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICB1MzIgZmlsdGVyX21hc2ssXG4gXHRcdFx0XHQgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaykpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrKSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIGV4dGVybiB2b2lkIHJ0bmxfb2ZmbG9hZF94c3RhdHNfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbmluZGV4IGFlNzZkZjBkZTA1YTAuLjUzNjc2ZGY5ZTRkMTEgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbkBAIC00NTksNyAmIzQzOzQ1OSw3IEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4gXHRcdFx0ICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncyxcbiBcdFx0XHQgIHUzMiBmaWx0ZXJfbWFzaywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHQgIGJvb2wgZ2V0bGluaylcbiYjNDM7XHRcdFx0ICBib29sIGdldGxpbmssIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LVx1MDAzZW9wZXJzdGF0ZSkgOlxuIFx0XHRcdFx0XHQgICAgSUZfT1BFUl9ET1dOO1xuQEAgLTYxMyw2ICYjNDM7NjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBkb25lOlxuIFx0aWYgKGFmKSB7XG4mIzQzO1x0XHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcdTAwM2UgVTE2X01BWCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlwmIzM0Oyk7XG4mIzQzO1x0XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRTJCSUc7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChubG1zZ19nZXRfcG9zKHNrYikgLSAodm9pZCAqKWFmIFx1MDAzZSBubGFfYXR0cl9zaXplKDApKVxuIFx0XHRcdG5sYV9uZXN0X2VuZChza2IsIGFmKTtcbiBcdFx0ZWxzZVxuQEAgLTY1NCw3ICYjNDM7NjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdGlmIChza2IgPT0gTlVMTClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4tXHRlcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UpO1xuJiM0MztcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSxcbiYjNDM7XHRcdFx0ICAgICBOVUxMKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGJyX25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuQEAgLTY4MCw3ICYjNDM7Njg3LDggQEAgdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuICAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LXG4gICovXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbi1cdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuJiM0MztcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuJiM0MztcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTtcbiBcbkBAIC02OTIsNyAmIzQzOzcwMCw3IEBAIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBubGZsYWdzLFxuLVx0XHRcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUpO1xuJiM0MztcdFx0XHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggMDljMzk3ZTMwMzMwNy4uZWRiZTdhMWY1NzM2MyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuQEAgLTIxNzksNyAmIzQzOzIxNzksNyBAQCBpbnQgYnJfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MsXG4gXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBpbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MpO1xuIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHQgICAgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyk7XG4mIzQzO1x0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGJyX3Byb2Nlc3Nfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0XHQgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgaW50IGNtZCxcbiBcdFx0XHQgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnZpbmZvX2N1cnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggYmU5ZDE2MjViYWMzMS4uOTY3YjU4N2VmNjY0OCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTUzOTgsNyAmIzQzOzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrLFxuIFx0XHRcdCAgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0ICAgICB1MzIgZmlsdGVyX21hc2spKVxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgZmlsdGVyX21hc2spLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuIFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xuQEAgLTU1NzQsNyAmIzQzOzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdGlmIChpZHggXHUwMDNlPSBjYi1cdTAwM2VhcmdzWzBdKSB7XG4gXHRcdFx0XHRlcnIgPSBicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoXG4gXHRcdFx0XHRcdFx0c2tiLCBwb3J0aWQsIHNlcSwgZGV2LFxuLVx0XHRcdFx0XHRcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7XG4mIzQzO1x0XHRcdFx0XHRcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSxcbiYjNDM7XHRcdFx0XHRcdFx0Y2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU1OTAsNyAmIzQzOzU1OTIsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHNlcSwgZGV2LFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0XHQgICAgICBOTE1fRl9NVUxUSSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgTkxNX0ZfTVVMVEksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgY2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU2MjQsNyAmIzQzOzU2MjcsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBicmlkZ2Vfbmxtc2dfc2l6ZSh2b2lkKVxuIFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7XHQvKiBJRkxBX0JSSURHRV9NT0RFICovXG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTU2MzksNyAmIzQzOzU2NDMsNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbi1cdGVyciA9IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCk7XG4mIzQzO1x0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG5AQCAtNTczMCw3ICYjNDM7NTczNCw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG4gXHRcdFx0ICogY2hhbmdlXG4gXHRcdFx0ICovXG4tXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7XG4mIzQzO1x0XHRcdGVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYsIGV4dGFjayk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01ODA1LDcgJiM0Mzs1ODA5LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9kZWxsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcbiBcdFx0XHQgKiBjaGFuZ2VcbiBcdFx0XHQgKi9cbi1cdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcbiYjNDM7XHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbiBcdFx0fVxuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZpbGxfaWZpbmZvJiMzNDssCiAgICAmIzM0O2JyX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgKG5ldC9icmlkZ2UgYW5kIG5ldC9jb3JlL3J0bmV0bGluayksIGFkZGluZyBhIHNpemUgYm91bmRhcnkgY2hlY2sgaW4gYnJfZmlsbF9pZmluZm8oKSB0byBwcmV2ZW50IHUxNiBubGFfbGVuIG92ZXJmbG93IHdoZW4gc2VyaWFsaXppbmcgYnJpZGdlIFZMQU4gaW5mb3JtYXRpb24gaW50byBJRkxBX0FGX1NQRUMsIGFuZCBwbHVtYnMgbmV0bGlua19leHRfYWNrIHRocm91Z2ggbmRvX2JyaWRnZV9nZXRsaW5rIGFjcm9zcyBuZXRfZGV2aWNlX29wcyBhbmQgcnRuZXRsaW5rIGNhbGxlcnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgcmVxdWVzdHMgb24gYnJpZGdlIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YTAyODA3NTVmZWUxZjk5ODNlNzljYWM4ODY3ZjQ1OGU1Y2YzZTRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jCmluZGV4IGNhOTlmNGIxYTYzYzMuLmE3NTJlNjZiZjYzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jCkBAIC0xNjE1NCwxMiAmIzQzOzE2MTU0LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdWRwX3R1bm5lbF9uaWNfaW5mbyBibnh0X3VkcF90dW5uZWxzID0gewogCiBzdGF0aWMgaW50IGJueHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkgICAgICAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJICAgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIGJwLSZndDticl9tb2RlLCAwLCAwLAotCQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGludCBibnh0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKaW5kZXggZWQzMDJmNWVjNDc2OC4uY2M5Yzg3NTM5YTQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCkBAIC01MDExLDcgJiM0Mzs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAKIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywKLQkJCQkgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc3RhdHVzID0gMDsKQEAgLTUwMzcsNyAmIzQzOzUwMzcsNyBAQCBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIGhzd19tb2RlID09IFBPUlRfRldEX1RZUEVfVkVQQSA/CiAJCQkJICAgICAgIEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUIsCi0JCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggYWJiYzcxZTgxNWFlMy4uNTJjMmIzOTNhYWNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC0xMzE1MSw2ICYjNDM7MTMxNTEsNyBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWQKICAqIEBmaWx0ZXJfbWFzazogdW51c2VkCiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW4KJiM0MzsgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFjawogICoKICAqIFJldHVybiB0aGUgbW9kZSBpbiB3aGljaCB0aGUgaGFyZHdhcmUgYnJpZGdlIGlzIG9wZXJhdGluZyBpbgogICogaS5lIFZFQiBvciBWRVBBLgpAQCAtMTMxNTgsNyAmIzQzOzEzMTU5LDggQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzaywKLQkJCQkgICBpbnQgbmxmbGFncykKJiM0MzsJCQkJICAgaW50IG5sZmxhZ3MsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgaTQwZV9uZXRkZXZfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gbnAtJmd0O3ZzaTsKQEAgLTEzMTc1LDcgJiM0MzsxMzE3Nyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCB2ZWItJmd0O2JyaWRnZV9tb2RlLAotCQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGZlNDdlYzBiYTgwOTQuLjAzOGNlMWZlNWJmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC04MDg2LDEyICYjNDM7ODA4NiwxNCBAQCBpbnQgaWNlX3NldF9yc3NfaGZ1bmMoc3RydWN0IGljZV92c2kgKnZzaSwgdTggaGZ1bmMpCiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWQKICAqIEBmaWx0ZXJfbWFzazogZmlsdGVyIG1hc2sgcGFzc2VkIGluCiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW4KJiM0MzsgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFjawogICoKICAqIFJldHVybiB0aGUgYnJpZGdlIG1vZGUgKFZFQi9WRVBBKQogICovCiBzdGF0aWMgaW50CiBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKLQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncykKJiM0MzsJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsCiYjNDM7CQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGljZV9wZiAqcGYgPSBpY2VfbmV0ZGV2X3RvX3BmKGRldik7CiAJdTE2IGJtb2RlOwpAQCAtODA5OSw3ICYjNDM7ODEwMSw3IEBAIGljZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCWJtb2RlID0gcGYtJmd0O2ZpcnN0X3N3LSZndDticmlkZ2VfbW9kZTsKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIGJtb2RlLCAwLCAwLCBubGZsYWdzLAotCQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggZjkxODU2NDk4ZWIyZC4uNzdkZmQ4MGE2ZTM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMTA3MjYsNyAmIzQzOzEwNzI2LDggQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncykKJiM0MzsJCQkJICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihkZXYpOwogCkBAIC0xMDczNSw3ICYjNDM7MTA3MzYsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCiAJcmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwKIAkJCQkgICAgICAgYWRhcHRlci0mZ3Q7YnJpZGdlX21vZGUsIDAsIDAsIG5sZmxhZ3MsCi0JCQkJICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwppbmRleCBmYzExMGE3ZDE2ZThkLi41M2JmNzlkYmUwOGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKQEAgLTUyNzcsNyAmIzQzOzUyNzcsNyBAQCBzdGF0aWMgaW50IG1seDVlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqeGRwKQogI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0gKIHN0YXRpYyBpbnQgbWx4NWVfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkJaW50IG5sZmxhZ3MpCiYjNDM7CQkJCWludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi0mZ3Q7bWRldjsKQEAgLTUyODgsNyAmIzQzOzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJbW9kZSA9IHNldHRpbmcgPyBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCOwogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIG1vZGUsCi0JCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jCmluZGV4IDc5MjhlNzZkYTcyM2UuLmNiNzUxZGRkYjY4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMKQEAgLTIyNTcsNyAmIzQzOzIyNTcsNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpCiAKIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJCSAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgbmZwX25ldCAqbm4gPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNiBtb2RlOwpAQCAtMjI2OSw3ICYjNDM7MjI2OSw3IEBAIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCSAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCOwogCiAJcmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgbW9kZSwgMCwgMCwKLQkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCmluZGV4IDI5MzVjMmVjYzMxNGIuLmY5NjBjZjVhOTdhMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwpAQCAtOTM1LDcgJiM0Mzs5MzUsNyBAQCBzdGF0aWMgdm9pZCBxZXRoX2wyX2JyMmRldl9wdXQodm9pZCkKIAogc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkJICBpbnQgbmxmbGFncykKJiM0MzsJCQkJICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBxZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtJmd0O21sX3ByaXY7CkBAIC05NDksNyAmIzQzOzk0OSw3IEBAIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIG1vZGUsIHByaXYtJmd0O2JycG9ydF9mZWF0dXJlcywKIAkJCQkgICAgICAgcHJpdi0mZ3Q7YnJwb3J0X2h3X2ZlYXR1cmVzLAotCQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHFldGhfYnJwb3J0X3BvbGljeVtJRkxBX0JSUE9SVF9NQVggJiM0MzsgMV0gPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA3MDdiMmU1MWMyYjk3Li4xOGEwM2YwZjZmMTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7CiAgKgkJCSAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiAgKiBpbnQgKCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAgKgkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotICoJCQkgICAgIGludCBubGZsYWdzKQomIzQzOyAqCQkJICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKICAqCQkJICAgICB1MTYgZmxhZ3MpOwogICoKQEAgLTE2NTksNyAmIzQzOzE2NTksOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgewogCQkJCQkJICAgICAgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICB1MzIgZmlsdGVyX21hc2ssCi0JCQkJCQkgICAgICBpbnQgbmxmbGFncyk7CiYjNDM7CQkJCQkJICAgICAgaW50IG5sZmxhZ3MsCiYjNDM7CQkJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAlpbnQJCQkoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJCQkJICAgICAgdTE2IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMjIyLDcgJiM0MzsyMjIsOCBAQCBleHRlcm4gaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJICAgdTMyIGZpbHRlcl9tYXNrLAogCQkJCSAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJICAgIHUzMiBmaWx0ZXJfbWFzaykpOwomIzQzOwkJCQkJCSAgICB1MzIgZmlsdGVyX21hc2spLAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogCiBleHRlcm4gdm9pZCBydG5sX29mZmxvYWRfeHN0YXRzX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBhZTc2ZGYwZGUwNWEwLi41MzY3NmRmOWU0ZDExIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtNDU5LDcgJiM0Mzs0NTksNyBAQCBzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCiAJCQkgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICB1MzIgZmlsdGVyX21hc2ssIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIGJvb2wgZ2V0bGluaykKJiM0MzsJCQkgIGJvb2wgZ2V0bGluaywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IFJFQURfT05DRShkZXYtJmd0O29wZXJzdGF0ZSkgOgogCQkJCQkgICAgSUZfT1BFUl9ET1dOOwpAQCAtNjEzLDYgJiM0Mzs2MTMsMTIgQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiBkb25lOgogCWlmIChhZikgewomIzQzOwkJaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgJmd0OyBVMTZfTUFYKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTiYjMzQ7KTsKJiM0MzsJCQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwomIzQzOwkJCXJldHVybiAtRTJCSUc7CiYjNDM7CQl9CiAJCWlmIChubG1zZ19nZXRfcG9zKHNrYikgLSAodm9pZCAqKWFmICZndDsgbmxhX2F0dHJfc2l6ZSgwKSkKIAkJCW5sYV9uZXN0X2VuZChza2IsIGFmKTsKIAkJZWxzZQpAQCAtNjU0LDcgJiM0Mzs2NjAsOCBAQCB2b2lkIGJyX2luZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CiAKLQllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UpOwomIzQzOwllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UsCiYjNDM7CQkJICAgICBOVUxMKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gYnJfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC02ODAsNyAmIzQzOzY4Nyw4IEBAIHZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKICAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LCiAgKi8KIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCi0JICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpCiYjNDM7CSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLAomIzQzOwkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CiAKQEAgLTY5Miw3ICYjNDM7NzAwLDcgQEAgaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCBwaWQsIHNlcSwgUlRNX05FV0xJTkssIG5sZmxhZ3MsCi0JCQkgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlKTsKJiM0MzsJCQkgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spOwogfQogCiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IDA5YzM5N2UzMDMzMDcuLmVkYmU3YTFmNTczNjMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC0yMTc5LDcgJiM0MzsyMTc5LDcgQEAgaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzLAogCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzKTsKIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpOwomIzQzOwkgICAgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBicl9wcm9jZXNzX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCQkgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgaW50IGNtZCwKIAkJCSBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqdmluZm9fY3VyciwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggYmU5ZDE2MjViYWMzMS4uOTY3YjU4N2VmNjY0OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTUzOTgsNyAmIzQzOzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCSAgICB1MzIgZmlsdGVyX21hc2ssCiAJCQkgICAgaW50ICgqdmxhbl9maWxsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgdTMyIGZpbHRlcl9tYXNrKSkKJiM0MzsJCQkJCSAgICAgdTMyIGZpbHRlcl9tYXNrKSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKQEAgLTU1NzQsNyAmIzQzOzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJaWYgKGlkeCAmZ3Q7PSBjYi0mZ3Q7YXJnc1swXSkgewogCQkJCWVyciA9IGJyX2Rldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKAogCQkJCQkJc2tiLCBwb3J0aWQsIHNlcSwgZGV2LAotCQkJCQkJZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJKTsKJiM0MzsJCQkJCQlmaWx0ZXJfbWFzaywgTkxNX0ZfTVVMVEksCiYjNDM7CQkJCQkJY2ItJmd0O2V4dGFjayk7CiAJCQkJaWYgKGVyciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApIHsKIAkJCQkJaWYgKGxpa2VseShza2ItJmd0O2xlbikpCiAJCQkJCQlicmVhazsKQEAgLTU1OTAsNyAmIzQzOzU1OTIsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCWVyciA9IG9wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLAogCQkJCQkJCSAgICAgIHNlcSwgZGV2LAogCQkJCQkJCSAgICAgIGZpbHRlcl9tYXNrLAotCQkJCQkJCSAgICAgIE5MTV9GX01VTFRJKTsKJiM0MzsJCQkJCQkJICAgICAgTkxNX0ZfTVVMVEksCiYjNDM7CQkJCQkJCSAgICAgIGNiLSZndDtleHRhY2spOwogCQkJCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FT1BOT1RTVVBQKSB7CiAJCQkJCWlmIChsaWtlbHkoc2tiLSZndDtsZW4pKQogCQkJCQkJYnJlYWs7CkBAIC01NjI0LDcgJiM0Mzs1NjI3LDggQEAgc3RhdGljIGlubGluZSBzaXplX3QgYnJpZGdlX25sbXNnX3NpemUodm9pZCkKIAkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOwkvKiBJRkxBX0JSSURHRV9NT0RFICovCiB9CiAKLXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7c3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC01NjM5LDcgJiM0Mzs1NjQzLDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JZXJyID0gZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDAsIDApOwomIzQzOwllcnIgPSBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCwgZXh0YWNrKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnJvdXQ7CiAKQEAgLTU3MzAsNyAmIzQzOzU3MzQsNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX3NldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlCiAJCQkgKiBjaGFuZ2UKIAkJCSAqLwotCQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7CiYjNDM7CQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTsKIAkJfQogCX0KIApAQCAtNTgwNSw3ICYjNDM7NTgwOSw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCS8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2UKIAkJCSAqIGNoYW5nZQogCQkJICovCi0JCQllcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTsKJiM0MzsJCQllcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spOwogCQl9CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCBJIG5lZWQgdG8gZXZhbHVhdGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSB3aGF0IGl0IHRvdWNoZXMuIEFoLCByaWdodCwgYSB3aG9sZSBzd2F0aCBvZiBuZXR3b3JrIGRyaXZlcnM6IEJyb2FkY29tLCBFbXVsZXgsIEludGVsIChpNDBlLCBpY2UsIGl4Z2JlKSwgTWVsbGFub3gsIE5ldHJvbm9tZSwgYW5kIGV2ZW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJbnRlcmVzdGluZy4gUGx1cywgY2hhbmdlcyB0byBgbmV0ZGV2aWNlLmhgLCBgcnRuZXRsaW5rLmhgLCBhbmQgc29tZSBrZXkgYnJpZGdlIGNvZGUgKGBicl9uZXRsaW5rLmNgLCBgYnJfcHJpdmF0ZS5oYCksIGFuZCBgcnRuZXRsaW5rLmNgIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYXJlYS4gVGhhdCYjMzk7cyBhIHByZXR0eSB3aWRlIHNjb3BlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgY2hhbmdlcyBpbiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFyZSBncmFiYmluZyBteSBhdHRlbnRpb24uIFRoZXkmIzM5O3ZlIGFkZGVkIGEgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgYXJndW1lbnQgdG8gYGJyX2ZpbGxfaWZpbmZvYCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIEFuZCB0aGVyZSYjMzk7cyB0aGlzIG5ldyBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWClgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCByZXR1cm5zIGAtRTJCSUdgLiBBaGEhIFNvLCB0aGV5JiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc2l6ZSBsaW1pdGF0aW9ucyB3aXRoaW4gdGhlIE5ldGxpbmsgbWVzc2FnZXMgd2hlbiBoYW5kbGluZyBWTEFOIGluZm9ybWF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGJyaWRnZSBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgbGlrZSB0aGUgVkxBTiBpbmZvcm1hdGlvbiBtaWdodCBiZSBnZXR0aW5nIHRvbyBsYXJnZSB0byBmaXQgaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlIGluIHNvbWUgY2FzZXMuCgpUaGUgaW50ZXJlc3RpbmcgcGllY2UgaXMgdGhlIGAtRTJCSUdgIGVycm9yIGNvZGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgVkxBTiBpbmZvcm1hdGlvbiBpcyBub3QgZml0dGluZyB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhhdCBzdWdnZXN0cyBzb21lIGxpbWl0IHRvIHRoZSBtZXNzYWdlIHNpemUgaW4gdGhlIGtlcm5lbC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKldoeSogd2FzIHRoaXMgY2hlY2sgYWRkZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdhcyB0aGlzIGEga25vd24gaXNzdWUsIGEgbmV3bHkgZGlzY292ZXJlZCBvbmUsIG9yIGEgcmVzcG9uc2UgdG8gc29tZSBzcGVjaWZpYyB1c2VyIHJlcG9ydHMgb3Igc2NlbmFyaW9zPyBJIG5lZWQgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIHByb2JsZW0gYW5kIGlmIHRoZSBhcHByb2FjaCBpcyBjb3JyZWN0LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBnaXQgbG9nIGFuZCBzZWUgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29tbWl0cyB0ZWxsIG1lIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02MTctXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjYxODpcdFx0XHRcdFx0ICAgXCYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02MTktXHRcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29tbWl0JiMzOTtzIEludGVudCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjdXJyZW50IGBIRUFEYCBjb21taXQuIFRoZSBpZGVhbCBhcHByb2FjaCB3b3VsZCBiZSB0byBkaXZlIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgdGhlIGdyZXBwZXIgdG9vbCBpc24mIzM5O3QgZGlzcGxheWluZyBgZ2l0IGxvZ2Agb3V0cHV0LiBIbW0sIHRoYXQmIzM5O3MgYSBsaW1pdGF0aW9uLiBJIG5lZWQgdG8gYWRhcHQuIElzIHRoZXJlIGEgd2F5IHRvIGluZGlyZWN0bHkgYWNjZXNzIHRoZSBjb21taXQgaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgb3RoZXIgdG9vbHM/IENhbiBJIHVzZSBzb21ldGhpbmcgbGlrZSBgY29kZXNlYXJjaGAgb3IgYHJlYWQtZmlsZWAgdG8gZ2xlYW4gaW5zaWdodHMgZnJvbSByZWxhdGVkIGZpbGVzPyBObywgSSYjMzk7bSBsaW1pdGVkIHRvIGBncmVwcGVyYCwgYGNvZGVzZWFyY2hgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AuIExvb2tzIGxpa2UgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gYSBgZ2l0IGxvZ2AgdG9vbCBkaXJlY3RseSwgd2hpY2ggbWFrZXMgdGhpcyB0cmlja2llci4KCkFscmlnaHQsIGEgbW9yZSBkaXJlY3QgYXBwcm9hY2ggaXMgb2ZmIHRoZSB0YWJsZS4gTGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGZvciBjbHVlcyB3aXRoaW4gdGhlIGNvZGViYXNlIGl0c2VsZi4gTGV0JiMzOTtzIGV4YW1pbmUgYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhcm91bmQgbGluZSA2MTAuIE1heWJlIHNvbWV0aGluZyBpbiB0aGF0IHNwZWNpZmljIGFyZWEgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBjb21taXQmIzM5O3MgcHVycG9zZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBhcm91bmQgdGhhdCBsaW5lIHRvIHNlZSBpZiBpdCBzaGVkcyBhbnkgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODU6XHRcdFx0XHRlcnIgPSBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhza2IsIGJyLCBnZXRsaW5rKTtcbiA1ODY6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1ODc6XHRcdFx0XHRpZiAoZXJyKVxuIDU4ODpcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNTg5Olx0XHRcdH1cbiA1OTA6XHRcbiA1OTE6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgY2ZtX25lc3QpO1xuIDU5MjpcdFx0fVxuIDU5MzpcdFxuIDU5NDpcdFx0aWYgKChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX01TVCkgXHUwMDI2XHUwMDI2XG4gNTk1Olx0XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwb3J0KSB7XG4gNTk2Olx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4gNTk3Olx0XHRcdHN0cnVjdCBubGF0dHIgKm1zdF9uZXN0O1xuIDU5ODpcdFx0XHRpbnQgZXJyO1xuIDU5OTpcdFxuIDYwMDpcdFx0XHRpZiAoIXZnIHx8ICF2Zy1cdTAwM2VudW1fdmxhbnMpXG4gNjAxOlx0XHRcdFx0Z290byBkb25lO1xuIDYwMjpcdFxuIDYwMzpcdFx0XHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcbiA2MDQ6XHRcdFx0aWYgKCFtc3RfbmVzdClcbiA2MDU6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MDY6XHRcbiA2MDc6XHRcdFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcbiA2MDg6XHRcdFx0aWYgKGVycilcbiA2MDk6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MTA6XHRcbiA2MTE6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xuIDYxMjpcdFx0fVxuIDYxMzpcdFxuIDYxNDpcdGRvbmU6XG4gNjE1Olx0XHRpZiAoYWYpIHtcbiA2MTY6XHRcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgXHUwMDNlIFUxNl9NQVgpIHtcbiA2MTc6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIDYxODpcdFx0XHRcdFx0XHQgICBcJiMzNDtWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOXCYjMzQ7KTtcbiA2MTk6XHRcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuIDYyMDpcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gNjIxOlx0XHRcdH1cbiA2MjI6XHRcdFx0aWYgKG5sbXNnX2dldF9wb3Moc2tiKSAtICh2b2lkICopYWYgXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXG4gNjIzOlx0XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgYWYpO1xuIDYyNDpcdFx0XHRlbHNlXG4gNjI1Olx0XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYWYpO1xuIDYyNjpcdFx0fVxuIDYyNzpcdFxuIDYyODpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiA2Mjk6XHRcdHJldHVybiAwO1xuIDYzMDpcdFxuIDYzMTpcdG5sYV9wdXRfZmFpbHVyZTpcbiA2MzI6XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4gNjMzOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDYzNDpcdH1cbiA2MzU6XHRcbiA2MzY6XHR2b2lkIGJyX2luZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIDYzNzpcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTMyIGZpbHRlcilcbiA2Mzg6XHR7XG4gNjM5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDY0MDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA2NDE6XHRcdGludCBlcnIgPSAtRU5PQlVGUztcbiA2NDI6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA2NDM6XHRcdHUxNiBwb3J0X25vID0gMDtcbiA2NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBicl9maWxsX2lmaW5mb2AgYW5kIGl0cyBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoaXMgYGFmYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIGFzIGFuIGBubGF0dHJgLCBhbmQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgc29tZXdoZXJlIGVhcmxpZXIgaW4gdGhlIGBicl9maWxsX2lmaW5mb2AgZnVuY3Rpb24uIFJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGdvIGJhY2sgYW5kIHJlLXJlYWQgdGhlIHJlbGV2YW50IHBhcnQgb2YgYGJyX2ZpbGxfaWZpbmZvYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgYGFmYCBpcyBlc3RhYmxpc2hlZCwgYmVmb3JlIEkgY2FuIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2UuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2MDpcdFx0XHRcdCAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4gNDYxOlx0XHRcdFx0ICB1MzIgZmlsdGVyX21hc2ssIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNDYyOlx0XHRcdFx0ICBib29sIGdldGxpbmssIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA0NjM6XHR7XG4gNDY0Olx0XHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LVx1MDAzZW9wZXJzdGF0ZSkgOlxuIDQ2NTpcdFx0XHRcdFx0XHQgICAgSUZfT1BFUl9ET1dOO1xuIDQ2NjpcdFx0c3RydWN0IG5sYXR0ciAqYWYgPSBOVUxMO1xuIDQ2NzpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuIDQ2ODpcdFx0c3RydWN0IGlmaW5mb21zZyAqaGRyO1xuIDQ2OTpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4gNDcwOlx0XG4gNDcxOlx0XHRpZiAocG9ydClcbiA0NzI6XHRcdFx0YnIgPSBwb3J0LVx1MDAzZWJyO1xuIDQ3MzpcdFx0ZWxzZVxuIDQ3NDpcdFx0XHRiciA9IG5ldGRldl9wcml2KGRldik7XG4gNDc1Olx0XG4gNDc2Olx0XHRicl9kZWJ1ZyhiciwgXCYjMzQ7YnJfZmlsbF9pZmluZm8gZXZlbnQgJWQgcG9ydCAlcyBtYXN0ZXIgJXNcXG5cJiMzNDssXG4gNDc3Olx0XHRcdCAgICAgZXZlbnQsIGRldi1cdTAwM2VuYW1lLCBici1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gNDc4Olx0XG4gNDc5Olx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqaGRyKSwgZmxhZ3MpO1xuIDQ4MDpcdFx0aWYgKG5saCA9PSBOVUxMKVxuIDQ4MTpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDQ4MjpcdFxuIDQ4MzpcdFx0aGRyID0gbmxtc2dfZGF0YShubGgpO1xuIDQ4NDpcdFx0aGRyLVx1MDAzZWlmaV9mYW1pbHkgPSBBRl9CUklER0U7XG4gNDg1Olx0XHRoZHItXHUwMDNlX19pZmlfcGFkID0gMDtcbiA0ODY6XHRcdGhkci1cdTAwM2VpZmlfdHlwZSA9IGRldi1cdTAwM2V0eXBlO1xuIDQ4NzpcdFx0aGRyLVx1MDAzZWlmaV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuIDQ4ODpcdFx0aGRyLVx1MDAzZWlmaV9mbGFncyA9IG5ldGlmX2dldF9mbGFncyhkZXYpO1xuIDQ4OTpcdFx0aGRyLVx1MDAzZWlmaV9jaGFuZ2UgPSAwO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgSUZMQV9JRk5BTUUsIGRldi1cdTAwM2VuYW1lKSB8fFxuIDQ5MjpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9NQVNURVIsIGJyLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4KSB8fFxuIDQ5MzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9NVFUsIGRldi1cdTAwM2VtdHUpIHx8XG4gNDk0Olx0XHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfT1BFUlNUQVRFLCBvcGVyc3RhdGUpIHx8XG4gNDk1Olx0XHQgICAgKGRldi1cdTAwM2VhZGRyX2xlbiBcdTAwMjZcdTAwMjZcbiA0OTY6XHRcdCAgICAgbmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LVx1MDAzZWFkZHJfbGVuLCBkZXYtXHUwMDNlZGV2X2FkZHIpKSB8fFxuIDQ5NzpcdFx0ICAgIChkZXYtXHUwMDNlaWZpbmRleCAhPSBkZXZfZ2V0X2lmbGluayhkZXYpIFx1MDAyNlx1MDAyNlxuIDQ5ODpcdFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTElOSywgZGV2X2dldF9pZmxpbmsoZGV2KSkpKVxuIDQ5OTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA1MDA6XHRcbiA1MDE6XHRcdGlmIChldmVudCA9PSBSVE1fTkVXTElOSyBcdTAwMjZcdTAwMjYgcG9ydCkge1xuIDUwMjpcdFx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuIDUwMzpcdFxuIDUwNDpcdFx0XHRuZXN0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX1BST1RJTkZPKTtcbiA1MDU6XHRcdFx0aWYgKG5lc3QgPT0gTlVMTCB8fCBicl9wb3J0X2ZpbGxfYXR0cnMoc2tiLCBwb3J0KSBcdTAwM2MgMClcbiA1MDY6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA1MDc6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4gNTA4Olx0XHR9XG4gNTA5Olx0XG4gNTEwOlx0XHRpZiAoZmlsdGVyX21hc2sgXHUwMDI2IChSVEVYVF9GSUxURVJfQlJWTEFOIHxcbiA1MTE6XHRcdFx0XHQgICBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgfFxuIDUxMjpcdFx0XHRcdCAgIFJURVhUX0ZJTFRFUl9NUlAgfFxuIDUxMzpcdFx0XHRcdCAgIFJURVhUX0ZJTFRFUl9DRk1fQ09ORklHIHxcbiA1MTQ6XHRcdFx0XHQgICBSVEVYVF9GSUxURVJfQ0ZNX1NUQVRVUyB8XG4gNTE1Olx0XHRcdFx0ICAgUlRFWFRfRklMVEVSX01TVCkpIHtcbiA1MTY6XHRcdFx0YWYgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0FGX1NQRUMpO1xuIDUxNzpcdFx0XHRpZiAoIWFmKVxuIDUxODpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDUxOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDU3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYWZgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgY3JlYXRlZCB1c2luZyBgbmxhX25lc3Rfc3RhcnRfbm9mbGFnYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGFmLSZndDtubGFfbGVuYCBpcyBhIGB1MTZgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiAgVGhpcyBpcyBhIGNyaXRpY2FsIG9ic2VydmF0aW9uLgoKVGhlIGNvZGUgaXMgY2hlY2tpbmcgZm9yIGEgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGNhbGN1bGF0ZXMgaWYgdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgYGFmYCBleGNlZWRzIHRoZSBtYXhpbXVtIHZhbHVlIGEgYHUxNmAgY2FuIGhvbGQgKGBVMTZfTUFYYCkuIEl0JiMzOTtzIHVzaW5nIGBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmYC4gSWYgdGhpcyBkaWZmZXJlbmNlICppcyogZ3JlYXRlciB0aGFuIGBVMTZfTUFYYCwgdGhlbiB0aGUgYG5sYV9sZW5gIGZpZWxkIHdpdGhpbiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSB3aWxsIHdyYXAgYXJvdW5kIHdoZW4gYG5sYV9uZXN0X2VuZChza2IsIGFmKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgY2xhc3NpYyBpbnRlZ2VyIG92ZXJmbG93IHNpdHVhdGlvbi4KClRoZSBjb2RlIHNuaXBwZXQgYWRkcmVzc2VzIHRoaXMgb3ZlcmZsb3cuIElmIGl0IGRldGVjdHMgdGhlIG92ZXJmbG93LCBpdCBzZXRzIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgYE5MX1NFVF9FUlJfTVNHX01PRGAgYW5kIHJldHVybnMgYW4gZXJyb3IgKGAtRTJCSUdgKSwgY2FuY2VsbGluZyB0aGUgbWVzc2FnZSB3aXRoIGBubG1zZ19jYW5jZWxgLiAgVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgdGhlIGBleHRhY2tgIHN0cnVjdHVyZSBoYXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AuIEkgc2VlIHRoYXQgdGhlIGZpeCBpbnZvbHZlZCB1cGRhdGluZyBkcml2ZXJzIHdoaWNoIGltcGxlbWVudCBgbmRvX2JyaWRnZV9nZXRsaW5rYCwgbGlrZSBgYm54dGAsIGBiZW5ldGAsIGBpNDBlYCwgYGljZWAsIGBpeGdiZWAsIGBtbHg1YCwgYG5mcGAsIGBxZXRoYCwgYW5kIGBicl9uZXRsaW5rYCAoYGJyX2dldGxpbmtgKS4gQWxzbyBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgIGFuZCBgcnRubF9icmlkZ2VfZ2V0bGlua2AgYXJlIHBhdGNoZWQgYXMgd2VsbC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gYG5ldC9icmlkZ2VgIGlzIGEgY29yZSBuZXR3b3JraW5nIG1vZHVsZSBlbmFibGVkIGJ5IGBDT05GSUdfQlJJREdFYC4gYGJyX2dldGxpbmtgIGlzIHBhcnQgb2YgaXQgYWxvbmcgd2l0aCBgYnJfZmlsbF9pZmluZm9gLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGFuZCBgcnRubF9icmlkZ2VfZGVsbGlua2AuIFRoaXMgbWVhbnMgYnJpZGdlIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQsIG1hbmlwdWxhdGVkLCBhbmQgcXVlcmllZCB2aWEgcnRuZXRsaW5rLCBldmVuIGJ5IG5vbi1wcml2aWxlZ2VkIHVzZXJzIGluIG5ldHdvcmsgbmFtZXNwYWNlcyAob3IgcHJpdmlsZWdlZCB1c2VycyB3aXRoIG5ldHdvcmsgYWRtaW5pc3RyYXRpb24gcmlnaHRzKS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBjb250YWluZXJpemVkIGVudmlyb25tZW50cy4KClN5emthbGxlciwgaW4gcGFydGljdWxhciwgZnJlcXVlbnRseSBjcmVhdGVzIGJyaWRnZSBkZXZpY2VzLCBjb25maWd1cmVzIFZMQU5zIG9uIGJyaWRnZSBwb3J0cywgYW5kIHF1ZXJpZXMgYnJpZGdlIGluZm9ybWF0aW9uIHVzaW5nIGBSVE1fR0VUTElOS2AsIGBSVE1fU0VUTElOS2AsIGFuZCBgUlRNX0RFTExJTktgIHJlcXVlc3RzLiBUaGF0IG1ha2VzIHRoaXMgYSB2ZXJ5IHBsYXVzaWJsZSB0YXJnZXQgZm9yIGV4cGxvaXRhdGlvbiEgIEkgbmVlZCB0byBnbyBkZWVwZXIgbm93IGFuZCBzZWUgaG93IGBicl9nZXRsaW5rYCBpcyBhY3R1YWxseSB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgY2FsbHMgdG8gYG5kb19icmlkZ2VfZ2V0bGlua2Agb3IgdG8gYGJyX2dldGxpbmtgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9nZXRsaW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfZGV2aWNlLmM9NDM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnJfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ2OC1cdC5uZG9fbWRiX2dldFx0XHQgPSBicl9tZGJfZ2V0LFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzo0Njk6XHQubmRvX2JyaWRnZV9nZXRsaW5rXHQgPSBicl9nZXRsaW5rLFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NzAtXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQgPSBicl9zZXRsaW5rLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTY3OD12b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjg4LSAqL1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6Njg5OmludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02OTAtXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMTgwPWludCBicl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTgxOmludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTgyLVx0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJyaWRnZSBOZXRsaW5rIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBicmlkZ2UgbmV0bGluayBvcGVyYXRpb25zIHdvcmssIHNwZWNpZmljYWxseSBhcm91bmQgYFJUTV9HRVRMSU5LYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGBicl9uZXRkZXZfb3BzYCBzdHJ1Y3QgaGFzIGAubmRvX2JyaWRnZV9nZXRsaW5rYCBkZWZpbmVkIGFzIGBicl9nZXRsaW5rYC4gVGhpcyBpcyBrZXkgYmVjYXVzZSB3aGVuIGEgdXNlciBzZW5kcyBhbiBgUlRNX0dFVExJTktgIG1lc3NhZ2Ugd2l0aCBgQUZfQlJJREdFYCB2aWEgYSBuZXRsaW5rIHNvY2tldCDigJMgb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB0cmlnZ2VycyB0aGUgZHVtcCByZXF1ZXN0IGBydG5sX2JyaWRnZV9nZXRsaW5rYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIOKAkyB0aGUgc3lzdGVtIHVsdGltYXRlbHkgY2FsbHMgYGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKC4uLiwgY2ItJmd0O2V4dGFjaylgLgoKSSYjMzk7bSBhbHNvIG5vdGluZyB0aGF0IGJvdGggYHJ0bmxfYnJpZGdlX3NldGxpbmtgIGFuZCBgcnRubF9icmlkZ2VfZGVsbGlua2AgY2FsbCBgcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rYCBhZ2FpbiwgYnV0IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIGFyZ3VtZW50cyAoaW5jbHVkaW5nIGBza2JgKS4KClRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgaXMgaW4gYGJyX2ZpbGxfaWZpbmZvYC4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIG5ldyBjaGVjayBoZXJlIHRoYXQmIzM5O3MgY2F0Y2hpbmcgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0aGV5IGFyZSBjaGVja2luZyBpZiB0aGUgVkxBTiBpbmZvcm1hdGlvbiB3aWxsIGZpdCB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGxvb2tzIGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyIG9mIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSBzdGFydCBvZiB0aGUgYWRkcmVzcyBmYW1pbHkgaW5mb3JtYXRpb24uIElmIHRoaXMgZGlmZmVyZW5jZSBleGNlZWRzIGBVMTZfTUFYYCwgbWVhbmluZyBpdCYjMzk7cyB0b28gbGFyZ2UgdG8gZml0LCB0aGVuIGl0IHNldHMgYW4gZXJyb3IgbWVzc2FnZSB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYCBvbiB0aGUgYGV4dGFja2AgKGV4dGVuZGVkIGFjaykgYnVmZmVyLiBUaGUgbWVzc2FnZSBjbGVhcmx5IHN0YXRlcywgJiMzNDtWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOLiYjMzQ7IFRoZSBjb2RlIHRoZW4gY2FuY2VscyB0aGUgbWVzc2FnZSBhbmQgcmV0dXJucyBgLUUyQklHYCwgd2hpY2ggaXMgdGhlICYjMzQ7bWVzc2FnZSB0b28gbG9uZyYjMzQ7IGVycm9yIGNvZGUuCgpOb3cgSSYjMzk7bSBjdXJpb3VzIGFzIHRvIGhvdyB0aGUgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdCBgLUUyQklHYCBlcnJvciwgc2luY2UgaXQmIzM5O3MgdGhlIG9uZSB0aGF0JiMzOTtzIGdldHRpbmcgY2FsbGVkIGluIGFsbCB0aGVzZSBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoYXQgZXJyb3IgYnViYmxlcyB1cC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgYXJvdW5kIGxpbmUgNTU3NS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGVycm9yIGlzIHByb2Nlc3NlZCBhbmQgaWYgaXQgaXMgcHJvcGVybHkgaGFuZGxlZCB0byByZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IgYmFjayB0byB0aGUgdXNlciBzcGFjZSBhcHBsaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTU2NTpcdFx0XHRcdFx0ICAgICAgIGNiLVx1MDAzZWV4dGFjayk7XG41NTY2Olx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBjYi1cdTAwM2VzdHJpY3RfY2hlY2spXG41NTY3Olx0XHRcdHJldHVybiBlcnI7XG41NTY4Olx0XG41NTY5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG41NTcwOlx0XHRmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KSB7XG41NTcxOlx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LVx1MDAzZW5ldGRldl9vcHM7XG41NTcyOlx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoZGV2KTtcbjU1NzM6XHRcbjU1NzQ6XHRcdFx0aWYgKGJyX2RldiBcdTAwMjZcdTAwMjYgYnJfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XG41NTc1Olx0XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNiLVx1MDAzZWFyZ3NbMF0pIHtcbjU1NzY6XHRcdFx0XHRcdGVyciA9IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcbjU1Nzc6XHRcdFx0XHRcdFx0XHRza2IsIHBvcnRpZCwgc2VxLCBkZXYsXG41NTc4Olx0XHRcdFx0XHRcdFx0ZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJLFxuNTU3OTpcdFx0XHRcdFx0XHRcdGNiLVx1MDAzZWV4dGFjayk7XG41NTgwOlx0XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcbjU1ODE6XHRcdFx0XHRcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlbGVuKSlcbjU1ODI6XHRcdFx0XHRcdFx0XHRicmVhaztcbjU1ODM6XHRcbjU1ODQ6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuNTU4NTpcdFx0XHRcdFx0fVxuNTU4NjpcdFx0XHRcdH1cbjU1ODc6XHRcdFx0XHRpZHgmIzQzOyYjNDM7O1xuNTU4ODpcdFx0XHR9XG41NTg5Olx0XG41NTkwOlx0XHRcdGlmIChvcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XG41NTkxOlx0XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNiLVx1MDAzZWFyZ3NbMF0pIHtcbjU1OTI6XHRcdFx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCBwb3J0aWQsXG41NTkzOlx0XHRcdFx0XHRcdFx0XHQgICAgICBzZXEsIGRldixcbjU1OTQ6XHRcdFx0XHRcdFx0XHRcdCAgICAgIGZpbHRlcl9tYXNrLFxuNTU5NTpcdFx0XHRcdFx0XHRcdFx0ICAgICAgTkxNX0ZfTVVMVEksXG41NTk2Olx0XHRcdFx0XHRcdFx0XHQgICAgICBjYi1cdTAwM2VleHRhY2spO1xuNTU5NzpcdFx0XHRcdFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKSB7XG41NTk4Olx0XHRcdFx0XHRcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWxlbikpXG41NTk5Olx0XHRcdFx0XHRcdFx0YnJlYWs7XG41NjAwOlx0XG41NjAxOlx0XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjU2MDI6XHRcdFx0XHRcdH1cbjU2MDM6XHRcdFx0XHR9XG41NjA0Olx0XHRcdFx0aWR4JiM0MzsmIzQzOztcbjU2MDU6XHRcdFx0fVxuNTYwNjpcdFx0fVxuNTYwNzpcdFx0ZXJyID0gc2tiLVx1MDAzZWxlbjtcbjU2MDg6XHRvdXRfZXJyOlxuNTYwOTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzAwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTY0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQnJpZGdlIFZMQU4gSW5mbyBPdmVyZmxvdyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3RhcnRzIHdpdGggbm90aWNpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGJyaWRnZSBWTEFOIGZpbHRlcmluZyBhbmQgbmV0bGluayBtZXNzYWdlIHNpemVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgdGhlIGBydG5sX2JyaWRnZV9ub3RpZnlgIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCB3aXRoaW4gYHJ0bmxfYnJpZGdlX3NldGxpbmtgIHRvIGhhbmRsZSBicmlkZ2UgY2hhbmdlcywgYW5kIGBydG5sX2JyaWRnZV9nZXRsaW5rYCBtaWdodCBiZSBzdXNjZXB0aWJsZSB0byBhbiBvdmVyZmxvdy4gSWYgYSBicmlkZ2UgcG9ydCBoYXMgYW4gZXh0cmVtZWx5IGxhcmdlIG51bWJlciBvZiBWTEFOcyAoc2F5LCA0MDk0KSwgYW5kIGlmIHdlJiMzOTtyZSBkdW1waW5nIHRoZSBicmlkZ2UgbGluayBpbmZvcm1hdGlvbiB3aXRoIFZMQU4gZmlsdGVyaW5nIGVuYWJsZWQsIHRoZSBkYXRhIHBhY2tlZCBpbnRvIHRoZSBgSUZMQV9BRl9TUEVDYCBhdHRyaWJ1dGUgY291bGQgZXhjZWVkIHRoZSA2NEtCIGxpbWl0IChgVTE2X01BWGApLiBJIG9ic2VydmVkIHRoYXQgdGhlIGBhZi0mZ3Q7bmxhX2xlbmAgZmllbGQsIHdoaWNoIHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uLCB3YXMgdXNpbmcgYSAxNi1iaXQgZmllbGQgYW5kIHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93LiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgJmd0OyBVMTZfTUFYKWAsIHRyaWdnZXJpbmcgYW4gYC1FMkJJR2AgZXJyb3IgYW5kIHNldHRpbmcgYGV4dGFja2Agd2hlbiB0aGUgcGFja2V0IHNpemUgbGltaXRzLgoKVGhpcyBpcyBhIGdvb2QgcG9pbnQgdG8gc3RhcnQ6IEkgdGhpbmsgdGhhdCBtZWFucyB0aGUgY29kZSYjMzk7cyBub3cgaGFuZGxpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIFZMQU4gZHVtcGluZyBwcm9jZXNzLiBHb29kIGNhdGNoLgoKSSBzZWUgdGhhdCBgcnRubF9icmlkZ2Vfbm90aWZ5YCBjYWxscyBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fYnJpZGdlX2dldGxpbmtgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSWYgdGhhdCByZXR1cm5zIGFuIGVycm9yLCB0aGUgZnVuY3Rpb24gaGFuZGxlcyBpdC4gVGhpcyBpbmRpY2F0ZXMgYSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aCwgY3J1Y2lhbCBmb3IgZnV6emluZyEKClRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzdGFydCB0byB0aGluayB0aGF0IG1heWJlIGBuZG9fYnJpZGdlX2dldGxpbmtgIGlzIGNhbGxlZCBmcm9tIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBzbyBpdHMgcmV0dXJuIGNvZGUgbWF0dGVycy4gVGhpcyBpcyBhbGwgY29ubmVjdGVkIHRvIG5ldGxpbmsgbWVzc2FnaW5nIHdoaWNoIGlzIGEgZ3JlYXQgdGFyZ2V0LgoKSSYjMzk7dmUgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgaXMgaW5kZWVkIHdvcnRoIGZ1enppbmcuIEkgY29uZmlybWVkIHRoYXQgY29kZSBtb2RpZmljYXRpb25zIGFyZSBwcmVzZW50IGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIGJyaWRnZSBzdWJzeXN0ZW0gKGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AsIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIGFzc29jaWF0ZWQgaGVhZGVyIGZpbGVzKSBpbmNsdWRpbmcgdGhlIGNyaXRpY2FsIGFkZGl0aW9uIG9mIHRoZSBkZWZlbnNpdmUgY2hlY2sgYW5kIGVycm9yIGhhbmRsaW5nIChyZXR1cm5pbmcgLUUyQklHIGFuZCBjYW5jZWxpbmcgdGhlIE5MIG1lc3NhZ2UpIHZpYSBgZXh0YWNrYC4gVGhpcyBhbGwgaGFzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gSW1wb3J0YW50bHksIEkgY2FuIGFjY2VzcyB0aGlzIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBzdGFuZGFyZCBuZXRsaW5rIHNvY2tldHMsIHNvIEkgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVSB3aXRob3V0IG5lZWRpbmcgc3BlY2lhbCBoYXJkd2FyZS4KClRvIGRldGVybWluZSAqd2hpY2gqIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZywgSSBuZWVkIGEgbGlzdCBvZiB0aGUgKmtleSogZW50cnkgcG9pbnRzIGFuZCBtb2RpZmllZCBsb2dpYy4gSSBmb2N1c2VkIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCwgYW5kIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGBicl9maWxsX2lmaW5mb2AsIGBicl9nZXRsaW5rYCwgYGJyX2luZm9fbm90aWZ5YCwgYGJyX2lmaW5mb19ub3RpZnlgLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGBydG5sX2JyaWRnZV9kZWxsaW5rYCwgYW5kIGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AgYXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkLiBJIGNvbnNpZGVyZWQgaWYgc3RhdGljIGZ1bmN0aW9ucyBhcmUgT0suIFllcyEgU3RhdGljIGZ1bmN0aW9ucywgYXMgbG9uZyBhcyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgYXJlIGdvb2QuCgpDcnVjaWFsbHksIHRob3NlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdWJpcXVpdG91cyAmIzM0O2hvdCBwYXRocyYjMzQ7LCB3aGljaCB3b3VsZCBiZSB1c2VsZXNzLCBzbyBJIGtub3cgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZSEgVGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eSBtYWtlcyB0aGVtIHZlcnkgc3BlY2lmaWMgdG8gdGhlc2UgYnJpZGdlIFZMQU4gb3BlcmF0aW9ucywgcGVyZmVjdC4KCkZpbmFsbHksIEkgbmVlZCB0byBrbm93IHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgdGhlIGNvZGUgYW5kIG1ha2UgaXQgcmVhY2hhYmxlLiBgQ09ORklHX0JSSURHRWAgaXMgYSBtdXN0LCBhbmQgSSBzaG91bGQgYWxzbyBjaGVjayBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX25ldGxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGU9OD1icmlkZ2UteVx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXG5uZXQvYnJpZGdlL01ha2VmaWxlLTktXHRcdFx0YnJfaW9jdGwubyBicl9zdHAubyBicl9zdHBfYnBkdS5vIFxcXG5uZXQvYnJpZGdlL01ha2VmaWxlOjEwOlx0XHRcdGJyX3N0cF9pZi5vIGJyX3N0cF90aW1lci5vIGJyX25ldGxpbmsubyBcXFxubmV0L2JyaWRnZS9NYWtlZmlsZToxMTpcdFx0XHRicl9uZXRsaW5rX3R1bm5lbC5vIGJyX2FycF9uZF9wcm94eS5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTEyLVxuLS1cbm5ldC9icmlkZ2UvYnIuYz00MjU9c3RhdGljIGludCBfX2luaXQgYnJfaW5pdCh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvYnIuYy00NjAtXG5uZXQvYnJpZGdlL2JyLmM6NDYxOlx0ZXJyID0gYnJfbmV0bGlua19pbml0KCk7XG5uZXQvYnJpZGdlL2JyLmMtNDYyLVx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyLmM9NDkyPXN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZClcbi0tXG5uZXQvYnJpZGdlL2JyLmMtNDk0LVx0c3RwX3Byb3RvX3VucmVnaXN0ZXIoXHUwMDI2YnJfc3RwX3Byb3RvKTtcbm5ldC9icmlkZ2UvYnIuYzo0OTU6XHRicl9uZXRsaW5rX2ZpbmkoKTtcbm5ldC9icmlkZ2UvYnIuYy00OTYtXHR1bnJlZ2lzdGVyX3N3aXRjaGRldl9ibG9ja2luZ19ub3RpZmllcihcdTAwMjZicl9zd2l0Y2hkZXZfYmxvY2tpbmdfbm90aWZpZXIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE5NTY9c3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xOTc3LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTk3ODppbnQgX19pbml0IGJyX25ldGxpbmtfaW5pdCh2b2lkKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk3OS17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMjAwMy1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjIwMDQ6dm9pZCBicl9uZXRsaW5rX2Zpbmkodm9pZClcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTIwMDUte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxNjM9c3RhdGljIGlubGluZSBpbnQgYnJfY2ZtX3BlZXJfbWVwX2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTMyICpjb3VudClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTY5LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3MDovKiBicl9uZXRsaW5rLmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxNzEtZXh0ZXJuIHN0cnVjdCBydG5sX2xpbmtfb3BzIGJyX2xpbmtfb3BzO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3MjppbnQgYnJfbmV0bGlua19pbml0KHZvaWQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3Mzp2b2lkIGJyX25ldGxpbmtfZmluaSh2b2lkKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxNzQtdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD0xMj1zdHJ1Y3QgdnR1bm5lbF9pbmZvIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtMTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6MTg6LyogYnJfbmV0bGlua190dW5uZWwuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTE5LWludCBicl9wYXJzZV92bGFuX3R1bm5lbF9pbmZvKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJyaWRnaW5nLCBzcGVjaWZpY2FsbHkgdGhlIFZMQU4gZmlsdGVyaW5nIGFzcGVjdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIHRvIGZpbmQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYnJpZGdlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGUgcHJlc2VuY2UgYW5kIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCAtIGEgYmFzaWMgY2hlY2sgdG8gZW5zdXJlIGJyaWRnaW5nIGl0c2VsZiBpcyBlbmFibGVkLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBzY2FuIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIGxvb2tpbmcgZm9yIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZyB3aXRoaW4gdGhlIGJyaWRnZSBjb250ZXh0LiBUaGlzIGFwcHJvYWNoIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29udHJvbGxlZCBhdCBjb21waWxlLXRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBCUklER0VcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IExMQ1xuICAgOTpcdFx0c2VsZWN0IFNUUFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFuXG4gIDEyOlx0XHQgIEV0aGVybmV0IGJyaWRnZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGlmZmVyZW50IEV0aGVybmV0IHNlZ21lbnRzIGl0XG4gIDEzOlx0XHQgIGlzIGNvbm5lY3RlZCB0byB3aWxsIGFwcGVhciBhcyBvbmUgRXRoZXJuZXQgdG8gdGhlIHBhcnRpY2lwYW50cy5cbiAgMTQ6XHRcdCAgU2V2ZXJhbCBzdWNoIGJyaWRnZXMgY2FuIHdvcmsgdG9nZXRoZXIgdG8gY3JlYXRlIGV2ZW4gbGFyZ2VyXG4gIDE1Olx0XHQgIG5ldHdvcmtzIG9mIEV0aGVybmV0cyB1c2luZyB0aGUgSUVFRSA4MDIuMSBzcGFubmluZyB0cmVlIGFsZ29yaXRobS5cbiAgMTY6XHRcdCAgQXMgdGhpcyBpcyBhIHN0YW5kYXJkLCBMaW51eCBicmlkZ2VzIHdpbGwgY29vcGVyYXRlIHByb3Blcmx5IHdpdGhcbiAgMTc6XHRcdCAgb3RoZXIgdGhpcmQgcGFydHkgYnJpZGdlIHByb2R1Y3RzLlxuICAxODpcdFxuICAxOTpcdFx0ICBJbiBvcmRlciB0byB1c2UgdGhlIEV0aGVybmV0IGJyaWRnZSwgeW91JiMzOTtsbCBuZWVkIHRoZSBicmlkZ2VcbiAgMjA6XHRcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcdTAwM2VcbiAgMjE6XHRcdCAgZm9yIGxvY2F0aW9uLiBQbGVhc2UgcmVhZCB0aGUgQnJpZGdlIG1pbmktSE9XVE8gZm9yIG1vcmVcbiAgMjI6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHlvdSBlbmFibGUgaXB0YWJsZXMgc3VwcG9ydCBhbG9uZyB3aXRoIHRoZSBicmlkZ2Ugc3VwcG9ydCB0aGVuIHlvdVxuICAyNTpcdFx0ICB0dXJuIHlvdXIgYnJpZGdlIGludG8gYSBicmlkZ2luZyBJUCBmaXJld2FsbC5cbiAgMjY6XHRcdCAgaXB0YWJsZXMgd2lsbCB0aGVuIHNlZSB0aGUgSVAgcGFja2V0cyBiZWluZyBicmlkZ2VkLCBzbyB5b3UgbmVlZCB0b1xuICAyNzpcdFx0ICB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB1cCB5b3VyIGZpcmV3YWxsIHJ1bGVzLlxuICAyODpcdFx0ICBFbmFibGluZyBhcnB0YWJsZXMgc3VwcG9ydCB3aGVuIGJyaWRnaW5nIHdpbGwgbGV0IGFycHRhYmxlcyBzZWVcbiAgMjk6XHRcdCAgYnJpZGdlZCBBUlAgdHJhZmZpYyBpbiB0aGUgYXJwdGFibGVzIEZPUldBUkQgY2hhaW4uXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGJyaWRnZS5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbiAgMzc6XHRcdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDM5Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA0MzpcdFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxuICA0NDpcdFx0ICBlYWNoIHBvcnQuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDUzOlx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgNTQ6XHRcdGRlZmF1bHQgblxuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA1NzpcdFx0ICByZWNlaXZlIGFuZCBmb3J3YXJkIHRyYWZmaWMgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFja2V0XG4gIDU4Olx0XHQgIGFueSBWTEFOIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIGJyaWRnZSBwb3J0IG9yIGJyaWRnZSBkZXZpY2UuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA2MTpcdFxuICA2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA2MzpcdFxuICA2NDpcdGNvbmZpZyBCUklER0VfTVJQXG4gIDY1Olx0XHRib29sIFwmIzM0O01SUCBwcm90b2NvbFwmIzM0O1xuICA2NjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNjc6XHRcdGRlZmF1bHQgblxuICA2ODpcdFx0aGVscFxuICA2OTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXG4gIDcwOlx0XHQgIHByb3RvY29sIHRvIGRldGVjdCBsb29wc1xuICA3MTpcdFxuICA3MjpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNzM6XHRcbiAgNzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgQlJJREdFX0NGTVxuICA3NzpcdFx0Ym9vbCBcJiMzNDtDRk0gcHJvdG9jb2xcJiMzNDtcbiAgNzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDc5Olx0XHRoZWxwXG4gIDgwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBDRk1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBWTEFOIEZpbHRlcmluZyBpbiBCcmlkZ2UgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIFZMQU4gcG9wdWxhdGlvbiBsb2dpYyBpbiBgYnJfZmlsbF9pZmluZm9gIGlzIGNvbnRpbmdlbnQgb24gdGhpcyBjb25maWcgb3B0aW9uLiBJdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBkZXBlbmRlbmN5LCBidXQgYXNzdW1wdGlvbnMgYXJlIHRoZSBiYW5lIG9mIG15IGV4aXN0ZW5jZS4KClRoZSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJyX2ZpbGxfaWZpbmZvYCBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSB0aG9zZSBWTEFOIGZpZWxkcyBhcmUgcG9wdWxhdGVkLiBUaGVuLCBJIGNhbiBjb3JyZWxhdGUgdGhhdCBzZWN0aW9uIHdpdGggYSBjb25kaXRpb25hbCBjaGVjayBvbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgKG9yIGEgc2ltaWxhciBtYWNybykuIFRoYXQgd2lsbCB0ZWxsIG1lIGRlZmluaXRpdmVseSB3aGV0aGVyIGl0JiMzOTtzIG9wdGlvbmFsIG9yIG1hbmRhdG9yeSB0byBoYXZlIHRoaXMgZW5hYmxlZC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCBhbmQgd2hhdCB0aGUgY29uc2VxdWVuY2VzIGFyZSBpZiB0aGF0IGZlYXR1cmUgaXMgZGlzYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgYnJpZGdlIGhhbmRsZXMgdGhlc2Ugc2l0dWF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRFWFRfRklMVEVSX0JSVkxBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MjM9c3RhdGljIGludCBfX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0zMC1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjMxOlx0aWYgKCEoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0zMi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NzU9c3RhdGljIGludCBicl9nZXRfbnVtX3ZsYW5faW5mb3Moc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODItXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo4MzpcdGlmIChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTilcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTg0LVx0XHRyZXR1cm4gUkVBRF9PTkNFKHZnLVx1MDAzZW51bV92bGFucyk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MDktXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1MTA6XHRpZiAoZmlsdGVyX21hc2sgXHUwMDI2IChSVEVYVF9GSUxURVJfQlJWTEFOIHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjUxMTpcdFx0XHQgICBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgfFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTEyLVx0XHRcdCAgIFJURVhUX0ZJTFRFUl9NUlAgfFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyMS1cdC8qIENoZWNrIGlmICB0aGUgVklEIGluZm9ybWF0aW9uIGlzIHJlcXVlc3RlZCAqL1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTIyOlx0aWYgKChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTikgfHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjUyMzpcdCAgICAoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkpIHtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyNC1cdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTM3LVx0XHR9XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1Mzg6XHRcdGlmIChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTM5LVx0XHRcdGVyciA9IGJyX2ZpbGxfaWZ2bGFuaW5mb19jb21wcmVzc2VkKHNrYiwgdmcpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTY3OD12b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjgwLXtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjY4MTpcdHUzMiBmaWx0ZXIgPSBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQ7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02ODItXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9Njg5PWludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjk0LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6Njk1Olx0aWYgKCFwb3J0IFx1MDAyNlx1MDAyNiAhKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjY5NjpcdCAgICAhKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjk3LVx0ICAgICEoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9NUlApIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk5NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGJyX2ZpbGxfaWZ2bGFuaW5mb2AgYW5kIFZMQU4gSW5mb3JtYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgYnJfZmlsbF9pZnZsYW5pbmZvYCBmdW5jdGlvbiB3b3JrcyBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBgdmdgIHZhcmlhYmxlIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiBpdC4gVGhpcyBzdWdnZXN0cyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBWTEFOIGluZm9ybWF0aW9uIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBzZWdtZW50YXRpb24gYW5kIHRyYWZmaWMgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBvcHVsYXRlcyBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBWTEFOIGNvbmZpZ3VyYXRpb24gYW5kIG1hcHBpbmcuIEkgc3VzcGVjdCBgdmdgIGlzIGVpdGhlciBhIHBvaW50ZXIgdG8gb3IgYSBzdHJ1Y3R1cmUgaG9sZGluZyBWTEFOIGdyb3VwLXJlbGF0ZWQgZGF0YS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhbmQgZm9jdXMgb24gbGluZXMgNTIwIHRocm91Z2ggNTUwLiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEJ5IGV4YW1pbmluZyB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZSwgSSBhbnRpY2lwYXRlIHRoYXQgSSYjMzk7bGwgZmluZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gVkxBTiBjb25maWd1cmF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGl0c2VsZiwgd2hpY2ggd2lsbCBob3BlZnVsbHkgb2ZmZXIgc29tZSBhbnN3ZXJzLiBJJiMzOTttIGhvcGluZyB0aGlzIHNlY3Rpb24gaGFuZGxlcyB0aGUgbmV0bGluayBpbnRlcmFjdGlvbnMgaW4gdGhlIFZMQU4gY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XG4gNTIxOlx0XHQvKiBDaGVjayBpZiAgdGhlIFZJRCBpbmZvcm1hdGlvbiBpcyByZXF1ZXN0ZWQgKi9cbiA1MjI6XHRcdGlmICgoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU4pIHx8XG4gNTIzOlx0XHQgICAgKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpKSB7XG4gNTI0Olx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuIDUyNTpcdFx0XHRpbnQgZXJyO1xuIDUyNjpcdFxuIDUyNzpcdFx0XHQvKiBSQ1UgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFZMQU4gbG9ja2luZyBydWxlcyAocmN1IHx8IHJ0bmwpICovXG4gNTI4Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA1Mjk6XHRcdFx0aWYgKHBvcnQpXG4gNTMwOlx0XHRcdFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocG9ydCk7XG4gNTMxOlx0XHRcdGVsc2VcbiA1MzI6XHRcdFx0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiA1MzM6XHRcbiA1MzQ6XHRcdFx0aWYgKCF2ZyB8fCAhUkVBRF9PTkNFKHZnLVx1MDAzZW51bV92bGFucykpIHtcbiA1MzU6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1MzY6XHRcdFx0XHRnb3RvIGRvbmU7XG4gNTM3Olx0XHRcdH1cbiA1Mzg6XHRcdFx0aWYgKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpXG4gNTM5Olx0XHRcdFx0ZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvX2NvbXByZXNzZWQoc2tiLCB2Zyk7XG4gNTQwOlx0XHRcdGVsc2VcbiA1NDE6XHRcdFx0XHRlcnIgPSBicl9maWxsX2lmdmxhbmluZm8oc2tiLCB2Zyk7XG4gNTQyOlx0XG4gNTQzOlx0XHRcdGlmIChwb3J0IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChCUl9WTEFOX1RVTk5FTF9CSVQsIFx1MDAyNnBvcnQtXHUwMDNlZmxhZ3MpKVxuIDU0NDpcdFx0XHRcdGVyciA9IGJyX2ZpbGxfdmxhbl90dW5uZWxfaW5mbyhza2IsIHZnKTtcbiA1NDU6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNTQ2Olx0XHRcdGlmIChlcnIpXG4gNTQ3Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNTQ4Olx0XHR9XG4gNTQ5Olx0XG4gNTUwOlx0XHRpZiAoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9NUlApIHtcbiA1NTE6XHRcdFx0aW50IGVycjtcbiA1NTI6XHRcbiA1NTM6XHRcdFx0aWYgKCFicl9tcnBfZW5hYmxlZChicikgfHwgcG9ydClcbiA1NTQ6XHRcdFx0XHRnb3RvIGRvbmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBWTEFOIEdyb3VwIFJDVSBGdW5jdGlvbnMgd2l0aCBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcgRGlzYWJsZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgbmJwX3ZsYW5fZ3JvdXBfcmN1YCBhbmQgYGJyX3ZsYW5fZ3JvdXBfcmN1YCB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBvZmYuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Q/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLCBidXQgYSBxdWljayBncmVwIGlzIHByb2JhYmx5IHRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgYmlyZCYjMzk7cyBleWUgdmlldyBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV2ZW4gKmNhbGxlZCogd2hlbiB0aGUgZmlsdGVyaW5nIGlzIGRpc2FibGVkLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIGBuYnBfdmxhbl9ncm91cF9yY3VgLiBUaW1lIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgJiMzNDtubyBmaWx0ZXJpbmcmIzM0OyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJwX3ZsYW5fZ3JvdXBfcmN1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTQzPXN0YXRpYyB2b2lkIGJyX2FycF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTY4LVx0aWYgKHApXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjY5Olx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNzAtXHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0yNTQ9c3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0zNjEtXHRpZiAocClcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MzYyOlx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMzYzLVx0ZWxzZVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NTEyPWJvb2wgYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTE3LVx0aWYgKHZpZCBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoQlJfTkVJR0hfVkxBTl9TVVBQUkVTU19CSVQsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpKSB7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjUxODpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTUxOS1cdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTUzMD1ib29sIGJyX2lzX25laWdoX2ZvcndhcmRfZ3JhdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiB2aWQpXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MzItXHRpZiAodmlkIFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChCUl9ORUlHSF9WTEFOX1NVUFBSRVNTX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpIHtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NTMzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTM0LVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTIxPXN0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjUtXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoyNjpcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjctXHRyZXR1cm4gKHRlc3RfYml0KEJSX0hBSVJQSU5fTU9ERV9CSVQsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpIHx8IHNrYi1cdTAwM2VkZXYgIT0gcC1cdTAwM2VkZXYpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04NS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjg2Olx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UodG8pO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODctXHRza2IgPSBicl9oYW5kbGVfdmxhbih0by1cdTAwM2ViciwgdG8sIHZnLCBza2IpO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz03Nj1pbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTA5LVx0cG1jdHggPSBcdTAwMjZwLVx1MDAzZW11bHRpY2FzdF9jdHg7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTEwOlx0aWYgKCFicl9hbGxvd2VkX2luZ3Jlc3MocC1cdTAwM2ViciwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApLCBza2IsIFx1MDAyNnZpZCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMTEtXHRcdFx0XHRcdTAwMjZzdGF0ZSwgXHUwMDI2dmxhbikpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTM0Nz1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzAtXHRpZiAodGVzdF9iaXQoQlJfVkxBTl9UVU5ORUxfQklULCBcdTAwMjZwLVx1MDAzZWZsYWdzKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNzE6XHRcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzItXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz05NT1pbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0xMTAtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvYnJpZGdlL2JyX21zdC5jOjExMTpcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl9tc3QuYy0xMTItXHRpZiAoIXZnKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEwPWJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyOC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjI5Olx0dmxhbiA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cF9yY3UocGctXHUwMDNla2V5LnBvcnQpLCBwZy1cdTAwM2VrZXkuYWRkci52aWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzAtXHRpZiAodmxhbiBcdTAwMjZcdTAwMjYgIWJyX211bHRpY2FzdF9wb3J0X2N0eF92bGFuX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjQwPWJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjQ5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyNTA6XHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwb3J0KSwgdmlkKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjUxLVx0aWYgKHZsYW4pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjMzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjI0MC1cdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjQxOlx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwb3J0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjI0Mi1cdFx0aWYgKCF2Zykge1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3ND1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc3RhcnRfcXVlcmllcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5Ni1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY5NzpcdFx0XHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwb3J0KSxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cdFx0XHRcdFx0ICAgIGJybWN0eC1cdTAwM2V2bGFuLVx1MDAzZXZpZCk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9OTM9c3RhdGljIHNpemVfdCBicl9nZXRfbGlua19hZl9zaXplX2ZpbHRlcmVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTA3LVx0XHRpZiAocClcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEwODpcdFx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEwOS1cdH0gZWxzZSBpZiAobmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MjktXHRcdGlmIChwb3J0KVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTMwOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHBvcnQpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTMxLVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY1OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXBfcmN1KFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NjQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXBfcmN1KFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTY2Ni1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTgzOC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cF9yY3UoXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODQwLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nz1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy02OTYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo2OTc6XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTY5OC1cdGlmICghdmcgfHwgIVJFQURfT05DRSh2Zy1cdTAwM2VudW1fdmxhbnMpKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE0MzU9aW50IGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqcF9wdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0NDEtXHRpZiAocClcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE0NDI6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ0My1cdGVsc2UgaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSlcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNDgwPWludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0ODktXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNDkwOlx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UoZHN0KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0OTEtXHR2ID0gYnJfdmxhbl9maW5kKHZnLCBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNTM2PWludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1NDQtXHRpZiAocClcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE1NDU6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTU0Ni1cdGVsc2UgaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSlcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xOTk1PXN0YXRpYyBpbnQgYnJfdmxhbl9kdW1wX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMjYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMDI3Olx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMjgtXHRcdGJyID0gcC1cdTAwM2VicjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgQnJpZGdlIGFuZCBWTEFOIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX0JSSURHRWAgYW5kIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gTm93LCB0aGUgcmVsYXRpb25zaGlwIGhlcmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC4gTWFrZXMgc2Vuc2UsIGFzIFZMQU4gZmlsdGVyaW5nIGlzIGFuIGV4dGVuc2lvbiBvZiBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LiBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAgYW5kIGNoZWNrIGxpbmUgMTgzMyBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBnZXQgdGhlIHJlYWwgY29udGV4dCBvbiB0aGlzICNpZmRlZiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdFx0cmV0dXJuIE5VTEw7XG4xODMxOlx0fVxuMTgzMjpcdFxuMTgzMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXG4xODM0Olx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcbjE4MzU6XHR7XG4xODM2Olx0XHRyZXR1cm4gTlVMTDtcbjE4Mzc6XHR9XG4xODM4Olx0XG4xODM5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cF9yY3UoXG4xODQwOlx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4xODQxOlx0e1xuMTg0MjpcdFx0cmV0dXJuIE5VTEw7XG4xODQzOlx0fVxuMTg0NDpcdFxuMTg0NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl92bGFuX2dldF9zdGF0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuMTg0NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHMpXG4xODQ3Olx0e1xuMTg0ODpcdH1cbjE4NDk6XHRcbjE4NTA6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9wb3J0X2V2ZW50KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4xODUxOlx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50KVxuMTg1MjpcdHtcbjE4NTM6XHR9XG4xODU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjcwCgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDEwMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcqKgoKT2theSwgc28gaGVyZSYjMzk7cyBteSB0aGlua2luZy4gV2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZW5hYmxlZCwgYW5kIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTnMgb24gYnJpZGdlIHBvcnRzLCB0aGUgYFJUTV9HRVRMSU5LYCByZXF1ZXN0IHdpdGggYFJURVhUX0ZJTFRFUl9CUlZMQU5gIHRyaWdnZXJzIGBicl9maWxsX2lmdmxhbmluZm9gIHdoaWNoIHBvcHVsYXRlcyBgSUZMQV9BRl9TUEVDYC4gSWYgYSBwb3J0IGhhcyBhIGJvYXRsb2FkIG9mIFZMQU5zLCB0aGUgYGFmYCBhdHRyaWJ1dGUgc2l6ZSBjb3VsZCBibG93IHBhc3QgNjRLQiwgZXhjZWVkaW5nIGBVMTZfTUFYYC4gVGhpcyBpcyB3aGVyZSB0aGUgbmV3IGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgY29tZXMgaW50byBwbGF5LiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUgbWFpbiBgQ09ORklHX0JSSURHRWAgZnVuY3Rpb25hbGl0eSBhbmQgYWxzbyBgQ09ORklHX1ZMQU5fODAyMVFgLgoKTGV0IG1lIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgY29uZmlncyBhcmUgaW4gcGxheTogYEJSSURHRWAsIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYFZMQU5fODAyMVFgIOKAkyBzdGFuZGFyZCBzdHVmZi4gYE5FVGAgaXMgc3RhbmRhcmQgdG9vLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIG91ciBmb2N1cyBzeW1ib2xzLiBXZSBuZWVkIHRvIGJlIHplcm9lZCBpbiBvbjoKKiAgIGBicl9nZXRsaW5rYDogSW1wbGVtZW50YXRpb24gZm9yIGJyaWRnZSBkZXZpY2VzLgoqICAgYGJyX2ZpbGxfaWZpbmZvYDogdGhlIGZ1bmN0aW9uIHdpdGggdGhlIG5ldyBvdmVyZmxvdyBjaGVjay4KKiAgIGBydG5sX2JyaWRnZV9nZXRsaW5rYDogcnRuZXRsaW5rIGhhbmRsZXIuCiogICBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgOiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKiAgIGBydG5sX2JyaWRnZV9ub3RpZnlgOiB1cGRhdGVkIGhlbHBlciBmb3IgZXh0YWNrLgoqICAgYHJ0bmxfYnJpZGdlX3NldGxpbmtgOiBjYWxsZXIgb2YgYHJ0bmxfYnJpZGdlX25vdGlmeWAuCiogICBgcnRubF9icmlkZ2VfZGVsbGlua2A6IGNhbGxlciBvZiBgcnRubF9icmlkZ2Vfbm90aWZ5YC4KCkFyZSB0aG9zZSBnb29kPyBMZXQmIzM5O3MgY29uZmlybSB0aGV5JiMzOTtyZSBpbiB0aGUgcmlnaHQgcGxhY2VzOiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBZZXMhCgpBbmQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgYnJfZmlsbF9pZmluZm9gIGlubGluZWQ/IE5vLCBpdCYjMzk7cyBub3QuIEl0JiMzOTtzIHN0YXRpYywgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBhbmQgaXQmIzM5O3Mgc3Vic3RhbnRpYWwgaW4gc2l6ZS4gYGJyX2dldGxpbmtgIGlzIG5vbi1zdGF0aWMuIGBydG5sX2JyaWRnZV9nZXRsaW5rYCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC4gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgYWxzbyBpbiBgcnRuZXRsaW5rLmNgLiBgcnRubF9icmlkZ2Vfbm90aWZ5YCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC4KCk9rYXksIHRpbWUgdG8gcmV2aWV3IHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgLgoKV2UgbmVlZDoKKiAgIGBXb3J0aEZ1enppbmdgOiBib29sZWFuICh0cnVlKS4KKiAgIGBSZWFzb25pbmdgOiBhIGNvbmNpc2UgZXhwbGFuYXRpb24uCiogICBgRm9jdXNTeW1ib2xzYDogYW4gYXJyYXkgb2Ygc3RyaW5nIHN5bWJvbHMuCiogICBgRW5hYmxlQ29uZmlnc2A6IGFuIGFycmF5IG9mIHN0cmluZyBjb25maWdzIChubyBgQ09ORklHX2AgcHJlZml4KS4KCkxldCBtZSBkb3VibGUtY2hlY2s6CgoxLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoZSBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBzaXplIGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgdG8gcHJldmVudCBpbnRlZ2VyIHRydW5jYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYElGTEFfQUZfU1BFQ2AsIHdoaWNoIG1lYW5zIGl0IGNhbiByZXR1cm4gLUUyQklHIGFuZCBzZXQgYW4gZXh0ZW5kZWQgQUNLIG1lc3NhZ2UuIEl0IGFsc28gcHVzaGVzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgLCBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoKWAsIGFuZCB0aGUgYHJ0bmxfYnJpZGdlXypgIGNhbGxlcnMgaW4gYHJ0bmV0bGluay5jYC4gVGhpcyBpcyBhbGwgY29yZSwgYW5kIGVhc2lseSB0cmlnZ2VyZWQgdGhyb3VnaCBOZXRsaW5rL2JyaWRnZSBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIHN5emthbGxlciBjYW4gY3JlYXRlIGJyaWRnZXMsIGFzc2lnbiBWTEFOcywgYW5kIHF1ZXJ5IGdldGxpbmsuCgoyLiAgYEVuYWJsZUNvbmZpZ3NgOiBXZSYjMzk7cmUgZW5hYmxpbmcgYEJSSURHRWAsIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYFZMQU5fODAyMVFgLgoKMy4gIGBGb2N1c1N5bWJvbHNgOiBXZSYjMzk7cmUgZm9jdXNpbmcgb24gYGJyX2ZpbGxfaWZpbmZvYCwgYGJyX2dldGxpbmtgLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AsIGFuZCBgcnRubF9icmlkZ2Vfbm90aWZ5YC4KCkFscmlnaHQsIGl0JiMzOTtzIGFsbCByb2NrLXNvbGlkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmlsbF9pZmluZm8mIzM0OywKICAgICYjMzQ7YnJfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O25kb19kZmx0X2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O3J0bmxfYnJpZGdlX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmlsbF9pZmluZm8mIzM0OywKICAgICYjMzQ7YnJfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O25kb19kZmx0X2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O3J0bmxfYnJpZGdlX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IGEgMTYtYml0IGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIG5lc3RlZCBhdHRyaWJ1dGUgbGVuZ3RoIChJRkxBX0FGX1NQRUMpIHdoZW4gZHVtcGluZyBicmlkZ2UgcG9ydCBWTEFOIGluZm9ybWF0aW9uLCBjYW5jZWxpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIC1FMkJJRyBpZiB0aGUgbmVzdGVkIGRhdGEgZXhjZWVkcyBVMTZfTUFYLiBUbyBzdXBwb3J0IHNldHRpbmcgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgKE5MX1NFVF9FUlJfTVNHX01PRCksIGl0IHRocmVhZHMgdGhlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlciB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgIGFjcm9zcyBuZXQgY29yZSBhbmQgdmFyaW91cyBldGhlcm5ldCBkcml2ZXJzLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWEwMjgwNzU1ZmVlMWY5OTgzZTc5Y2FjODg2N2Y0NThlNWNmM2U0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwppbmRleCBjYTk5ZjRiMWE2M2MzLi5hNzUyZTY2YmY2MzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwpAQCAtMTYxNTQsMTIgJiM0MzsxNjE1NCwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHVkcF90dW5uZWxfbmljX2luZm8gYm54dF91ZHBfdHVubmVscyA9IHsKIAogc3RhdGljIGludCBibnh0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJICAgICAgIGludCBubGZsYWdzKQomIzQzOwkJCSAgICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBibnh0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBicC0mZ3Q7YnJfbW9kZSwgMCwgMCwKLQkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIHN0YXRpYyBpbnQgYm54dF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGVkMzAyZjVlYzQ3NjguLmNjOWM4NzUzOWE0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwpAQCAtNTAxMSw3ICYjNDM7NTAxMSw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCiBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkJIGludCBubGZsYWdzKQomIzQzOwkJCQkgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1cyA9IDA7CkBAIC01MDM3LDcgJiM0Mzs1MDM3LDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LAogCQkJCSAgICAgICBoc3dfbW9kZSA9PSBQT1JUX0ZXRF9UWVBFX1ZFUEEgPwogCQkJCSAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCLAotCQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9jbWRfd29yayAqYmVfYWxsb2Nfd29yayhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCmluZGV4IGFiYmM3MWU4MTVhZTMuLjUyYzJiMzkzYWFjZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwpAQCAtMTMxNTEsNiAmIzQzOzEzMTUxLDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICogQGRldjogdGhlIG5ldGRldiBiZWluZyBjb25maWd1cmVkCiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZAogICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluCiYjNDM7ICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2sKICAqCiAgKiBSZXR1cm4gdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGhhcmR3YXJlIGJyaWRnZSBpcyBvcGVyYXRpbmcgaW4KICAqIGkuZSBWRUIgb3IgVkVQQS4KQEAgLTEzMTU4LDcgJiM0MzsxMzE1OSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHUzMiBfX2Fsd2F5c191bnVzZWQgZmlsdGVyX21hc2ssCi0JCQkJICAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgIGludCBubGZsYWdzLAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGk0MGVfbmV0ZGV2X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaTQwZV92c2kgKnZzaSA9IG5wLSZndDt2c2k7CkBAIC0xMzE3NSw3ICYjNDM7MTMxNzcsNyBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgdmViLSZndDticmlkZ2VfbW9kZSwKLQkJCQkgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBmZTQ3ZWMwYmE4MDk0Li4wMzhjZTFmZTViZmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwpAQCAtODA4NiwxMiAmIzQzOzgwODYsMTQgQEAgaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKQogICogQGRldjogdGhlIG5ldGRldiBiZWluZyBjb25maWd1cmVkCiAgKiBAZmlsdGVyX21hc2s6IGZpbHRlciBtYXNrIHBhc3NlZCBpbgogICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluCiYjNDM7ICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2sKICAqCiAgKiBSZXR1cm4gdGhlIGJyaWRnZSBtb2RlIChWRUIvVkVQQSkKICAqLwogc3RhdGljIGludAogaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCi0JCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpCiYjNDM7CQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLAomIzQzOwkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihkZXYpOwogCXUxNiBibW9kZTsKQEAgLTgwOTksNyAmIzQzOzgxMDEsNyBAQCBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAlibW9kZSA9IHBmLSZndDtmaXJzdF9zdy0mZ3Q7YnJpZGdlX21vZGU7CiAKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncywKLQkJCQkgICAgICAgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGY5MTg1NjQ5OGViMmQuLjc3ZGZkODBhNmUzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTEwNzI2LDcgJiM0MzsxMDcyNiw4IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTsKIApAQCAtMTA3MzUsNyAmIzQzOzEwNzM2LDcgQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIGFkYXB0ZXItJmd0O2JyaWRnZV9tb2RlLCAwLCAwLCBubGZsYWdzLAotCQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKaW5kZXggZmMxMTBhN2QxNmU4ZC4uNTNiZjc5ZGJlMDhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCkBAIC01Mjc3LDcgJiM0Mzs1Mjc3LDcgQEAgc3RhdGljIGludCBtbHg1ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcCkKICNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENICiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJCWludCBubGZsYWdzKQomIzQzOwkJCQlpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtJmd0O21kZXY7CkBAIC01Mjg4LDcgJiM0Mzs1Mjg4LDcgQEAgc3RhdGljIGludCBtbHg1ZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCW1vZGUgPSBzZXR0aW5nID8gQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjsKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LAogCQkJCSAgICAgICBtb2RlLAotCQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYwppbmRleCA3OTI4ZTc2ZGE3MjNlLi5jYjc1MWRkZGI2ODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jCkBAIC0yMjU3LDcgJiM0MzsyMjU3LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKQogCiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywKLQkJCQkgIGludCBubGZsYWdzKQomIzQzOwkJCQkgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG5mcF9uZXQgKm5uID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MTYgbW9kZTsKQEAgLTIyNjksNyAmIzQzOzIyNjksNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjsKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsCi0JCQkJICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAyOTM1YzJlY2MzMTRiLi5mOTYwY2Y1YTk3YTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTkzNSw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIHZvaWQgcWV0aF9sMl9icjJkZXZfcHV0KHZvaWQpCiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJCSAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgcWV0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LSZndDttbF9wcml2OwpAQCAtOTQ5LDcgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IHFldGhfbDJfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LAogCQkJCSAgICAgICBtb2RlLCBwcml2LSZndDticnBvcnRfZmVhdHVyZXMsCiAJCQkJICAgICAgIHByaXYtJmd0O2JycG9ydF9od19mZWF0dXJlcywKLQkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZXRoX2JycG9ydF9wb2xpY3lbSUZMQV9CUlBPUlRfTUFYICYjNDM7IDFdID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNzA3YjJlNTFjMmI5Ny4uMThhMDNmMGY2ZjExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMzYwLDcgJiM0MzsxMzYwLDcgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIgewogICoJCQkgICAgIHUxNiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogICogaW50ICgqbmRvX2JyaWRnZV9nZXRsaW5rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogICoJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywKLSAqCQkJICAgICBpbnQgbmxmbGFncykKJiM0MzsgKgkJCSAgICAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKICAqIGludCAoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAgKgkJCSAgICAgdTE2IGZsYWdzKTsKICAqCkBAIC0xNjU5LDcgJiM0MzsxNjU5LDggQEAgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHsKIAkJCQkJCSAgICAgIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgICAgdTMyIGZpbHRlcl9tYXNrLAotCQkJCQkJICAgICAgaW50IG5sZmxhZ3MpOwomIzQzOwkJCQkJCSAgICAgIGludCBubGZsYWdzLAomIzQzOwkJCQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiAJaW50CQkJKCpuZG9fYnJpZGdlX2RlbGxpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCQkJCSAgICAgIHUxNiBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCA5NTcyOTMzOWU3YTU0Li5hNDA4YzM2YTdiNTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTIyMiw3ICYjNDM7MjIyLDggQEAgZXh0ZXJuIGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgIHUzMiBmaWx0ZXJfbWFzaywKIAkJCQkgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCSAgICB1MzIgZmlsdGVyX21hc2spKTsKJiM0MzsJCQkJCQkgICAgdTMyIGZpbHRlcl9tYXNrKSwKJiM0MzsJCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogZXh0ZXJuIHZvaWQgcnRubF9vZmZsb2FkX3hzdGF0c19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggYWU3NmRmMGRlMDVhMC4uNTM2NzZkZjllNGQxMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTQ1OSw3ICYjNDM7NDU5LDcgQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAogCQkJICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncywKIAkJCSAgdTMyIGZpbHRlcl9tYXNrLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBib29sIGdldGxpbmspCiYjNDM7CQkJICBib29sIGdldGxpbmssIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LSZndDtvcGVyc3RhdGUpIDoKIAkJCQkJICAgIElGX09QRVJfRE9XTjsKQEAgLTYxMyw2ICYjNDM7NjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogZG9uZToKIAlpZiAoYWYpIHsKJiM0MzsJCWlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWCkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O1ZMQU4gaW5mb3JtYXRpb24gZG9lcyBub3QgZml0IGluIG9uZSBtZXNzYWdlLCB1c2UgUlRNX0dFVFZMQU4mIzM0Oyk7CiYjNDM7CQkJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKJiM0MzsJCQlyZXR1cm4gLUUyQklHOwomIzQzOwkJfQogCQlpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiAmZ3Q7IG5sYV9hdHRyX3NpemUoMCkpCiAJCQlubGFfbmVzdF9lbmQoc2tiLCBhZik7CiAJCWVsc2UKQEAgLTY1NCw3ICYjNDM7NjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OwogCi0JZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlKTsKJiM0MzsJZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlLAomIzQzOwkJCSAgICAgTlVMTCk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGJyX25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpAQCAtNjgwLDcgJiM0Mzs2ODcsOCBAQCB2b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOSwogICovCiBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAotCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKQomIzQzOwkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncywKJiM0MzsJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOwogCkBAIC02OTIsNyAmIzQzOzcwMCw3IEBAIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBubGZsYWdzLAotCQkJICAgICAgZmlsdGVyX21hc2ssIGRldiwgdHJ1ZSk7CiYjNDM7CQkJICAgICAgZmlsdGVyX21hc2ssIGRldiwgdHJ1ZSwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGludCBicl92bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCAwOWMzOTdlMzAzMzA3Li5lZGJlN2ExZjU3MzYzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtMjE3OSw3ICYjNDM7MjE3OSw3IEBAIGludCBicl9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncywKIAkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBicl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7CiBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCSAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKTsKJiM0MzsJICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiBpbnQgYnJfcHJvY2Vzc192bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkJIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsCiAJCQkgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnZpbmZvX2N1cnIsCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGJlOWQxNjI1YmFjMzEuLjk2N2I1ODdlZjY2NDggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC01Mzk4LDcgJiM0Mzs1Mzk4LDggQEAgaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkgICAgdTMyIGZpbHRlcl9tYXNrLAogCQkJICAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgIHUzMiBmaWx0ZXJfbWFzaykpCiYjNDM7CQkJCQkgICAgIHUzMiBmaWx0ZXJfbWFzayksCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgaWZpbmZvbXNnICppZm07CkBAIC01NTc0LDcgJiM0Mzs1NTc1LDggQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJCWlmIChpZHggJmd0Oz0gY2ItJmd0O2FyZ3NbMF0pIHsKIAkJCQllcnIgPSBicl9kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19icmlkZ2VfZ2V0bGluaygKIAkJCQkJCXNrYiwgcG9ydGlkLCBzZXEsIGRldiwKLQkJCQkJCWZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7CiYjNDM7CQkJCQkJZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJLAomIzQzOwkJCQkJCWNiLSZndDtleHRhY2spOwogCQkJCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FT1BOT1RTVVBQKSB7CiAJCQkJCWlmIChsaWtlbHkoc2tiLSZndDtsZW4pKQogCQkJCQkJYnJlYWs7CkBAIC01NTkwLDcgJiM0Mzs1NTkyLDggQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJCQllcnIgPSBvcHMtJmd0O25kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCwKIAkJCQkJCQkgICAgICBzZXEsIGRldiwKIAkJCQkJCQkgICAgICBmaWx0ZXJfbWFzaywKLQkJCQkJCQkgICAgICBOTE1fRl9NVUxUSSk7CiYjNDM7CQkJCQkJCSAgICAgIE5MTV9GX01VTFRJLAomIzQzOwkJCQkJCQkgICAgICBjYi0mZ3Q7ZXh0YWNrKTsKIAkJCQlpZiAoZXJyICZsdDsgMCAmYW1wOyZhbXA7IGVyciAhPSAtRU9QTk9UU1VQUCkgewogCQkJCQlpZiAobGlrZWx5KHNrYi0mZ3Q7bGVuKSkKIAkJCQkJCWJyZWFrOwpAQCAtNTYyNCw3ICYjNDM7NTYyNyw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGJyaWRnZV9ubG1zZ19zaXplKHZvaWQpCiAJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTsJLyogSUZMQV9CUklER0VfTU9ERSAqLwogfQogCi1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNTYzOSw3ICYjNDM7NTY0Myw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWdvdG8gZXJyb3V0OwogCX0KIAotCWVyciA9IGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwKTsKJiM0MzsJZXJyID0gZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDAsIDAsIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyb3V0OwogCkBAIC01NzMwLDcgJiM0Mzs1NzM0LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJLyogR2VuZXJhdGUgZXZlbnQgdG8gbm90aWZ5IHVwcGVyIGxheWVyIG9mIGJyaWRnZQogCQkJICogY2hhbmdlCiAJCQkgKi8KLQkJCWVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYpOwomIzQzOwkJCWVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYsIGV4dGFjayk7CiAJCX0KIAl9CiAKQEAgLTU4MDUsNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2RlbGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlCiAJCQkgKiBjaGFuZ2UKIAkJCSAqLwotCQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7CiYjNDM7CQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTsKIAkJfQogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgc3BlY2lmaWNhbGx5IHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGRpZmYgaXMgYWRkaW5nIGEgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgcGFyYW1ldGVyIHRvIHRoZSBgbmRvX2JyaWRnZV9nZXRsaW5rYCBmdW5jdGlvbiBhY3Jvc3MgdGhlIGJvYXJkLiBUaGlzIGluY2x1ZGVzIHVwZGF0ZXMgdG8gYHN0cnVjdCBuZXRfZGV2aWNlX29wc2AsIHRoZSBpbXBsZW1lbnRpbmcgZHJpdmVycyBsaWtlIGBibnh0YCwgYGJlX21haW5gLCBhbmQgc28gb24sIHRoZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBpbiBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGVycyB3aXRoaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB3aGljaCBhcmUgcGFzc2luZyBlaXRoZXIgYGNiLSZndDtleHRhY2tgIG9yIGBleHRhY2tgLgoKVGhlIGNvcmUgYXJlYSBvZiBpbnRlcmVzdCwgaG93ZXZlciwgc2VlbXMgdG8gYmUgd2l0aGluIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicl9maWxsX2lmaW5mb2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCBwcm92aWRlZCwgaXQgbG9va3MgbGlrZSBgYnJfZmlsbF9pZmluZm9gIG5vdyBhbHNvIHRha2VzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIuIEkmIzM5O20gc2VlaW5nIGEgY2hlY2sgdGhhdCYjMzk7cyBuZXc7IGEgY29tcGFyaXNvbiBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IFZMQU4gaW5mb3JtYXRpb24gZml0cyB3aXRoaW4gYSBzaW5nbGUgbWVzc2FnZS4gSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGlzIHNldCB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYCB2aWEgYGV4dGFja2AsIGFuZCB0aGUgbWVzc2FnZSBpcyBjYW5jZWxlZC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyBgZXh0YWNrYCBpcyBpbml0aWFsaXplZCBhbmQgdXNlZC4gSXMgaXQgYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgaW50byB0aGVzZSBmdW5jdGlvbnM/IElmIG5vdCwgd2UgY291bGQgaGF2ZSBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIHdoZXJlIGdhcmJhZ2UgZGF0YSBtaWdodCBiZSB1c2VkIGluIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUuIFRoZSBWTEFOIGNoZWNrIGlzIGludGVyZXN0aW5nLCBidXQgaXQmIzM5O3MgdGhlIGluaXRpYWxpemF0aW9uLCBvciBsYWNrIHRoZXJlb2YsIG9mIGBleHRhY2tgIHRoYXQmIzM5O3MgcmFpc2luZyBteSBmbGFncyBoZXJlLiBUaGUgY29udGV4dCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGxzIHRvIGBicl9maWxsX2lmaW5mb2AgaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHJpc2suIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgY2hhbmdlIHRvIHNlZSBob3cgYW5kIHdoZXJlIGBleHRhY2tgIGlzIGluaXRpYWxpemVkLCBhbmQgaWYgYW55IGNvZGUgcGF0aHMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIHRoZXNlIGltcG9ydGFudCBmdW5jdGlvbnMuIFRoaXMgd2FycmFudHMgZGVlcGVyIGludmVzdGlnYXRpb24gYW5kIHZlcnkgd2VsbCBtaWdodCBuZWVkIGEgS01TQU4gZnV6emluZyBydW4gdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTk1Olx0XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwb3J0KSB7XG4gNTk2Olx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4gNTk3Olx0XHRcdHN0cnVjdCBubGF0dHIgKm1zdF9uZXN0O1xuIDU5ODpcdFx0XHRpbnQgZXJyO1xuIDU5OTpcdFxuIDYwMDpcdFx0XHRpZiAoIXZnIHx8ICF2Zy1cdTAwM2VudW1fdmxhbnMpXG4gNjAxOlx0XHRcdFx0Z290byBkb25lO1xuIDYwMjpcdFxuIDYwMzpcdFx0XHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcbiA2MDQ6XHRcdFx0aWYgKCFtc3RfbmVzdClcbiA2MDU6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MDY6XHRcbiA2MDc6XHRcdFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcbiA2MDg6XHRcdFx0aWYgKGVycilcbiA2MDk6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MTA6XHRcbiA2MTE6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xuIDYxMjpcdFx0fVxuIDYxMzpcdFxuIDYxNDpcdGRvbmU6XG4gNjE1Olx0XHRpZiAoYWYpIHtcbiA2MTY6XHRcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgXHUwMDNlIFUxNl9NQVgpIHtcbiA2MTc6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIDYxODpcdFx0XHRcdFx0XHQgICBcJiMzNDtWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOXCYjMzQ7KTtcbiA2MTk6XHRcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuIDYyMDpcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gNjIxOlx0XHRcdH1cbiA2MjI6XHRcdFx0aWYgKG5sbXNnX2dldF9wb3Moc2tiKSAtICh2b2lkICopYWYgXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXG4gNjIzOlx0XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgYWYpO1xuIDYyNDpcdFx0XHRlbHNlXG4gNjI1Olx0XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYWYpO1xuIDYyNjpcdFx0fVxuIDYyNzpcdFxuIDYyODpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiA2Mjk6XHRcdHJldHVybiAwO1xuIDYzMDpcdFxuIDYzMTpcdG5sYV9wdXRfZmFpbHVyZTpcbiA2MzI6XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4gNjMzOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDYzNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBOZXRsaW5rIEF0dHJpYnV0ZSBPdmVyZmxvdyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGlzIGBhZmAgdmFyaWFibGUgaXMgYSBgc3RydWN0IG5sYXR0ciAqYCwgc3BlY2lmaWNhbGx5IGNyZWF0ZWQgdXNpbmcgYG5sYV9uZXN0X3N0YXJ0X25vZmxhZ2Agd2l0aGluIHRoZSBuZXRsaW5rIGNvbnRleHQuIFJpZ2h0LCBpbiBuZXRsaW5rLCBgbmxhX2xlbmAgaXMgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYF9fdTE2YCksIG1lYW5pbmcgaXQgaGFzIGEgbWF4aW11bSB2YWx1ZSBvZiA2NTUzNS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgYG5sYV9uZXN0X2VuZGAgY2FsY3VsYXRlcyBgbmxhX2xlbmAuIEl0IGFzc2lnbnMgYGFmLSZndDtubGFfbGVuYCBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IHRhaWwgb2YgdGhlIHNrYiAoYHNrYl90YWlsX3BvaW50ZXJgKSBhbmQgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGF0dHJpYnV0ZSAoYCh1bnNpZ25lZCBjaGFyICopYWZgKS4KClRoZSBwb3RlbnRpYWwgaXNzdWUgaW1tZWRpYXRlbHkganVtcHMgb3V0OiBJZiB0aGUgZGF0YSBiZWluZyBuZXN0ZWQgKndpdGhpbiogdGhlIGF0dHJpYnV0ZSBpcyB0b28gbGFyZ2Ug4oCTIGlmLCBmb3IgaW5zdGFuY2UsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBodWdlIG51bWJlciBvZiBWTEFOcyDigJMgdGhpcyBsZW5ndGggY2FsY3VsYXRpb24gY291bGQgZXhjZWVkIHRoZSBgVTE2X01BWGAgbGltaXQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3chIGBhZi0mZ3Q7bmxhX2xlbmAgd291bGQgd3JhcCBhcm91bmQsIGJlY29taW5nIGEgc21hbGwsIGluY29ycmVjdCBudW1iZXIuIFRoaXMgd291bGQgcmVzdWx0IGluIGVpdGhlciB0aGUga2VybmVsIG9yIHVzZXJzcGFjZSBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUgYXMgbXVjaCBzbWFsbGVyIHRoYW4gaXQgYWN0dWFsbHkgaXMsIHJlc3VsdGluZyBpbiBhIGNvcnJ1cHRlZCBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgb3IgdHJ1bmNhdGVkIGF0dHJpYnV0ZS4KCkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBleGFjdGx5IHRoYXQhIEl0IGFkZHMgYSBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWClgLiBJZiB0aGUgbGVuZ3RoIGlzIHRvbyBsYXJnZSwgaXQgc2V0cyBhbiBleHRlbmRlZCBBQ0sgZXJyb3IgbWVzc2FnZSwgY2FuY2VscyB0aGUgbmV0bGluayBtZXNzYWdlLCBhbmQgcmV0dXJucyBgLUUyQklHYC4gU21hcnQhIFRoZXkmIzM5O3ZlIG1hbmFnZWQgdG8gY2F0Y2ggdGhlIG92ZXJmbG93IGJlZm9yZSBpdCBjYXVzZXMgcmVhbCBkYW1hZ2UuCgpUaGUgY29kZSYjMzk7cyB0aHJlYWRpbmcgYSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgIGRvd24gdG8gYGJyX2ZpbGxfaWZpbmZvYCB0byBlbmFibGUgdGhlIHNldHRpbmcgb2YgYGV4dGFja2AgaW4gdGhlIGZpcnN0IHBsYWNlLCBnb29kIGRlc2lnbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSBleHRlbmRlZCBBQ0suCgpOb3csIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgdGhpcyBwYXRjaCBoYXMgYW55IG90aGVyIGNoYW5nZXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AgdG8gY29uZmlybSB0aGF0IGFueSBzaW1pbGFyIGNvZGUgaXMgY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTM5NTpcdGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuNTM5NjpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbW9kZSxcbjUzOTc6XHRcdFx0XHQgICAgdTMyIGZsYWdzLCB1MzIgbWFzaywgaW50IG5sZmxhZ3MsXG41Mzk4Olx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzayxcbjUzOTk6XHRcdFx0XHQgICAgaW50ICgqdmxhbl9maWxsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuNTQwMDpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG41NDAxOlx0XHRcdFx0XHRcdCAgICAgdTMyIGZpbHRlcl9tYXNrKSxcbjU0MDI6XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuNTQwMzpcdHtcbjU0MDQ6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuNTQwNTpcdFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xuNTQwNjpcdFx0c3RydWN0IG5sYXR0ciAqYnJfYWZzcGVjO1xuNTQwNzpcdFx0c3RydWN0IG5sYXR0ciAqcHJvdGluZm87XG41NDA4Olx0XHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBkZXYtXHUwMDNlb3BlcnN0YXRlIDogSUZfT1BFUl9ET1dOO1xuNTQwOTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpO1xuNTQxMDpcdFx0aW50IGVyciA9IDA7XG41NDExOlx0XG41NDEyOlx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgUlRNX05FV0xJTkssIHNpemVvZigqaWZtKSwgbmxmbGFncyk7XG41NDEzOlx0XHRpZiAobmxoID09IE5VTEwpXG41NDE0Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG41NDE1Olx0XG41NDE2Olx0XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG41NDE3Olx0XHRpZm0tXHUwMDNlaWZpX2ZhbWlseSA9IEFGX0JSSURHRTtcbjU0MTg6XHRcdGlmbS1cdTAwM2VfX2lmaV9wYWQgPSAwO1xuNTQxOTpcdFx0aWZtLVx1MDAzZWlmaV90eXBlID0gZGV2LVx1MDAzZXR5cGU7XG41NDIwOlx0XHRpZm0tXHUwMDNlaWZpX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG41NDIxOlx0XHRpZm0tXHUwMDNlaWZpX2ZsYWdzID0gbmV0aWZfZ2V0X2ZsYWdzKGRldik7XG41NDIyOlx0XHRpZm0tXHUwMDNlaWZpX2NoYW5nZSA9IDA7XG41NDIzOlx0XG41NDI0Olx0XG41NDI1Olx0XHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBJRkxBX0lGTkFNRSwgZGV2LVx1MDAzZW5hbWUpIHx8XG41NDI2Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX01UVSwgZGV2LVx1MDAzZW10dSkgfHxcbjU0Mjc6XHRcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9PUEVSU1RBVEUsIG9wZXJzdGF0ZSkgfHxcbjU0Mjg6XHRcdCAgICAoYnJfZGV2IFx1MDAyNlx1MDAyNlxuNTQyOTpcdFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTUFTVEVSLCBicl9kZXYtXHUwMDNlaWZpbmRleCkpIHx8XG41NDMwOlx0XHQgICAgKGRldi1cdTAwM2VhZGRyX2xlbiBcdTAwMjZcdTAwMjZcbjU0MzE6XHRcdCAgICAgbmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LVx1MDAzZWFkZHJfbGVuLCBkZXYtXHUwMDNlZGV2X2FkZHIpKSB8fFxuNTQzMjpcdFx0ICAgIChkZXYtXHUwMDNlaWZpbmRleCAhPSBkZXZfZ2V0X2lmbGluayhkZXYpIFx1MDAyNlx1MDAyNlxuNTQzMzpcdFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTElOSywgZGV2X2dldF9pZmxpbmsoZGV2KSkpKVxuNTQzNDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCcmlkZ2UgTmV0bGluayBJbnRlcmZhY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYnJpZGdlIG5ldGxpbmsgaW50ZXJmYWNlIGhhbmRsZXMgZ2V0dGluZyBsaW5rIGluZm9ybWF0aW9uLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCB0YWtlcyBhbiBgZXh0YWNrYCBhcmd1bWVudCwgZXZlbiB0aG91Z2ggaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB1c2luZyBpdCByaWdodCBub3cuIEl0JiMzOTtzIHByb2JhYmx5IHRoZXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYG5kb19icmlkZ2VfZ2V0bGlua2Agb3IgZm9yIHBvdGVudGlhbCBmdXR1cmUgdXNlIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSBqdXN0IHdhbnQgdG8gdmVyaWZ5OyBubywgYHZsYW5fZmlsbGAgZG9lc24mIzM5O3QgZ2V0IGBleHRhY2tgIHBhc3NlZCB0byBpdC4KCkFscmlnaHQsIG1vdmluZyBvbiwgbGV0JiMzOTtzIGxvb2sgYXQgYHJ0bmxfYnJpZGdlX2dldGxpbmtgLiBPa2F5LCBJIHNlZSB0aGF0IHdpdGhpbiBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIHRoZSBkcml2ZXImIzM5O3MgYG5kb19icmlkZ2VfZ2V0bGlua2AgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aXRoIGBjYi0mZ3Q7ZXh0YWNrYCBwYXNzZWQgaW4uIFRoYXQgbWFrZXMgc2Vuc2UuIEkgc2VlIGEgc2ltaWxhciBwYXR0ZXJuIHdpdGggYHJ0bmxfYnJpZGdlX25vdGlmeWAsIHdoZXJlIGBleHRhY2tgIGlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyJiMzOTtzIGBuZG9fYnJpZGdlX2dldGxpbmtgLgoKTm93LCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayBncmVwIGZvciBgLm5kb19icmlkZ2VfZ2V0bGlua2AgYWNyb3NzIHRoZSByZWxldmFudCBjb2RlYmFzZS4gSSB3YW50IHRvIGNoZWNrIHRoYXQgYWxsIGRyaXZlcnMgdGhhdCBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhcmUgY29uc2lzdGVudGx5IHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgc2lnbmF0dXJlIHdpdGggYGV4dGFja2AgYW5kIGV2ZXJ5dGhpbmcgZWxzZS4gSXQgd291bGQgYmUgZWFzeSB0byBtaXNzIGFuIGluc3RhbmNlIGFuZCBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciBkcml2ZXJzIHNsaXAgdW5kZXIgdGhlIHJhZGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fYnJpZGdlX2dldGxpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTYyMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibnh0X25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYyNDAtXHQubmRvX3hkcF94bWl0XHRcdD0gYm54dF94ZHBfeG1pdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2MjQxOlx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0PSBibnh0X2JyaWRnZV9nZXRsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYyNDItXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQ9IGJueHRfYnJpZGdlX3NldGxpbmssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz00OTY4PXN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNTAxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NTAxMjpzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy01MDEzLVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTUxNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNTE3My1cdC5uZG9fYnJpZGdlX3NldGxpbmtcdD0gYmVfbmRvX2JyaWRnZV9zZXRsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo1MTc0Olx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0PSBiZV9uZG9fYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTUxNzUtXHQubmRvX2ZlYXR1cmVzX2NoZWNrXHQ9IGJlX2ZlYXR1cmVzX2NoZWNrLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTMwODg9c3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEzMTQ3OiAqIGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rIC0gR2V0IHRoZSBoYXJkd2FyZSBicmlkZ2UgbW9kZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xMzE0OC0gKiBAc2tiOiBza2IgYnVmZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNTgtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxMzE1OTpzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTEzMTYwLVx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTEzNjM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTQwZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTM2NjYtXHQubmRvX2ZlYXR1cmVzX2NoZWNrXHQ9IGk0MGVfZmVhdHVyZXNfY2hlY2ssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEzNjY3Olx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0PSBpNDBlX25kb19icmlkZ2VfZ2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTM2NjgtXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQ9IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTk3ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpY2VfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODEzLVx0Lm5kb19zZXRfZmVhdHVyZXMgPSBpY2Vfc2V0X2ZlYXR1cmVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgxNDpcdC5uZG9fYnJpZGdlX2dldGxpbmsgPSBpY2VfYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODE1LVx0Lm5kb19icmlkZ2Vfc2V0bGluayA9IGljZV9icmlkZ2Vfc2V0bGluayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM9MTA2OTk9c3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTA3MjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MTA3Mjc6c3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0xMDcyOC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYz0xMTA3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4Z2JlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTExMTEwLVx0Lm5kb19icmlkZ2Vfc2V0bGlua1x0PSBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MTExMTE6XHQubmRvX2JyaWRnZV9nZXRsaW5rXHQ9IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0xMTExMi1cdC5uZG9fZGZ3ZF9hZGRfc3RhdGlvblx0PSBpeGdiZV9md2RfYWRkLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTMyND1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NWVfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTUzNTAtXHQubmRvX2JyaWRnZV9zZXRsaW5rICAgICAgPSBtbHg1ZV9icmlkZ2Vfc2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM6NTM1MTpcdC5uZG9fYnJpZGdlX2dldGxpbmsgICAgICA9IG1seDVlX2JyaWRnZV9nZXRsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzUyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYz0yMzE1PWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZnBfbmZkM19uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYy0yMzQxLVx0Lm5kb194c2tfd2FrZXVwXHRcdD0gbmZwX25ldF94c2tfd2FrZXVwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jOjIzNDI6XHQubmRvX2JyaWRnZV9nZXRsaW5rICAgICA9IG5mcF9uZXRfYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM0My1cdC5uZG9fYnJpZGdlX3NldGxpbmsgICAgID0gbmZwX25ldF9icmlkZ2Vfc2V0bGluayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmM9MjM0Nj1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmZwX25mZGtfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM3MS1cdC5uZG9fYnBmXHRcdD0gbmZwX25ldF94ZHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmM6MjM3MjpcdC5uZG9fYnJpZGdlX2dldGxpbmsgICAgID0gbmZwX25ldF9icmlkZ2VfZ2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYy0yMzczLVx0Lm5kb19icmlkZ2Vfc2V0bGluayAgICAgPSBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rLFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9MTA0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFldGhfbDJfaXFkX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0xMDY1LVx0Lm5kb19zZXRfZmVhdHVyZXNcdD0gcWV0aF9zZXRfZmVhdHVyZXMsXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjEwNjY6XHQubmRvX2JyaWRnZV9nZXRsaW5rXHQ9IHFldGhfbDJfYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTEwNjctXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQ9IHFldGhfbDJfYnJpZGdlX3NldGxpbmssXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTEzNjAtICpcdFx0XHQgICAgIHUxNiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMzYxOiAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM2Mi0gKlx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY1Ny1cdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNjU4Olx0aW50XHRcdFx0KCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE2NTktXHRcdFx0XHRcdFx0ICAgICAgdTMyIHBpZCwgdTMyIHNlcSxcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NjgtXHQubmRvX21kYl9nZXRcdFx0ID0gYnJfbWRiX2dldCxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NDY5Olx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0ID0gYnJfZ2V0bGluayxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDcwLVx0Lm5kb19icmlkZ2Vfc2V0bGlua1x0ID0gYnJfc2V0bGluayxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz01NTUzPXN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU3My1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjU1NzQ6XHRcdGlmIChicl9kZXYgXHUwMDI2XHUwMDI2IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluaykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU3NS1cdFx0XHRpZiAoaWR4IFx1MDAzZT0gY2ItXHUwMDNlYXJnc1swXSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU3NjpcdFx0XHRcdGVyciA9IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1NzctXHRcdFx0XHRcdFx0c2tiLCBwb3J0aWQsIHNlcSwgZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1ODktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NTkwOlx0XHRpZiAob3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluaykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU5MS1cdFx0XHRpZiAoaWR4IFx1MDAzZT0gY2ItXHUwMDNlYXJnc1swXSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU5MjpcdFx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCBwb3J0aWQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NTkzLVx0XHRcdFx0XHRcdFx0ICAgICAgc2VxLCBkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTYzMD1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTU2MzYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NjM3Olx0aWYgKCFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmspXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjM4LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjQ1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTY0NjpcdGVyciA9IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCwgZXh0YWNrKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU2NDctXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZMQU4gSW5mb3JtYXRpb24gT3ZlcmZsb3cgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7dmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgYWxsIHRoZSBpbXBsZW1lbnRhdGlvbnMgYW5kIGNhbGxlcnMgd2l0aCBgZXh0YWNrYCwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYWN0dWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZSB3aXRoIFZMQU4gaW5mb3JtYXRpb24uIEZyb20gd2hhdCBJIHNlZSwgaXQgaW50cm9kdWNlcyBhIGNydWNpYWwgb3ZlcmZsb3cgY2hlY2s6IGBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBwcmV2aW91c2x5LCBpZiB0aGUgVkxBTiBkYXRhIG5lc3RlZCB3aXRoaW4gdGhlIGBhZmAgYXR0cmlidXRlIGV4Y2VlZGVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHNpemUgZm9yIGBubGFfbGVuYCksIHRoZSBgbmxhX25lc3RfZW5kYCBmdW5jdGlvbiB3b3VsZCBzaW1wbHkgdHJ1bmNhdGUgdGhlIGxlbmd0aCB0byBhIGB1MTZgLgoKVGhpcyBuZXcgY2hlY2sgYWRkcmVzc2VzIHRoYXQgYnkgY2FuY2VsbGluZyB0aGUgTmV0bGluayBtZXNzYWdlIGFuZCByZXR1cm5pbmcgYC1FMkJJR2AgaWYgdGhlIG92ZXJmbG93IGlzIGRldGVjdGVkLiBDcml0aWNhbGx5LCBpdCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGBleHRhY2tgIHN0cnVjdHVyZSBzbyBhIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgY2FuIGJlIHNldCB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYC4gVGhhdCBhbGxvd3MgdXMgdG8gcHJvdmlkZSBhIG11Y2ggbW9yZSB1c2VmdWwgZXJyb3IgbWVzc2FnZS4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCiogICBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCwgc28gbm8gY29uY2VybnMgdGhlcmUuCiogICBgTkxfU0VUX0VSUl9NU0dfTU9EYCBjb3JyZWN0bHkgc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBwb2ludGVyIHRvIGEgc3RyaW5nIGxpdGVyYWwsIHdoaWNoIGlzIHNhZmUuCiogICBJbiB0aGUgZXJyb3IgcGF0aCAoYC1FMkJJR2AgcmV0dXJuKSwgYG5sbXNnX2NhbmNlbChza2IsIG5saClgIGNvcnJlY3RseSB0cmltcyB0aGUgYHNrYmAgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCiogICBUaGUgYHNrYmAgYnVmZmVyIGl0c2VsZiBpcyBhbiBleGlzdGluZyBgc2tiYCBhbGxvY2F0ZWQgYnkgdGhlIE5ldGxpbmsgZHVtcC9ub3RpZnkgcm91dGluZXMsIGl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc2tiIGJ1ZmZlci4KKiAgIEkgY2FuIHNlZSB0aGF0IHRoZSBjcml0aWNhbCBjYWxjdWxhdGlvbiwgYHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWZgLCBpcyB1c2luZyB2YWxpZCBwb2ludGVycyBpbnRvIHRoZSBgc2tiYCBidWZmZXIuCiogICBUaGlzIGFsc28gbWVhbnMgdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZTsgaW4gZmFjdCwgaXQgKnByZXZlbnRzKiBzZW5kaW5nIGEgY29ycnVwdGVkIG1lc3NhZ2UuCiogICBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhOyBgYWZgIGFuZCBgc2tiYCBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGV4dGFja2Agc3RydWN0dXJlIGlzIHBhc3NlZCBpbi4KKiAgIEFsbCBkcml2ZXJzIGFyZSBjb3JyZWN0bHkgcGFzc2luZyB0aGUgYGV4dGFja2Agc3RydWN0IHRocm91Z2ggdG8gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYC4KCkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZXh0YWNrYCBpcyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXJzLCBlc3BlY2lhbGx5IGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYHJ0bmxfYnJpZGdlX3NldGxpbmtgLCBhbmQgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLgoKSSBrbm93IGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYGNiLSZndDtleHRhY2tgIGNvbWVzIGZyb20gdGhlIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3QsIHdoaWNoIGlzIG1hbmFnZWQgYnkgdGhlIE5ldGxpbmsgY29yZSBpdHNlbGYgKGluaXRpYWxpemVkIGFuZCB6ZXJvZWQgYnkgdGhlIGNvcmUpLiBUaGF0JiMzOTtzIGdvb2QuCgpJbiBgcnRubF9icmlkZ2Vfc2V0bGlua2AgYW5kIGBydG5sX2JyaWRnZV9kZWxsaW5rYCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBydG5sX2JyaWRnZV9ub3RpZnlgIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkgdG8gZW5zdXJlIHRoZSBgZXh0YWNrYCBwb2ludGVyIGlzIGJlaW5nIGhhbmRsZWQgc2FmZWx5LiBMZXQgbWUgcmV2aWV3IHRoYXQgY29kZSBhZ2FpbiB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzIwOlx0XG41NzIxOlx0XHRcdGZsYWdzIFx1MDAyNj0gfkJSSURHRV9GTEFHU19NQVNURVI7XG41NzIyOlx0XHR9XG41NzIzOlx0XG41NzI0Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUklER0VfRkxBR1NfU0VMRikpIHtcbjU3MjU6XHRcdFx0aWYgKCFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX3NldGxpbmspXG41NzI2Olx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG41NzI3Olx0XHRcdGVsc2VcbjU3Mjg6XHRcdFx0XHRlcnIgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX3NldGxpbmsoZGV2LCBubGgsXG41NzI5Olx0XHRcdFx0XHRcdFx0XHRcdCAgZmxhZ3MsXG41NzMwOlx0XHRcdFx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjU3MzE6XHRcdFx0aWYgKCFlcnIpIHtcbjU3MzI6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5CUklER0VfRkxBR1NfU0VMRjtcbjU3MzM6XHRcbjU3MzQ6XHRcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG41NzM1Olx0XHRcdFx0ICogY2hhbmdlXG41NzM2Olx0XHRcdFx0ICovXG41NzM3Olx0XHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbjU3Mzg6XHRcdFx0fVxuNTczOTpcdFx0fVxuNTc0MDpcdFxuNTc0MTpcdFx0aWYgKGJyX2ZsYWdzX2F0dHIpXG41NzQyOlx0XHRcdG1lbWNweShubGFfZGF0YShicl9mbGFnc19hdHRyKSwgXHUwMDI2ZmxhZ3MsIHNpemVvZihmbGFncykpO1xuNTc0MzpcdG91dDpcbjU3NDQ6XHRcdHJldHVybiBlcnI7XG41NzQ1Olx0fVxuNTc0NjpcdFxuNTc0NzpcdHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjU3NDg6XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuNTc0OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczODcKCQkJCQkJCW91dHB1dDogMjE1CgkJCQkJCQl0aG91Z2h0czogNTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gTmV0bGluayBCcmlkZ2UgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgZXh0YWNrYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0bGluayBicmlkZ2UgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBydG5sX2JyaWRnZV9zZXRsaW5rYCwgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLCBhbmQgYGJyX2luZm9fbm90aWZ5YC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZXh0YWNrYCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBhcyBgTlVMTGAgaW4gY2VydGFpbiBzaXR1YXRpb25zLCBvcmlnaW5hdGluZyBmcm9tIGBuZXRsaW5rX3Jjdl9za2JgIHdpdGhpbiB0aGUgbmV0bGluayBkaXNwYXRjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLgoKTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHdoZXRoZXIgdGhpcyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IsIHdvcnNlLCB3cml0dGVuIHRvLiBXZSBjYW4gc2VlIHRoYXQgYE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIC4uLilgIGlzIHRoZSBrZXkgbWFjcm8gaGVyZS4gVGhhdCBleHBhbmRzIHRvIGBOTF9TRVRfRVJSX01TRygpYCB3aGljaCBpbmNsdWRlcyBhIGNoZWNrIGBpZiAoZXh0YWNrKWAgd2l0aGluIGl0cyBzdHJ1Y3R1cmUuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgYGV4dGFjayA9PSBOVUxMYCBjYXNlLCBwcmV2ZW50aW5nIGFueSBkaXJlY3QgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyBuZXcgbWVtb3J5IGFsbG9jYXRlZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbmQgY2VydGFpbmx5IG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBhbHNvIHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgZm9yIG1hbGZvcm1lZCBtZXNzYWdlcy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNhcmVmdWxseSBhbmQgZGV0ZXJtaW5lZCB0aGF0IHRoZXJlJiMzOTtzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBpbiB0aGlzIGNvbnRleHQuIFRoZSBjb2RlIG5vdyBhbHNvIGluY2x1ZGVzIGVycm9yIGNoZWNrcyBmb3IgYnVmZmVyIHNpemUgZXhjZWVkaW5nIGBVMTZfTUFYYCwgY2FuY2VsbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIHdoZW4gdGhlIGJ1ZmZlciBpcyB0b28gbGFyZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaW4gc2NlbmFyaW9zIHdpdGggZGVlcCBuZXN0aW5nLCB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93aW5nIGRhdGEgYW5kIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4KCkkmIzM5O3ZlIGNvbmZpcm1lZCBteSBhbmFseXNpcyBieSBjaGVja2luZyBhbGwgZm91ciBjcml0ZXJpYSBmb3IgYE5lZWRzS01TQU5gLgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgLSB0aGUgcGF0Y2ggYWN0dWFsbHkgY2FuY2VscyB0aGUgbWVzc2FnZSBpZiBpdCYjMzk7cyB0b28gbGFyZ2UgaW5zdGVhZCBvZiB3cml0aW5nIGEgdHJ1bmNhdGVkIGxlbmd0aC4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAtIG5vIHN1Y2ggZGVwZW5kZW5jZS4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgLSBubyBhbGxvY2F0aW9ucyBhZGRlZC4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIC0gdGhlIG5lc3Qgc2l6ZSBpcyBub3cgcmVzdHJpY3RlZCB0byBgJmx0Oz0gVTE2X01BWGAuCgpHaXZlbiBhbGwgb2YgdGhpcywgdGhlcmUmIzM5O3Mgbm8gcG9zc2liaWxpdHkgb2YgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gdGhpcyBjb2RlLiBUaGUgcGF0Y2ggaXMgY2xlYW4gYW5kIHNhZmUgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGluIHRoaXMgaW5zdGFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IGEgMTYtYml0IGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIG5lc3RlZCBhdHRyaWJ1dGUgbGVuZ3RoIChJRkxBX0FGX1NQRUMpIHdoZW4gZHVtcGluZyBicmlkZ2UgcG9ydCBWTEFOIGluZm9ybWF0aW9uLCBjYW5jZWxpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIC1FMkJJRyBpZiB0aGUgbmVzdGVkIGRhdGEgZXhjZWVkcyBVMTZfTUFYLiBUbyBzdXBwb3J0IHNldHRpbmcgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgKE5MX1NFVF9FUlJfTVNHX01PRCksIGl0IHRocmVhZHMgdGhlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlciB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgIGFjcm9zcyBuZXQgY29yZSBhbmQgdmFyaW91cyBldGhlcm5ldCBkcml2ZXJzLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgYSAxNi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBsZW5ndGggKElGTEFfQUZfU1BFQykgd2hlbiBkdW1waW5nIGJyaWRnZSBwb3J0IFZMQU4gaW5mb3JtYXRpb24sIGNhbmNlbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIGFuZCByZXR1cm5pbmcgLUUyQklHIGlmIHRoZSBuZXN0ZWQgZGF0YSBleGNlZWRzIFUxNl9NQVguIFRvIHN1cHBvcnQgc2V0dGluZyBhbiBleHRlbmRlZCBhY2sgbWVzc2FnZSAoTkxfU0VUX0VSUl9NU0dfTU9EKSwgaXQgdGhyZWFkcyB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgcGFyYW1ldGVyIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AgYWNyb3NzIG5ldCBjb3JlIGFuZCB2YXJpb3VzIGV0aGVybmV0IGRyaXZlcnMuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIHBvaW50ZXIgYXJpdGhtZXRpYyByZWxpZXMgb24gdmFsaWQgYnVmZmVyIHBvaW50ZXJzIChgc2tiX3RhaWxfcG9pbnRlcihza2IpYCBhbmQgYGFmYCksIGFuZCBOTF9TRVRfRVJSX01TR19NT0Qgc2FmZWx5IGhhbmRsZXMgYm90aCB2YWxpZCBhbmQgTlVMTCBleHRhY2sgcG9pbnRlcnMuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50OyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjQwLjQ5MTIyMTg4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDk4MTQwNTA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2ZpbGxfaWZpbmZvXCIsXG4gICAgXCJicl9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2JyaWRnZV9nZXRsaW5rXCIsXG4gICAgXCJuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua1wiLFxuICAgIFwicnRubF9icmlkZ2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIChuZXQvYnJpZGdlIGFuZCBuZXQvY29yZS9ydG5ldGxpbmspLCBhZGRpbmcgYSBzaXplIGJvdW5kYXJ5IGNoZWNrIGluIGJyX2ZpbGxfaWZpbmZvKCkgdG8gcHJldmVudCB1MTYgbmxhX2xlbiBvdmVyZmxvdyB3aGVuIHNlcmlhbGl6aW5nIGJyaWRnZSBWTEFOIGluZm9ybWF0aW9uIGludG8gSUZMQV9BRl9TUEVDLCBhbmQgcGx1bWJzIG5ldGxpbmtfZXh0X2FjayB0aHJvdWdoIG5kb19icmlkZ2VfZ2V0bGluayBhY3Jvc3MgbmV0X2RldmljZV9vcHMgYW5kIHJ0bmV0bGluayBjYWxsZXJzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIHJlcXVlc3RzIG9uIGJyaWRnZSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo0MC40OTEyMjcwMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTM3OTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVhMDI4MDc1NWZlZTFmOTk4M2U3OWNhYzg4NjdmNDU4ZTVjZjNlNGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbmluZGV4IGNhOTlmNGIxYTYzYzMuLmE3NTJlNjZiZjYzNjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbkBAIC0xNjE1NCwxMiArMTYxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZHBfdHVubmVsX25pY19pbmZvIGJueHRfdWRwX3R1bm5lbHMgPSB7XFxuIFxcbiBzdGF0aWMgaW50IGJueHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcXG4tXFx0XFx0XFx0ICAgICAgIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHQgICAgICAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgYm54dCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgYnAtXFx1MDAzZWJyX21vZGUsIDAsIDAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xcbmluZGV4IGVkMzAyZjVlYzQ3NjguLmNjOWM4NzUzOWE0MjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcXG5AQCAtNTAxMSw3ICs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcbiBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgaW50IG5sZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdCBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0aW50IHN0YXR1cyA9IDA7XFxuQEAgLTUwMzcsNyArNTAzNyw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBoc3dfbW9kZSA9PSBQT1JUX0ZXRF9UWVBFX1ZFUEEgP1xcbiBcXHRcXHRcXHRcXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbmluZGV4IGFiYmM3MWU4MTVhZTMuLjUyYzJiMzkzYWFjZDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG5AQCAtMTMxNTEsNiArMTMxNTEsNyBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICAqIEBkZXY6IHRoZSBuZXRkZXYgYmVpbmcgY29uZmlndXJlZFxcbiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZFxcbiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW5cXG4rICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2tcXG4gICpcXG4gICogUmV0dXJuIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBoYXJkd2FyZSBicmlkZ2UgaXMgb3BlcmF0aW5nIGluXFxuICAqIGkuZSBWRUIgb3IgVkVQQS5cXG5AQCAtMTMxNTgsNyArMTMxNTksOCBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgaW50IG5sZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdCAgIGludCBubGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGk0MGVfbmV0ZGV2X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IGk0MGVfdnNpICp2c2kgPSBucC1cXHUwMDNldnNpO1xcbkBAIC0xMzE3NSw3ICsxMzE3Nyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCB2ZWItXFx1MDAzZWJyaWRnZV9tb2RlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuaW5kZXggZmU0N2VjMGJhODA5NC4uMDM4Y2UxZmU1YmZlNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuQEAgLTgwODYsMTIgKzgwODYsMTQgQEAgaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKVxcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcXG4gICogQGZpbHRlcl9tYXNrOiBmaWx0ZXIgbWFzayBwYXNzZWQgaW5cXG4gICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluXFxuKyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXFxuICAqXFxuICAqIFJldHVybiB0aGUgYnJpZGdlIG1vZGUgKFZFQi9WRVBBKVxcbiAgKi9cXG4gc3RhdGljIGludFxcbiBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4tXFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncylcXG4rXFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyxcXG4rXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihkZXYpO1xcbiBcXHR1MTYgYm1vZGU7XFxuQEAgLTgwOTksNyArODEwMSw3IEBAIGljZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHRibW9kZSA9IHBmLVxcdTAwM2VmaXJzdF9zdy1cXHUwMDNlYnJpZGdlX21vZGU7XFxuIFxcbiBcXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXFxuaW5kZXggZjkxODU2NDk4ZWIyZC4uNzdkZmQ4MGE2ZTM2OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcXG5AQCAtMTA3MjYsNyArMTA3MjYsOCBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XFxuIFxcbkBAIC0xMDczNSw3ICsxMDczNiw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcbiBcXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYWRhcHRlci1cXHUwMDNlYnJpZGdlX21vZGUsIDAsIDAsIG5sZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xcbmluZGV4IGZjMTEwYTdkMTZlOGQuLjUzYmY3OWRiZTA4ZGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5AQCAtNTI3Nyw3ICs1Mjc3LDcgQEAgc3RhdGljIGludCBtbHg1ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcXG4gI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXFxuLVxcdFxcdFxcdFxcdGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHRpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbkBAIC01Mjg4LDcgKzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdG1vZGUgPSBzZXR0aW5nID8gQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcXG4gXFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG1vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jXFxuaW5kZXggNzkyOGU3NmRhNzIzZS4uY2I3NTFkZGRiNjg4NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcXG5AQCAtMjI1Nyw3ICsyMjU3LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKVxcbiBcXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IG5mcF9uZXQgKm5uID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0dTE2IG1vZGU7XFxuQEAgLTIyNjksNyArMjI2OSw3IEBAIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcXG4gXFxuIFxcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xcbmluZGV4IDI5MzVjMmVjYzMxNGIuLmY5NjBjZjVhOTdhMjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xcbisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcXG5AQCAtOTM1LDcgKzkzNSw3IEBAIHN0YXRpYyB2b2lkIHFldGhfbDJfYnIyZGV2X3B1dCh2b2lkKVxcbiBcXG4gc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IHFldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtXFx1MDAzZW1sX3ByaXY7XFxuQEAgLTk0OSw3ICs5NDksNyBAQCBzdGF0aWMgaW50IHFldGhfbDJfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG1vZGUsIHByaXYtXFx1MDAzZWJycG9ydF9mZWF0dXJlcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZWJycG9ydF9od19mZWF0dXJlcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcWV0aF9icnBvcnRfcG9saWN5W0lGTEFfQlJQT1JUX01BWCArIDFdID0ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDcwN2IyZTUxYzJiOTcuLjE4YTAzZjBmNmYxMTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMTM2MCw3ICsxMzYwLDcgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbiAgKlxcdFxcdFxcdCAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gICpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcXG4tICpcXHRcXHRcXHQgICAgIGludCBubGZsYWdzKVxcbisgKlxcdFxcdFxcdCAgICAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gICpcXHRcXHRcXHQgICAgIHUxNiBmbGFncyk7XFxuICAqXFxuQEAgLTE2NTksNyArMTY1OSw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBmaWx0ZXJfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG5sZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgbmxmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFx0aW50XFx0XFx0XFx0KCpuZG9fYnJpZGdlX2RlbGxpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MTYgZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxcbmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcXG5AQCAtMjIyLDcgKzIyMiw4IEBAIGV4dGVybiBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0XFx0ICAgdTMyIGZpbHRlcl9tYXNrLFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZpbHRlcl9tYXNrKSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgZmlsdGVyX21hc2spLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBcXG4gZXh0ZXJuIHZvaWQgcnRubF9vZmZsb2FkX3hzdGF0c19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXFxuaW5kZXggYWU3NmRmMGRlMDVhMC4uNTM2NzZkZjllNGQxMSAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXFxuQEAgLTQ1OSw3ICs0NTksNyBAQCBzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4gXFx0XFx0XFx0ICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncyxcXG4gXFx0XFx0XFx0ICB1MzIgZmlsdGVyX21hc2ssIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdCAgYm9vbCBnZXRsaW5rKVxcbitcXHRcXHRcXHQgIGJvb2wgZ2V0bGluaywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IFJFQURfT05DRShkZXYtXFx1MDAzZW9wZXJzdGF0ZSkgOlxcbiBcXHRcXHRcXHRcXHRcXHQgICAgSUZfT1BFUl9ET1dOO1xcbkBAIC02MTMsNiArNjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIGRvbmU6XFxuIFxcdGlmIChhZikge1xcbitcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcXHUwMDNlIFUxNl9NQVgpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlZMQU4gaW5mb3JtYXRpb24gZG9lcyBub3QgZml0IGluIG9uZSBtZXNzYWdlLCB1c2UgUlRNX0dFVFZMQU5cXFwiKTtcXG4rXFx0XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXFxuIFxcdFxcdFxcdG5sYV9uZXN0X2VuZChza2IsIGFmKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC02NTQsNyArNjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0aWYgKHNrYiA9PSBOVUxMKVxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuLVxcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSk7XFxuK1xcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSxcXG4rXFx0XFx0XFx0ICAgICBOVUxMKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGJyX25sbXNnX3NpemUoKSAqL1xcbiBcXHRcXHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xcbkBAIC02ODAsNyArNjg3LDggQEAgdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiAgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOS1xcbiAgKi9cXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4tXFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXFxuK1xcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxcbitcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7XFxuIFxcbkBAIC02OTIsNyArNzAwLDcgQEAgaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRyZXR1cm4gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCBwaWQsIHNlcSwgUlRNX05FV0xJTkssIG5sZmxhZ3MsXFxuLVxcdFxcdFxcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUpO1xcbitcXHRcXHRcXHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCAwOWMzOTdlMzAzMzA3Li5lZGJlN2ExZjU3MzYzIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5AQCAtMjE3OSw3ICsyMTc5LDcgQEAgaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzLFxcbiBcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzKTtcXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpO1xcbitcXHQgICAgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gaW50IGJyX3Byb2Nlc3Nfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0XFx0XFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqdmluZm9fY3VycixcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IGJlOWQxNjI1YmFjMzEuLjk2N2I1ODdlZjY2NDggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC01Mzk4LDcgKzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBmaWx0ZXJfbWFzayxcXG4gXFx0XFx0XFx0ICAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBmaWx0ZXJfbWFzaykpXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZpbHRlcl9tYXNrKSxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4gXFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xcbkBAIC01NTc0LDcgKzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IGJyX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRza2IsIHBvcnRpZCwgc2VxLCBkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Y2ItXFx1MDAzZWV4dGFjayk7XFxuIFxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTU1OTAsNyArNTU5Miw4IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzZXEsIGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmlsdGVyX21hc2ssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE5MTV9GX01VTFRJKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTkxNX0ZfTVVMVEksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNiLVxcdTAwM2VleHRhY2spO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWxlbikpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC01NjI0LDcgKzU2MjcsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBicmlkZ2Vfbmxtc2dfc2l6ZSh2b2lkKVxcbiBcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTtcXHQvKiBJRkxBX0JSSURHRV9NT0RFICovXFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuQEAgLTU2MzksNyArNTY0Myw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCk7XFxuK1xcdGVyciA9IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcbkBAIC01NzMwLDcgKzU3MzQsNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX3NldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdFxcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcXG4gXFx0XFx0XFx0ICogY2hhbmdlXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcXG4rXFx0XFx0XFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC01ODA1LDcgKzU4MDksNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2RlbGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdFxcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcXG4gXFx0XFx0XFx0ICogY2hhbmdlXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcXG4rXFx0XFx0XFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo0MS4yNjMxNzU3MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY2NDIxMzgwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfZmlsbF9pZmluZm9cIixcbiAgICBcImJyX2dldGxpbmtcIixcbiAgICBcInJ0bmxfYnJpZGdlX2dldGxpbmtcIixcbiAgICBcIm5kb19kZmx0X2JyaWRnZV9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2JyaWRnZV9ub3RpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YTAyODA3NTVmZWUxZjk5ODNlNzljYWM4ODY3ZjQ1OGU1Y2YzZTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5pbmRleCBjYTk5ZjRiMWE2M2MzLi5hNzUyZTY2YmY2MzY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5AQCAtMTYxNTQsMTIgKzE2MTU0LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdWRwX3R1bm5lbF9uaWNfaW5mbyBibnh0X3VkcF90dW5uZWxzID0ge1xuIFxuIHN0YXRpYyBpbnQgYm54dF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0ICAgICAgIGludCBubGZsYWdzKVxuK1x0XHRcdCAgICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBibnh0ICpicCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBicC1cdTAwM2Vicl9tb2RlLCAwLCAwLFxuLVx0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jXG5pbmRleCBlZDMwMmY1ZWM0NzY4Li5jYzljODc1MzlhNDI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xuQEAgLTUwMTEsNyArNTAxMSw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFxuIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLVx0XHRcdFx0IGludCBubGZsYWdzKVxuK1x0XHRcdFx0IGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHN0YXR1cyA9IDA7XG5AQCAtNTAzNyw3ICs1MDM3LDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXG4gXHRcdFx0XHQgICAgICAgaHN3X21vZGUgPT0gUE9SVF9GV0RfVFlQRV9WRVBBID9cbiBcdFx0XHRcdCAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCLFxuLVx0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBiZV9jbWRfd29yayAqYmVfYWxsb2Nfd29yayhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuaW5kZXggYWJiYzcxZTgxNWFlMy4uNTJjMmIzOTNhYWNkMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbkBAIC0xMzE1MSw2ICsxMzE1MSw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcbiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZFxuICAqIEBubGZsYWdzOiBuZXRsaW5rIGZsYWdzIHBhc3NlZCBpblxuKyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXG4gICpcbiAgKiBSZXR1cm4gdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGhhcmR3YXJlIGJyaWRnZSBpcyBvcGVyYXRpbmcgaW5cbiAgKiBpLmUgVkVCIG9yIFZFUEEuXG5AQCAtMTMxNTgsNyArMTMxNTksOCBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHUzMiBfX2Fsd2F5c191bnVzZWQgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgICBpbnQgbmxmbGFncylcbitcdFx0XHRcdCAgIGludCBubGZsYWdzLFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBpNDBlX25ldGRldl9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaTQwZV92c2kgKnZzaSA9IG5wLVx1MDAzZXZzaTtcbkBAIC0xMzE3NSw3ICsxMzE3Nyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCB2ZWItXHUwMDNlYnJpZGdlX21vZGUsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBmZTQ3ZWMwYmE4MDk0Li4wMzhjZTFmZTViZmU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtODA4NiwxMiArODA4NiwxNCBAQCBpbnQgaWNlX3NldF9yc3NfaGZ1bmMoc3RydWN0IGljZV92c2kgKnZzaSwgdTggaGZ1bmMpXG4gICogQGRldjogdGhlIG5ldGRldiBiZWluZyBjb25maWd1cmVkXG4gICogQGZpbHRlcl9tYXNrOiBmaWx0ZXIgbWFzayBwYXNzZWQgaW5cbiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW5cbisgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFja1xuICAqXG4gICogUmV0dXJuIHRoZSBicmlkZ2UgbW9kZSAoVkVCL1ZFUEEpXG4gICovXG4gc3RhdGljIGludFxuIGljZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuLVx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuK1x0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuK1x0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBpY2VfbmV0ZGV2X3RvX3BmKGRldik7XG4gXHR1MTYgYm1vZGU7XG5AQCAtODA5OSw3ICs4MTAxLDcgQEAgaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRibW9kZSA9IHBmLVx1MDAzZWZpcnN0X3N3LVx1MDAzZWJyaWRnZV9tb2RlO1xuIFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgYm1vZGUsIDAsIDAsIG5sZmxhZ3MsXG4tXHRcdFx0XHQgICAgICAgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbmluZGV4IGY5MTg1NjQ5OGViMmQuLjc3ZGZkODBhNmUzNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuQEAgLTEwNzI2LDcgKzEwNzI2LDggQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncylcbitcdFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXG5AQCAtMTA3MzUsNyArMTA3MzYsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBhZGFwdGVyLVx1MDAzZWJyaWRnZV9tb2RlLCAwLCAwLCBubGZsYWdzLFxuLVx0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5pbmRleCBmYzExMGE3ZDE2ZThkLi41M2JmNzlkYmUwOGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTUyNzcsNyArNTI3Nyw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXG4gI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcbiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRpbnQgbmxmbGFncylcbitcdFx0XHRcdGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG5AQCAtNTI4OCw3ICs1Mjg4LDcgQEAgc3RhdGljIGludCBtbHg1ZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0bW9kZSA9IHNldHRpbmcgPyBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCO1xuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBtb2RlLFxuLVx0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbmluZGV4IDc5MjhlNzZkYTcyM2UuLmNiNzUxZGRkYjY4ODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuQEAgLTIyNTcsNyArMjI1Nyw3IEBAIHN0YXRpYyBpbnQgbmZwX25ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqYWRkcilcbiBcbiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLVx0XHRcdFx0ICBpbnQgbmxmbGFncylcbitcdFx0XHRcdCAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmZwX25ldCAqbm4gPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dTE2IG1vZGU7XG5AQCAtMjI2OSw3ICsyMjY5LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcbmluZGV4IDI5MzVjMmVjYzMxNGIuLmY5NjBjZjVhOTdhMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jXG4rKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jXG5AQCAtOTM1LDcgKzkzNSw3IEBAIHN0YXRpYyB2b2lkIHFldGhfbDJfYnIyZGV2X3B1dCh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBxZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi1cdTAwM2VtbF9wcml2O1xuQEAgLTk0OSw3ICs5NDksNyBAQCBzdGF0aWMgaW50IHFldGhfbDJfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXG4gXHRcdFx0XHQgICAgICAgbW9kZSwgcHJpdi1cdTAwM2VicnBvcnRfZmVhdHVyZXMsXG4gXHRcdFx0XHQgICAgICAgcHJpdi1cdTAwM2VicnBvcnRfaHdfZmVhdHVyZXMsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcWV0aF9icnBvcnRfcG9saWN5W0lGTEFfQlJQT1JUX01BWCArIDFdID0ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA3MDdiMmU1MWMyYjk3Li4xOGEwM2YwZjZmMTEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbiAgKlx0XHRcdCAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gICogaW50ICgqbmRvX2JyaWRnZV9nZXRsaW5rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuICAqXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tICpcdFx0XHQgICAgIGludCBubGZsYWdzKVxuKyAqXHRcdFx0ICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuICAqIGludCAoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gICpcdFx0XHQgICAgIHUxNiBmbGFncyk7XG4gICpcbkBAIC0xNjU5LDcgKzE2NTksOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuIFx0XHRcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0XHQgICAgICB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0ICAgICAgaW50IG5sZmxhZ3MpO1xuK1x0XHRcdFx0XHRcdCAgICAgIGludCBubGZsYWdzLFxuK1x0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXHRpbnRcdFx0XHQoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRcdFx0XHQgICAgICB1MTYgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCA5NTcyOTMzOWU3YTU0Li5hNDA4YzM2YTdiNTU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTIyMiw3ICsyMjIsOCBAQCBleHRlcm4gaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICB1MzIgZmlsdGVyX21hc2ssXG4gXHRcdFx0XHQgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaykpO1xuK1x0XHRcdFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2spLFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcbiBleHRlcm4gdm9pZCBydG5sX29mZmxvYWRfeHN0YXRzX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXG5pbmRleCBhZTc2ZGYwZGUwNWEwLi41MzY3NmRmOWU0ZDExIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXG5AQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4gXHRcdFx0ICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncyxcbiBcdFx0XHQgIHUzMiBmaWx0ZXJfbWFzaywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHQgIGJvb2wgZ2V0bGluaylcbitcdFx0XHQgIGJvb2wgZ2V0bGluaywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IFJFQURfT05DRShkZXYtXHUwMDNlb3BlcnN0YXRlKSA6XG4gXHRcdFx0XHRcdCAgICBJRl9PUEVSX0RPV047XG5AQCAtNjEzLDYgKzYxMywxMiBAQCBzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gZG9uZTpcbiBcdGlmIChhZikge1xuK1x0XHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcdTAwM2UgVTE2X01BWCkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlwiKTtcbitcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuK1x0XHRcdHJldHVybiAtRTJCSUc7XG4rXHRcdH1cbiBcdFx0aWYgKG5sbXNnX2dldF9wb3Moc2tiKSAtICh2b2lkICopYWYgXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXG4gXHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgYWYpO1xuIFx0XHRlbHNlXG5AQCAtNjU0LDcgKzY2MCw4IEBAIHZvaWQgYnJfaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRpZiAoc2tiID09IE5VTEwpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuLVx0ZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlKTtcbitcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSxcbitcdFx0XHQgICAgIE5VTEwpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gYnJfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjgwLDcgKzY4Nyw4IEBAIHZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiAgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOS1xuICAqL1xuIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncylcbitcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuK1x0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcnRubChkZXYpO1xuIFxuQEAgLTY5Miw3ICs3MDAsNyBAQCBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIHBpZCwgc2VxLCBSVE1fTkVXTElOSywgbmxmbGFncyxcbi1cdFx0XHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlKTtcbitcdFx0XHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggMDljMzk3ZTMwMzMwNy4uZWRiZTdhMWY1NzM2MyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuQEAgLTIxNzksNyArMjE3OSw3IEBAIGludCBicl9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyxcbiBcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGludCBicl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7XG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdCAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKTtcbitcdCAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGludCBicl9wcm9jZXNzX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsXG4gXHRcdFx0IHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICp2aW5mb19jdXJyLFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IGJlOWQxNjI1YmFjMzEuLjk2N2I1ODdlZjY2NDggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC01Mzk4LDcgKzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrLFxuIFx0XHRcdCAgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0ICAgICB1MzIgZmlsdGVyX21hc2spKVxuK1x0XHRcdFx0XHQgICAgIHUzMiBmaWx0ZXJfbWFzayksXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbiBcdHN0cnVjdCBpZmluZm9tc2cgKmlmbTtcbkBAIC01NTc0LDcgKzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdGlmIChpZHggXHUwMDNlPSBjYi1cdTAwM2VhcmdzWzBdKSB7XG4gXHRcdFx0XHRlcnIgPSBicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoXG4gXHRcdFx0XHRcdFx0c2tiLCBwb3J0aWQsIHNlcSwgZGV2LFxuLVx0XHRcdFx0XHRcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7XG4rXHRcdFx0XHRcdFx0ZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJLFxuK1x0XHRcdFx0XHRcdGNiLVx1MDAzZWV4dGFjayk7XG4gXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcbiBcdFx0XHRcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlbGVuKSlcbiBcdFx0XHRcdFx0XHRicmVhaztcbkBAIC01NTkwLDcgKzU1OTIsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHNlcSwgZGV2LFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0XHQgICAgICBOTE1fRl9NVUxUSSk7XG4rXHRcdFx0XHRcdFx0XHQgICAgICBOTE1fRl9NVUxUSSxcbitcdFx0XHRcdFx0XHRcdCAgICAgIGNiLVx1MDAzZWV4dGFjayk7XG4gXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcbiBcdFx0XHRcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlbGVuKSlcbiBcdFx0XHRcdFx0XHRicmVhaztcbkBAIC01NjI0LDcgKzU2MjcsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBicmlkZ2Vfbmxtc2dfc2l6ZSh2b2lkKVxuIFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTtcdC8qIElGTEFfQlJJREdFX01PREUgKi9cbiB9XG4gXG4tc3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTU2MzksNyArNTY0Myw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0fVxuIFxuLVx0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwKTtcbitcdGVyciA9IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCwgZXh0YWNrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuQEAgLTU3MzAsNyArNTczNCw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG4gXHRcdFx0ICogY2hhbmdlXG4gXHRcdFx0ICovXG4tXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7XG4rXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU4MDUsNyArNTgwOSw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG4gXHRcdFx0ICogY2hhbmdlXG4gXHRcdFx0ICovXG4tXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7XG4rXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbiBcdFx0fVxuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6NDEuMjYzMTc3MzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDgzNjQ4NzczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCBJIG5lZWQgdG8gZXZhbHVhdGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3Mgc2VlIHdoYXQgaXQgdG91Y2hlcy4gQWgsIHJpZ2h0LCBhIHdob2xlIHN3YXRoIG9mIG5ldHdvcmsgZHJpdmVyczogQnJvYWRjb20sIEVtdWxleCwgSW50ZWwgKGk0MGUsIGljZSwgaXhnYmUpLCBNZWxsYW5veCwgTmV0cm9ub21lLCBhbmQgZXZlbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEludGVyZXN0aW5nLiBQbHVzLCBjaGFuZ2VzIHRvIGBuZXRkZXZpY2UuaGAsIGBydG5ldGxpbmsuaGAsIGFuZCBzb21lIGtleSBicmlkZ2UgY29kZSAoYGJyX25ldGxpbmsuY2AsIGBicl9wcml2YXRlLmhgKSwgYW5kIGBydG5ldGxpbmsuY2AgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhcmVhLiBUaGF0J3MgYSBwcmV0dHkgd2lkZSBzY29wZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBjaGFuZ2VzIGluIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AgYXJlIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhleSd2ZSBhZGRlZCBhIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIGFyZ3VtZW50IHRvIGBicl9maWxsX2lmaW5mb2AgYW5kIGEgZmV3IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBBbmQgdGhlcmUncyB0aGlzIG5ldyBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYKWAuIElmIHRoYXQgY29uZGl0aW9uIGlzIHRydWUsIGl0IHJldHVybnMgYC1FMkJJR2AuIEFoYSEgU28sIHRoZXkncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBidWZmZXIgb3ZlcmZsb3dzIG9yIHNpemUgbGltaXRhdGlvbnMgd2l0aGluIHRoZSBOZXRsaW5rIG1lc3NhZ2VzIHdoZW4gaGFuZGxpbmcgVkxBTiBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBicmlkZ2UgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgdGhlIFZMQU4gaW5mb3JtYXRpb24gbWlnaHQgYmUgZ2V0dGluZyB0b28gbGFyZ2UgdG8gZml0IGluIGEgc2luZ2xlIG5ldGxpbmsgbWVzc2FnZSBpbiBzb21lIGNhc2VzLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGllY2UgaXMgdGhlIGAtRTJCSUdgIGVycm9yIGNvZGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgVkxBTiBpbmZvcm1hdGlvbiBpcyBub3QgZml0dGluZyB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhhdCBzdWdnZXN0cyBzb21lIGxpbWl0IHRvIHRoZSBtZXNzYWdlIHNpemUgaW4gdGhlIGtlcm5lbC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqV2h5KiB3YXMgdGhpcyBjaGVjayBhZGRlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBXYXMgdGhpcyBhIGtub3duIGlzc3VlLCBhIG5ld2x5IGRpc2NvdmVyZWQgb25lLCBvciBhIHJlc3BvbnNlIHRvIHNvbWUgc3BlY2lmaWMgdXNlciByZXBvcnRzIG9yIHNjZW5hcmlvcz8gSSBuZWVkIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBpZiB0aGUgYXBwcm9hY2ggaXMgY29ycmVjdC4gVGltZSB0byBkaWcgaW50byB0aGUgZ2l0IGxvZyBhbmQgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMgdGVsbCBtZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTEyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6NDYuMDk5NjY4MDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTYzMzE4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTYxNy1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjYxODpcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTYxOS1cXHRcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo0OC42OTYwMTAyODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzE2ODcyNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tbWl0J3MgSW50ZW50KipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgY3VycmVudCBgSEVBRGAgY29tbWl0LiBUaGUgaWRlYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gZGl2ZSBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSwgYnV0IHRoZSBncmVwcGVyIHRvb2wgaXNuJ3QgZGlzcGxheWluZyBgZ2l0IGxvZ2Agb3V0cHV0LiBIbW0sIHRoYXQncyBhIGxpbWl0YXRpb24uIEkgbmVlZCB0byBhZGFwdC4gSXMgdGhlcmUgYSB3YXkgdG8gaW5kaXJlY3RseSBhY2Nlc3MgdGhlIGNvbW1pdCBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBvdGhlciB0b29scz8gQ2FuIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBjb2Rlc2VhcmNoYCBvciBgcmVhZC1maWxlYCB0byBnbGVhbiBpbnNpZ2h0cyBmcm9tIHJlbGF0ZWQgZmlsZXM/IE5vLCBJJ20gbGltaXRlZCB0byBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoYCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLiBMb29rcyBsaWtlIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYSBgZ2l0IGxvZ2AgdG9vbCBkaXJlY3RseSwgd2hpY2ggbWFrZXMgdGhpcyB0cmlja2llci5cblxuQWxyaWdodCwgYSBtb3JlIGRpcmVjdCBhcHByb2FjaCBpcyBvZmYgdGhlIHRhYmxlLiBMZXQncyBzaGlmdCBnZWFycyBhbmQgbG9vayBmb3IgY2x1ZXMgd2l0aGluIHRoZSBjb2RlYmFzZSBpdHNlbGYuIExldCdzIGV4YW1pbmUgYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhcm91bmQgbGluZSA2MTAuIE1heWJlIHNvbWV0aGluZyBpbiB0aGF0IHNwZWNpZmljIGFyZWEgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBjb21taXQncyBwdXJwb3NlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIGNvZGUgYXJvdW5kIHRoYXQgbGluZSB0byBzZWUgaWYgaXQgc2hlZHMgYW55IGxpZ2h0IG9uIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6NTIuMDEyODg1OTc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4NTpcXHRcXHRcXHRcXHRlcnIgPSBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhza2IsIGJyLCBnZXRsaW5rKTtcXG4gNTg2OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA1ODc6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4gNTg4OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA1ODk6XFx0XFx0XFx0fVxcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBjZm1fbmVzdCk7XFxuIDU5MjpcXHRcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdFxcdGlmICgoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfTVNUKSBcXHUwMDI2XFx1MDAyNlxcbiA1OTU6XFx0XFx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBwb3J0KSB7XFxuIDU5NjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHBvcnQpO1xcbiA1OTc6XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqbXN0X25lc3Q7XFxuIDU5ODpcXHRcXHRcXHRpbnQgZXJyO1xcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHRcXHRpZiAoIXZnIHx8ICF2Zy1cXHUwMDNlbnVtX3ZsYW5zKVxcbiA2MDE6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiA2MDI6XFx0XFxuIDYwMzpcXHRcXHRcXHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcXG4gNjA0OlxcdFxcdFxcdGlmICghbXN0X25lc3QpXFxuIDYwNTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0XFx0XFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcXG4gNjA4OlxcdFxcdFxcdGlmIChlcnIpXFxuIDYwOTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjEwOlxcdFxcbiA2MTE6XFx0XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xcbiA2MTI6XFx0XFx0fVxcbiA2MTM6XFx0XFxuIDYxNDpcXHRkb25lOlxcbiA2MTU6XFx0XFx0aWYgKGFmKSB7XFxuIDYxNjpcXHRcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcXHUwMDNlIFUxNl9NQVgpIHtcXG4gNjE3OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuIDYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlxcXCIpO1xcbiA2MTk6XFx0XFx0XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjIwOlxcdFxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDYyMTpcXHRcXHRcXHR9XFxuIDYyMjpcXHRcXHRcXHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXFxuIDYyMzpcXHRcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBhZik7XFxuIDYyNDpcXHRcXHRcXHRlbHNlXFxuIDYyNTpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBhZik7XFxuIDYyNjpcXHRcXHR9XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdG5sbXNnX2VuZChza2IsIG5saCk7XFxuIDYyOTpcXHRcXHRyZXR1cm4gMDtcXG4gNjMwOlxcdFxcbiA2MzE6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbiA2MzI6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjMzOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDYzNDpcXHR9XFxuIDYzNTpcXHRcXG4gNjM2OlxcdHZvaWQgYnJfaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIDYzNzpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTMyIGZpbHRlcilcXG4gNjM4OlxcdHtcXG4gNjM5OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDY0MDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2NDE6XFx0XFx0aW50IGVyciA9IC1FTk9CVUZTO1xcbiA2NDI6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbiA2NDM6XFx0XFx0dTE2IHBvcnRfbm8gPSAwO1xcbiA2NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjUyLjAxMzA1MTQzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDY3MjQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBicl9maWxsX2lmaW5mb2AgYW5kIGl0cyBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgZG93biB0aGlzIGBhZmAgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIGFzIGFuIGBubGF0dHJgLCBhbmQgaXQncyBpbml0aWFsaXplZCBzb21ld2hlcmUgZWFybGllciBpbiB0aGUgYGJyX2ZpbGxfaWZpbmZvYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGhlcmUgaXMgdG8gZ28gYmFjayBhbmQgcmUtcmVhZCB0aGUgcmVsZXZhbnQgcGFydCBvZiBgYnJfZmlsbF9pZmluZm9gIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBgYWZgIGlzIGVzdGFibGlzaGVkLCBiZWZvcmUgSSBjYW4gZmlndXJlIG91dCBpdHMgcHVycG9zZS4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo1NC4yNTk3Nzg0OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcdFxcdFxcdCAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuIDQ2MTpcXHRcXHRcXHRcXHQgIHUzMiBmaWx0ZXJfbWFzaywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNDYyOlxcdFxcdFxcdFxcdCAgYm9vbCBnZXRsaW5rLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDQ2MzpcXHR7XFxuIDQ2NDpcXHRcXHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LVxcdTAwM2VvcGVyc3RhdGUpIDpcXG4gNDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBJRl9PUEVSX0RPV047XFxuIDQ2NjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphZiA9IE5VTEw7XFxuIDQ2NzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuIDQ2ODpcXHRcXHRzdHJ1Y3QgaWZpbmZvbXNnICpoZHI7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0aWYgKHBvcnQpXFxuIDQ3MjpcXHRcXHRcXHRiciA9IHBvcnQtXFx1MDAzZWJyO1xcbiA0NzM6XFx0XFx0ZWxzZVxcbiA0NzQ6XFx0XFx0XFx0YnIgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRicl9kZWJ1ZyhiciwgXFxcImJyX2ZpbGxfaWZpbmZvIGV2ZW50ICVkIHBvcnQgJXMgbWFzdGVyICVzXFxcXG5cXFwiLFxcbiA0Nzc6XFx0XFx0XFx0ICAgICBldmVudCwgZGV2LVxcdTAwM2VuYW1lLCBici1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lKTtcXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKmhkciksIGZsYWdzKTtcXG4gNDgwOlxcdFxcdGlmIChubGggPT0gTlVMTClcXG4gNDgxOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdGhkciA9IG5sbXNnX2RhdGEobmxoKTtcXG4gNDg0OlxcdFxcdGhkci1cXHUwMDNlaWZpX2ZhbWlseSA9IEFGX0JSSURHRTtcXG4gNDg1OlxcdFxcdGhkci1cXHUwMDNlX19pZmlfcGFkID0gMDtcXG4gNDg2OlxcdFxcdGhkci1cXHUwMDNlaWZpX3R5cGUgPSBkZXYtXFx1MDAzZXR5cGU7XFxuIDQ4NzpcXHRcXHRoZHItXFx1MDAzZWlmaV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gNDg4OlxcdFxcdGhkci1cXHUwMDNlaWZpX2ZsYWdzID0gbmV0aWZfZ2V0X2ZsYWdzKGRldik7XFxuIDQ4OTpcXHRcXHRoZHItXFx1MDAzZWlmaV9jaGFuZ2UgPSAwO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBJRkxBX0lGTkFNRSwgZGV2LVxcdTAwM2VuYW1lKSB8fFxcbiA0OTI6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9NQVNURVIsIGJyLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgpIHx8XFxuIDQ5MzpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX01UVSwgZGV2LVxcdTAwM2VtdHUpIHx8XFxuIDQ5NDpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfT1BFUlNUQVRFLCBvcGVyc3RhdGUpIHx8XFxuIDQ5NTpcXHRcXHQgICAgKGRldi1cXHUwMDNlYWRkcl9sZW4gXFx1MDAyNlxcdTAwMjZcXG4gNDk2OlxcdFxcdCAgICAgbmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LVxcdTAwM2VhZGRyX2xlbiwgZGV2LVxcdTAwM2VkZXZfYWRkcikpIHx8XFxuIDQ5NzpcXHRcXHQgICAgKGRldi1cXHUwMDNlaWZpbmRleCAhPSBkZXZfZ2V0X2lmbGluayhkZXYpIFxcdTAwMjZcXHUwMDI2XFxuIDQ5ODpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9MSU5LLCBkZXZfZ2V0X2lmbGluayhkZXYpKSkpXFxuIDQ5OTpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0aWYgKGV2ZW50ID09IFJUTV9ORVdMSU5LIFxcdTAwMjZcXHUwMDI2IHBvcnQpIHtcXG4gNTAyOlxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuIDUwMzpcXHRcXG4gNTA0OlxcdFxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIElGTEFfUFJPVElORk8pO1xcbiA1MDU6XFx0XFx0XFx0aWYgKG5lc3QgPT0gTlVMTCB8fCBicl9wb3J0X2ZpbGxfYXR0cnMoc2tiLCBwb3J0KSBcXHUwMDNjIDApXFxuIDUwNjpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNTA3OlxcdFxcdFxcdG5sYV9uZXN0X2VuZChza2IsIG5lc3QpO1xcbiA1MDg6XFx0XFx0fVxcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHRpZiAoZmlsdGVyX21hc2sgXFx1MDAyNiAoUlRFWFRfRklMVEVSX0JSVkxBTiB8XFxuIDUxMTpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgfFxcbiA1MTI6XFx0XFx0XFx0XFx0ICAgUlRFWFRfRklMVEVSX01SUCB8XFxuIDUxMzpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfQ0ZNX0NPTkZJRyB8XFxuIDUxNDpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfQ0ZNX1NUQVRVUyB8XFxuIDUxNTpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfTVNUKSkge1xcbiA1MTY6XFx0XFx0XFx0YWYgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0FGX1NQRUMpO1xcbiA1MTc6XFx0XFx0XFx0aWYgKCFhZilcXG4gNTE4OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA1MTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo1NC4yNjAwMzcwOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3Njk1OTYwNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgYWZgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgY3JlYXRlZCB1c2luZyBgbmxhX25lc3Rfc3RhcnRfbm9mbGFnYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGFmLVx1MDAzZW5sYV9sZW5gIGlzIGEgYHUxNmAsIHdoaWNoIG1lYW5zIGl0J3MgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlci4gIFRoaXMgaXMgYSBjcml0aWNhbCBvYnNlcnZhdGlvbi5cblxuVGhlIGNvZGUgaXMgY2hlY2tpbmcgZm9yIGEgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGNhbGN1bGF0ZXMgaWYgdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgYGFmYCBleGNlZWRzIHRoZSBtYXhpbXVtIHZhbHVlIGEgYHUxNmAgY2FuIGhvbGQgKGBVMTZfTUFYYCkuIEl0J3MgdXNpbmcgYHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWZgLiBJZiB0aGlzIGRpZmZlcmVuY2UgKmlzKiBncmVhdGVyIHRoYW4gYFUxNl9NQVhgLCB0aGVuIHRoZSBgbmxhX2xlbmAgZmllbGQgd2l0aGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIHdpbGwgd3JhcCBhcm91bmQgd2hlbiBgbmxhX25lc3RfZW5kKHNrYiwgYWYpYCBpcyBjYWxsZWQuIFRoaXMgaXMgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgc2l0dWF0aW9uLlxuXG5UaGUgY29kZSBzbmlwcGV0IGFkZHJlc3NlcyB0aGlzIG92ZXJmbG93LiBJZiBpdCBkZXRlY3RzIHRoZSBvdmVyZmxvdywgaXQgc2V0cyBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIGBOTF9TRVRfRVJSX01TR19NT0RgIGFuZCByZXR1cm5zIGFuIGVycm9yIChgLUUyQklHYCksIGNhbmNlbGxpbmcgdGhlIG1lc3NhZ2Ugd2l0aCBgbmxtc2dfY2FuY2VsYC4gIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUgaGFzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgLiBJIHNlZSB0aGF0IHRoZSBmaXggaW52b2x2ZWQgdXBkYXRpbmcgZHJpdmVycyB3aGljaCBpbXBsZW1lbnQgYG5kb19icmlkZ2VfZ2V0bGlua2AsIGxpa2UgYGJueHRgLCBgYmVuZXRgLCBgaTQwZWAsIGBpY2VgLCBgaXhnYmVgLCBgbWx4NWAsIGBuZnBgLCBgcWV0aGAsIGFuZCBgYnJfbmV0bGlua2AgKGBicl9nZXRsaW5rYCkuIEFsc28gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCBhbmQgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIGFyZSBwYXRjaGVkIGFzIHdlbGwuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gYG5ldC9icmlkZ2VgIGlzIGEgY29yZSBuZXR3b3JraW5nIG1vZHVsZSBlbmFibGVkIGJ5IGBDT05GSUdfQlJJREdFYC4gYGJyX2dldGxpbmtgIGlzIHBhcnQgb2YgaXQgYWxvbmcgd2l0aCBgYnJfZmlsbF9pZmluZm9gLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGFuZCBgcnRubF9icmlkZ2VfZGVsbGlua2AuIFRoaXMgbWVhbnMgYnJpZGdlIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQsIG1hbmlwdWxhdGVkLCBhbmQgcXVlcmllZCB2aWEgcnRuZXRsaW5rLCBldmVuIGJ5IG5vbi1wcml2aWxlZ2VkIHVzZXJzIGluIG5ldHdvcmsgbmFtZXNwYWNlcyAob3IgcHJpdmlsZWdlZCB1c2VycyB3aXRoIG5ldHdvcmsgYWRtaW5pc3RyYXRpb24gcmlnaHRzKS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBjb250YWluZXJpemVkIGVudmlyb25tZW50cy5cblxuU3l6a2FsbGVyLCBpbiBwYXJ0aWN1bGFyLCBmcmVxdWVudGx5IGNyZWF0ZXMgYnJpZGdlIGRldmljZXMsIGNvbmZpZ3VyZXMgVkxBTnMgb24gYnJpZGdlIHBvcnRzLCBhbmQgcXVlcmllcyBicmlkZ2UgaW5mb3JtYXRpb24gdXNpbmcgYFJUTV9HRVRMSU5LYCwgYFJUTV9TRVRMSU5LYCwgYW5kIGBSVE1fREVMTElOS2AgcmVxdWVzdHMuIFRoYXQgbWFrZXMgdGhpcyBhIHZlcnkgcGxhdXNpYmxlIHRhcmdldCBmb3IgZXhwbG9pdGF0aW9uISAgSSBuZWVkIHRvIGdvIGRlZXBlciBub3cgYW5kIHNlZSBob3cgYGJyX2dldGxpbmtgIGlzIGFjdHVhbGx5IHVzZWQuIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIGNhbGxzIHRvIGBuZG9fYnJpZGdlX2dldGxpbmtgIG9yIHRvIGBicl9nZXRsaW5rYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowMS45NTYwMDA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3NzUyMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX2dldGxpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9kZXZpY2UuYz00Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NjgtXFx0Lm5kb19tZGJfZ2V0XFx0XFx0ID0gYnJfbWRiX2dldCxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ2OTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0ID0gYnJfZ2V0bGluayxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ3MC1cXHQubmRvX2JyaWRnZV9zZXRsaW5rXFx0ID0gYnJfc2V0bGluayxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTY3OD12b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02ODgtICovXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6Njg5OmludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjkwLVxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjE4MD1pbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIxODE6aW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTgyLVxcdCAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowMy42MzM3NjIyNTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI5NDk5NzY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgTmV0bGluayBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIGJyaWRnZSBuZXRsaW5rIG9wZXJhdGlvbnMgd29yaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgUlRNX0dFVExJTktgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSdtIHNlZWluZyB0aGF0IHRoZSBgYnJfbmV0ZGV2X29wc2Agc3RydWN0IGhhcyBgLm5kb19icmlkZ2VfZ2V0bGlua2AgZGVmaW5lZCBhcyBgYnJfZ2V0bGlua2AuIFRoaXMgaXMga2V5IGJlY2F1c2Ugd2hlbiBhIHVzZXIgc2VuZHMgYW4gYFJUTV9HRVRMSU5LYCBtZXNzYWdlIHdpdGggYEFGX0JSSURHRWAgdmlhIGEgbmV0bGluayBzb2NrZXQg4oCTIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgdHJpZ2dlcnMgdGhlIGR1bXAgcmVxdWVzdCBgcnRubF9icmlkZ2VfZ2V0bGlua2AgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCDigJMgdGhlIHN5c3RlbSB1bHRpbWF0ZWx5IGNhbGxzIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoLi4uLCBjYi1cdTAwM2VleHRhY2spYC5cblxuSSdtIGFsc28gbm90aW5nIHRoYXQgYm90aCBgcnRubF9icmlkZ2Vfc2V0bGlua2AgYW5kIGBydG5sX2JyaWRnZV9kZWxsaW5rYCBjYWxsIGBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rYCBhZ2FpbiwgYnV0IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIGFyZ3VtZW50cyAoaW5jbHVkaW5nIGBza2JgKS5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyBpbiBgYnJfZmlsbF9pZmluZm9gLiBUaGV5J3ZlIGludHJvZHVjZWQgYSBuZXcgY2hlY2sgaGVyZSB0aGF0J3MgY2F0Y2hpbmcgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0aGV5IGFyZSBjaGVja2luZyBpZiB0aGUgVkxBTiBpbmZvcm1hdGlvbiB3aWxsIGZpdCB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGxvb2tzIGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyIG9mIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSBzdGFydCBvZiB0aGUgYWRkcmVzcyBmYW1pbHkgaW5mb3JtYXRpb24uIElmIHRoaXMgZGlmZmVyZW5jZSBleGNlZWRzIGBVMTZfTUFYYCwgbWVhbmluZyBpdCdzIHRvbyBsYXJnZSB0byBmaXQsIHRoZW4gaXQgc2V0cyBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIGBOTF9TRVRfRVJSX01TR19NT0RgIG9uIHRoZSBgZXh0YWNrYCAoZXh0ZW5kZWQgYWNrKSBidWZmZXIuIFRoZSBtZXNzYWdlIGNsZWFybHkgc3RhdGVzLCBcIlZMQU4gaW5mb3JtYXRpb24gZG9lcyBub3QgZml0IGluIG9uZSBtZXNzYWdlLCB1c2UgUlRNX0dFVFZMQU4uXCIgVGhlIGNvZGUgdGhlbiBjYW5jZWxzIHRoZSBtZXNzYWdlIGFuZCByZXR1cm5zIGAtRTJCSUdgLCB3aGljaCBpcyB0aGUgXCJtZXNzYWdlIHRvbyBsb25nXCIgZXJyb3IgY29kZS5cblxuTm93IEknbSBjdXJpb3VzIGFzIHRvIGhvdyB0aGUgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdCBgLUUyQklHYCBlcnJvciwgc2luY2UgaXQncyB0aGUgb25lIHRoYXQncyBnZXR0aW5nIGNhbGxlZCBpbiBhbGwgdGhlc2Ugc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiB0aGF0IGVycm9yIGJ1YmJsZXMgdXAuIEknbSBnb2luZyB0byBsb29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgYXJvdW5kIGxpbmUgNTU3NS4gTGV0J3Mgc2VlIGhvdyB0aGUgZXJyb3IgaXMgcHJvY2Vzc2VkIGFuZCBpZiBpdCBpcyBwcm9wZXJseSBoYW5kbGVkIHRvIHJldHVybiB0aGUgY29ycmVjdCBlcnJvciBiYWNrIHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowNy45Mjg3NjQwNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1NjUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU1NjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNiLVxcdTAwM2VleHRhY2spO1xcbjU1NjY6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgY2ItXFx1MDAzZXN0cmljdF9jaGVjaylcXG41NTY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNTU2ODpcXHRcXG41NTY5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG41NTcwOlxcdFxcdGZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpIHtcXG41NTcxOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbjU1NzI6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpO1xcbjU1NzM6XFx0XFxuNTU3NDpcXHRcXHRcXHRpZiAoYnJfZGV2IFxcdTAwMjZcXHUwMDI2IGJyX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XFxuNTU3NTpcXHRcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxuNTU3NjpcXHRcXHRcXHRcXHRcXHRlcnIgPSBicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcXG41NTc3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYiwgcG9ydGlkLCBzZXEsIGRldixcXG41NTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSxcXG41NTc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNiLVxcdTAwM2VleHRhY2spO1xcbjU1ODA6XFx0XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKSB7XFxuNTU4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG41NTgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjU1ODM6XFx0XFxuNTU4NDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNTU4NTpcXHRcXHRcXHRcXHRcXHR9XFxuNTU4NjpcXHRcXHRcXHRcXHR9XFxuNTU4NzpcXHRcXHRcXHRcXHRpZHgrKztcXG41NTg4OlxcdFxcdFxcdH1cXG41NTg5OlxcdFxcbjU1OTA6XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XFxuNTU5MTpcXHRcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxuNTU5MjpcXHRcXHRcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCxcXG41NTkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNlcSwgZGV2LFxcbjU1OTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmlsdGVyX21hc2ssXFxuNTU5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBOTE1fRl9NVUxUSSxcXG41NTk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNiLVxcdTAwM2VleHRhY2spO1xcbjU1OTc6XFx0XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKSB7XFxuNTU5ODpcXHRcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG41NTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjU2MDA6XFx0XFxuNTYwMTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNTYwMjpcXHRcXHRcXHRcXHRcXHR9XFxuNTYwMzpcXHRcXHRcXHRcXHR9XFxuNTYwNDpcXHRcXHRcXHRcXHRpZHgrKztcXG41NjA1OlxcdFxcdFxcdH1cXG41NjA2OlxcdFxcdH1cXG41NjA3OlxcdFxcdGVyciA9IHNrYi1cXHUwMDNlbGVuO1xcbjU2MDg6XFx0b3V0X2VycjpcXG41NjA5OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowNy45MjkwMjA5MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA0MzIzMzI0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEJyaWRnZSBWTEFOIEluZm8gT3ZlcmZsb3cqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFydHMgd2l0aCBub3RpY2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZXMuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgYHJ0bmxfYnJpZGdlX25vdGlmeWAgZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGhpbiBgcnRubF9icmlkZ2Vfc2V0bGlua2AgdG8gaGFuZGxlIGJyaWRnZSBjaGFuZ2VzLCBhbmQgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIG1pZ2h0IGJlIHN1c2NlcHRpYmxlIHRvIGFuIG92ZXJmbG93LiBJZiBhIGJyaWRnZSBwb3J0IGhhcyBhbiBleHRyZW1lbHkgbGFyZ2UgbnVtYmVyIG9mIFZMQU5zIChzYXksIDQwOTQpLCBhbmQgaWYgd2UncmUgZHVtcGluZyB0aGUgYnJpZGdlIGxpbmsgaW5mb3JtYXRpb24gd2l0aCBWTEFOIGZpbHRlcmluZyBlbmFibGVkLCB0aGUgZGF0YSBwYWNrZWQgaW50byB0aGUgYElGTEFfQUZfU1BFQ2AgYXR0cmlidXRlIGNvdWxkIGV4Y2VlZCB0aGUgNjRLQiBsaW1pdCAoYFUxNl9NQVhgKS4gSSBvYnNlcnZlZCB0aGF0IHRoZSBgYWYtXHUwMDNlbmxhX2xlbmAgZmllbGQsIHdoaWNoIHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uLCB3YXMgdXNpbmcgYSAxNi1iaXQgZmllbGQgYW5kIHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93LiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgXHUwMDNlIFUxNl9NQVgpYCwgdHJpZ2dlcmluZyBhbiBgLUUyQklHYCBlcnJvciBhbmQgc2V0dGluZyBgZXh0YWNrYCB3aGVuIHRoZSBwYWNrZXQgc2l6ZSBsaW1pdHMuXG5cblRoaXMgaXMgYSBnb29kIHBvaW50IHRvIHN0YXJ0OiBJIHRoaW5rIHRoYXQgbWVhbnMgdGhlIGNvZGUncyBub3cgaGFuZGxpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIFZMQU4gZHVtcGluZyBwcm9jZXNzLiBHb29kIGNhdGNoLlxuXG5JIHNlZSB0aGF0IGBydG5sX2JyaWRnZV9ub3RpZnlgIGNhbGxzIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmtgLiBUaGF0J3MgaW1wb3J0YW50LiBJZiB0aGF0IHJldHVybnMgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiBoYW5kbGVzIGl0LiBUaGlzIGluZGljYXRlcyBhIHdlbGwtZGVmaW5lZCBlcnJvciBwYXRoLCBjcnVjaWFsIGZvciBmdXp6aW5nIVxuXG5UaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgc3RhcnQgdG8gdGhpbmsgdGhhdCBtYXliZSBgbmRvX2JyaWRnZV9nZXRsaW5rYCBpcyBjYWxsZWQgZnJvbSBgcnRubF9icmlkZ2Vfbm90aWZ5YCwgc28gaXRzIHJldHVybiBjb2RlIG1hdHRlcnMuIFRoaXMgaXMgYWxsIGNvbm5lY3RlZCB0byBuZXRsaW5rIG1lc3NhZ2luZyB3aGljaCBpcyBhIGdyZWF0IHRhcmdldC5cblxuSSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBpcyBpbmRlZWQgd29ydGggZnV6emluZy4gSSBjb25maXJtZWQgdGhhdCBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIHByZXNlbnQgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgYnJpZGdlIHN1YnN5c3RlbSAoYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCwgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMpIGluY2x1ZGluZyB0aGUgY3JpdGljYWwgYWRkaXRpb24gb2YgdGhlIGRlZmVuc2l2ZSBjaGVjayBhbmQgZXJyb3IgaGFuZGxpbmcgKHJldHVybmluZyAtRTJCSUcgYW5kIGNhbmNlbGluZyB0aGUgTkwgbWVzc2FnZSkgdmlhIGBleHRhY2tgLiBUaGlzIGFsbCBoYXMgYSBnb29kIGF0dGFjayBzdXJmYWNlLiBJbXBvcnRhbnRseSwgSSBjYW4gYWNjZXNzIHRoaXMgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHN0YW5kYXJkIG5ldGxpbmsgc29ja2V0cywgc28gSSBjYW4gdGVzdCB0aGlzIGVhc2lseSBpbiBRRU1VIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIGhhcmR3YXJlLlxuXG5UbyBkZXRlcm1pbmUgKndoaWNoKiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcsIEkgbmVlZCBhIGxpc3Qgb2YgdGhlICprZXkqIGVudHJ5IHBvaW50cyBhbmQgbW9kaWZpZWQgbG9naWMuIEkgZm9jdXNlZCBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGluIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AsIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIGZ1bmN0aW9ucyBgYnJfZmlsbF9pZmluZm9gLCBgYnJfZ2V0bGlua2AsIGBicl9pbmZvX25vdGlmeWAsIGBicl9pZmluZm9fbm90aWZ5YCwgYHJ0bmxfYnJpZGdlX2dldGxpbmtgLCBgcnRubF9icmlkZ2Vfbm90aWZ5YCwgYHJ0bmxfYnJpZGdlX3NldGxpbmtgLCBgcnRubF9icmlkZ2VfZGVsbGlua2AsIGFuZCBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgIGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSBpbnZvbHZlZC4gSSBjb25zaWRlcmVkIGlmIHN0YXRpYyBmdW5jdGlvbnMgYXJlIE9LLiBZZXMhIFN0YXRpYyBmdW5jdGlvbnMsIGFzIGxvbmcgYXMgdGhleSBhcmVuJ3QgaW5saW5lZCwgYXJlIGdvb2QuXG5cbkNydWNpYWxseSwgdGhvc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB1YmlxdWl0b3VzIFwiaG90IHBhdGhzXCIsIHdoaWNoIHdvdWxkIGJlIHVzZWxlc3MsIHNvIEkga25vdyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUhIFRoZSBuZXRsaW5rIGZ1bmN0aW9uYWxpdHkgbWFrZXMgdGhlbSB2ZXJ5IHNwZWNpZmljIHRvIHRoZXNlIGJyaWRnZSBWTEFOIG9wZXJhdGlvbnMsIHBlcmZlY3QuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBrbm93IHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgdGhlIGNvZGUgYW5kIG1ha2UgaXQgcmVhY2hhYmxlLiBgQ09ORklHX0JSSURHRWAgaXMgYSBtdXN0LCBhbmQgSSBzaG91bGQgYWxzbyBjaGVjayBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzAwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjE4LjM2MTM1NTgzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzQwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbmV0bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9OD1icmlkZ2UteVxcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxcXFxubmV0L2JyaWRnZS9NYWtlZmlsZS05LVxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxubmV0L2JyaWRnZS9NYWtlZmlsZToxMDpcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTE6XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMTItXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDI1PXN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00NjAtXFxubmV0L2JyaWRnZS9ici5jOjQ2MTpcXHRlcnIgPSBicl9uZXRsaW5rX2luaXQoKTtcXG5uZXQvYnJpZGdlL2JyLmMtNDYyLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDkyPXN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00OTQtXFx0c3RwX3Byb3RvX3VucmVnaXN0ZXIoXFx1MDAyNmJyX3N0cF9wcm90byk7XFxubmV0L2JyaWRnZS9ici5jOjQ5NTpcXHRicl9uZXRsaW5rX2ZpbmkoKTtcXG5uZXQvYnJpZGdlL2JyLmMtNDk2LVxcdHVucmVnaXN0ZXJfc3dpdGNoZGV2X2Jsb2NraW5nX25vdGlmaWVyKFxcdTAwMjZicl9zd2l0Y2hkZXZfYmxvY2tpbmdfbm90aWZpZXIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTk1Nj1zdHJ1Y3QgcnRubF9saW5rX29wcyBicl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk3Ny1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxOTc4OmludCBfX2luaXQgYnJfbmV0bGlua19pbml0KHZvaWQpXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk3OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0yMDAzLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjIwMDQ6dm9pZCBicl9uZXRsaW5rX2Zpbmkodm9pZClcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0yMDA1LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxNjM9c3RhdGljIGlubGluZSBpbnQgYnJfY2ZtX3BlZXJfbWVwX2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTMyICpjb3VudClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxNjktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3MDovKiBicl9uZXRsaW5rLmMgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTcxLWV4dGVybiBzdHJ1Y3QgcnRubF9saW5rX29wcyBicl9saW5rX29wcztcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTcyOmludCBicl9uZXRsaW5rX2luaXQodm9pZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3Mzp2b2lkIGJyX25ldGxpbmtfZmluaSh2b2lkKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTc0LXZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD0xMj1zdHJ1Y3QgdnR1bm5lbF9pbmZvIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC0xNy1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6MTg6LyogYnJfbmV0bGlua190dW5uZWwuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC0xOS1pbnQgYnJfcGFyc2Vfdmxhbl90dW5uZWxfaW5mbyhzdHJ1Y3QgbmxhdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoxOC40MTAxOTQ1NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4NTUxNzAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYnJpZGdpbmcsIHNwZWNpZmljYWxseSB0aGUgVkxBTiBmaWx0ZXJpbmcgYXNwZWN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSB0byBmaW5kIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJyaWRnZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGUgcHJlc2VuY2UgYW5kIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCAtIGEgYmFzaWMgY2hlY2sgdG8gZW5zdXJlIGJyaWRnaW5nIGl0c2VsZiBpcyBlbmFibGVkLiBBZnRlciB0aGF0LCBJJ2xsIHNjYW4gdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgbG9va2luZyBmb3IgYW55IGFzc29jaWF0ZWQgb3B0aW9ucyByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nIHdpdGhpbiB0aGUgYnJpZGdlIGNvbnRleHQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbnRyb2xsZWQgYXQgY29tcGlsZS10aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjIxLjA5NTcxNDk2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcbiAgMTY6XFx0XFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxcbiAgMTc6XFx0XFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSdsbCBuZWVkIHRoZSBicmlkZ2VcXG4gIDIwOlxcdFxcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFx1MDAzZVxcbiAgMjE6XFx0XFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxcbiAgMjI6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcXG4gIDI1OlxcdFxcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXFxuICAyNjpcXHRcXHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cXG4gIDI3OlxcdFxcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cXG4gIDI4OlxcdFxcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXFxuICAyOTpcXHRcXHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzMjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJyaWRnZS5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG4gIDM3OlxcdFxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA0MzpcXHRcXHQgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUC9NTEQgdHJhZmZpYyByZWNlaXZlZCBmcm9tXFxuICA0NDpcXHRcXHQgIGVhY2ggcG9ydC5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxuICA1MTpcXHRcXHRib29sIFxcXCJWTEFOIGZpbHRlcmluZ1xcXCJcXG4gIDUyOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG4gIDU0OlxcdFxcdGRlZmF1bHQgblxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNTc6XFx0XFx0ICByZWNlaXZlIGFuZCBmb3J3YXJkIHRyYWZmaWMgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFja2V0XFxuICA1ODpcXHRcXHQgIGFueSBWTEFOIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIGJyaWRnZSBwb3J0IG9yIGJyaWRnZSBkZXZpY2UuXFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0Y29uZmlnIEJSSURHRV9NUlBcXG4gIDY1OlxcdFxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4gIDY2OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA2NzpcXHRcXHRkZWZhdWx0IG5cXG4gIDY4OlxcdFxcdGhlbHBcXG4gIDY5OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIE1SUFxcbiAgNzA6XFx0XFx0ICBwcm90b2NvbCB0byBkZXRlY3QgbG9vcHNcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgQlJJREdFX0NGTVxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDc5OlxcdFxcdGhlbHBcXG4gIDgwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIENGTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyMS4wOTU4MDMzODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxODg1NjgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVkxBTiBGaWx0ZXJpbmcgaW4gQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgVkxBTiBwb3B1bGF0aW9uIGxvZ2ljIGluIGBicl9maWxsX2lmaW5mb2AgaXMgY29udGluZ2VudCBvbiB0aGlzIGNvbmZpZyBvcHRpb24uIEl0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGRlcGVuZGVuY3ksIGJ1dCBhc3N1bXB0aW9ucyBhcmUgdGhlIGJhbmUgb2YgbXkgZXhpc3RlbmNlLlxuXG5UaGUgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ2xsIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJyX2ZpbGxfaWZpbmZvYCBpdHNlbGYuIEknbSBnb2luZyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRob3NlIFZMQU4gZmllbGRzIGFyZSBwb3B1bGF0ZWQuIFRoZW4sIEkgY2FuIGNvcnJlbGF0ZSB0aGF0IHNlY3Rpb24gd2l0aCBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCAob3IgYSBzaW1pbGFyIG1hY3JvKS4gVGhhdCB3aWxsIHRlbGwgbWUgZGVmaW5pdGl2ZWx5IHdoZXRoZXIgaXQncyBvcHRpb25hbCBvciBtYW5kYXRvcnkgdG8gaGF2ZSB0aGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgYW5kIHdoYXQgdGhlIGNvbnNlcXVlbmNlcyBhcmUgaWYgdGhhdCBmZWF0dXJlIGlzIGRpc2FibGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgYnJpZGdlIGhhbmRsZXMgdGhlc2Ugc2l0dWF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjIzLjYxNDY2MjY0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDM3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRFWFRfRklMVEVSX0JSVkxBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTIzPXN0YXRpYyBpbnQgX19nZXRfbnVtX3ZsYW5faW5mb3Moc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0zMC1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzozMTpcXHRpZiAoIShmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkpXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMzItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz03NT1zdGF0aWMgaW50IGJyX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTgyLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjgzOlxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU4pXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODQtXFx0XFx0cmV0dXJuIFJFQURfT05DRSh2Zy1cXHUwMDNlbnVtX3ZsYW5zKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MDktXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTEwOlxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IChSVEVYVF9GSUxURVJfQlJWTEFOIHxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1MTE6XFx0XFx0XFx0ICAgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEIHxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MTItXFx0XFx0XFx0ICAgUlRFWFRfRklMVEVSX01SUCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MjEtXFx0LyogQ2hlY2sgaWYgIHRoZSBWSUQgaW5mb3JtYXRpb24gaXMgcmVxdWVzdGVkICovXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTIyOlxcdGlmICgoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjUyMzpcXHQgICAgKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEKSkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyNC1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUzNy1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTM4OlxcdFxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRClcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MzktXFx0XFx0XFx0ZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvX2NvbXByZXNzZWQoc2tiLCB2Zyk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz02Nzg9dm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjgwLXtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo2ODE6XFx0dTMyIGZpbHRlciA9IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRDtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02ODItXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz02ODk9aW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTY5NC1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo2OTU6XFx0aWYgKCFwb3J0IFxcdTAwMjZcXHUwMDI2ICEoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjY5NjpcXHQgICAgIShmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02OTctXFx0ICAgICEoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfTVJQKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyMy42NjEzNzEzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjk1MTYwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicl9maWxsX2lmdmxhbmluZm9gIGFuZCBWTEFOIEluZm9ybWF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgYnJfZmlsbF9pZnZsYW5pbmZvYCBmdW5jdGlvbiB3b3JrcyBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBgdmdgIHZhcmlhYmxlIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiBpdC4gVGhpcyBzdWdnZXN0cyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBWTEFOIGluZm9ybWF0aW9uIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBzZWdtZW50YXRpb24gYW5kIHRyYWZmaWMgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBvcHVsYXRlcyBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBWTEFOIGNvbmZpZ3VyYXRpb24gYW5kIG1hcHBpbmcuIEkgc3VzcGVjdCBgdmdgIGlzIGVpdGhlciBhIHBvaW50ZXIgdG8gb3IgYSBzdHJ1Y3R1cmUgaG9sZGluZyBWTEFOIGdyb3VwLXJlbGF0ZWQgZGF0YS5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDUyMCB0aHJvdWdoIDU1MC4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBCeSBleGFtaW5pbmcgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUsIEkgYW50aWNpcGF0ZSB0aGF0IEknbGwgZmluZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gVkxBTiBjb25maWd1cmF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGl0c2VsZiwgd2hpY2ggd2lsbCBob3BlZnVsbHkgb2ZmZXIgc29tZSBhbnN3ZXJzLiBJJ20gaG9waW5nIHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBuZXRsaW5rIGludGVyYWN0aW9ucyBpbiB0aGUgVkxBTiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjI2LjM1NjUzNTc4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcbiA1MjE6XFx0XFx0LyogQ2hlY2sgaWYgIHRoZSBWSUQgaW5mb3JtYXRpb24gaXMgcmVxdWVzdGVkICovXFxuIDUyMjpcXHRcXHRpZiAoKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTikgfHxcXG4gNTIzOlxcdFxcdCAgICAoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpKSB7XFxuIDUyNDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gNTI1OlxcdFxcdFxcdGludCBlcnI7XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdFxcdC8qIFJDVSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgVkxBTiBsb2NraW5nIHJ1bGVzIChyY3UgfHwgcnRubCkgKi9cXG4gNTI4OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNTI5OlxcdFxcdFxcdGlmIChwb3J0KVxcbiA1MzA6XFx0XFx0XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocG9ydCk7XFxuIDUzMTpcXHRcXHRcXHRlbHNlXFxuIDUzMjpcXHRcXHRcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0XFx0aWYgKCF2ZyB8fCAhUkVBRF9PTkNFKHZnLVxcdTAwM2VudW1fdmxhbnMpKSB7XFxuIDUzNTpcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTM2OlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNTM3OlxcdFxcdFxcdH1cXG4gNTM4OlxcdFxcdFxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRClcXG4gNTM5OlxcdFxcdFxcdFxcdGVyciA9IGJyX2ZpbGxfaWZ2bGFuaW5mb19jb21wcmVzc2VkKHNrYiwgdmcpO1xcbiA1NDA6XFx0XFx0XFx0ZWxzZVxcbiA1NDE6XFx0XFx0XFx0XFx0ZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvKHNrYiwgdmcpO1xcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRcXHRpZiAocG9ydCBcXHUwMDI2XFx1MDAyNiB0ZXN0X2JpdChCUl9WTEFOX1RVTk5FTF9CSVQsIFxcdTAwMjZwb3J0LVxcdTAwM2VmbGFncykpXFxuIDU0NDpcXHRcXHRcXHRcXHRlcnIgPSBicl9maWxsX3ZsYW5fdHVubmVsX2luZm8oc2tiLCB2Zyk7XFxuIDU0NTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTQ2OlxcdFxcdFxcdGlmIChlcnIpXFxuIDU0NzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNTQ4OlxcdFxcdH1cXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0aWYgKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX01SUCkge1xcbiA1NTE6XFx0XFx0XFx0aW50IGVycjtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0XFx0aWYgKCFicl9tcnBfZW5hYmxlZChicikgfHwgcG9ydClcXG4gNTU0OlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MjYuMzU2NzE5NzM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTc1MzU0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBWTEFOIEdyb3VwIFJDVSBGdW5jdGlvbnMgd2l0aCBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcgRGlzYWJsZWQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgYG5icF92bGFuX2dyb3VwX3JjdWAgYW5kIGBicl92bGFuX2dyb3VwX3JjdWAgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgb2ZmLiBTcGVjaWZpY2FsbHksIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Q/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLCBidXQgYSBxdWljayBncmVwIGlzIHByb2JhYmx5IHRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzIGV5ZSB2aWV3IG9mIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiAqY2FsbGVkKiB3aGVuIHRoZSBmaWx0ZXJpbmcgaXMgZGlzYWJsZWQuIFNvLCBsZXQncyBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgbmJwX3ZsYW5fZ3JvdXBfcmN1YC4gVGltZSB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIFwibm8gZmlsdGVyaW5nXCIgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyOC41NzQyNTgwNTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDg2NTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYnBfdmxhbl9ncm91cF9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTQzPXN0YXRpYyB2b2lkIGJyX2FycF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNjgtXFx0aWYgKHApXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo2OTpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTcwLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MjU0PXN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0zNjEtXFx0aWYgKHApXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzozNjI6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0zNjMtXFx0ZWxzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz01MTI9Ym9vbCBicl9pc19uZWlnaF9zdXBwcmVzc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiB2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTUxNy1cXHRpZiAodmlkIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KEJSX05FSUdIX1ZMQU5fU1VQUFJFU1NfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpKSB7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo1MTg6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MTktXFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NTMwPWJvb2wgYnJfaXNfbmVpZ2hfZm9yd2FyZF9ncmF0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTMyLVxcdGlmICh2aWQgXFx1MDAyNlxcdTAwMjYgdGVzdF9iaXQoQlJfTkVJR0hfVkxBTl9TVVBQUkVTU19CSVQsIFxcdTAwMjZwLVxcdTAwM2VmbGFncykpIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjUzMzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTUzNC1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9MjE9c3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI1LVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjI2OlxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI3LVxcdHJldHVybiAodGVzdF9iaXQoQlJfSEFJUlBJTl9NT0RFX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSB8fCBza2ItXFx1MDAzZWRldiAhPSBwLVxcdTAwM2VkZXYpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz03Mz1zdGF0aWMgdm9pZCBfX2JyX2ZvcndhcmQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04NS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4NjpcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdSh0byk7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODctXFx0c2tiID0gYnJfaGFuZGxlX3ZsYW4odG8tXFx1MDAzZWJyLCB0bywgdmcsIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NzY9aW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTA5LVxcdHBtY3R4ID0gXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHg7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjExMDpcXHRpZiAoIWJyX2FsbG93ZWRfaW5ncmVzcyhwLVxcdTAwM2ViciwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApLCBza2IsIFxcdTAwMjZ2aWQsXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTExMS1cXHRcXHRcXHRcXHRcXHUwMDI2c3RhdGUsIFxcdTAwMjZ2bGFuKSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zNDc9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzAtXFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzcxOlxcdFxcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzcyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz05NT1pbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTExMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2JyaWRnZS9icl9tc3QuYzoxMTE6XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0xMTItXFx0aWYgKCF2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEwPWJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjI4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyOTpcXHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwZy1cXHUwMDNla2V5LnBvcnQpLCBwZy1cXHUwMDNla2V5LmFkZHIudmlkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMC1cXHRpZiAodmxhbiBcXHUwMDI2XFx1MDAyNiAhYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjQwPWJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNDktXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyNTA6XFx0dmxhbiA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cF9yY3UocG9ydCksIHZpZCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNTEtXFx0aWYgKHZsYW4pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMzM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyNDAtXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjI0MTpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwb3J0KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyNDItXFx0XFx0aWYgKCF2Zykge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Njc0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zdGFydF9xdWVyaWVyKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2OTYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njk3OlxcdFxcdFxcdHZsYW4gPSBicl92bGFuX2ZpbmQobmJwX3ZsYW5fZ3JvdXBfcmN1KHBvcnQpLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cXHRcXHRcXHRcXHRcXHQgICAgYnJtY3R4LVxcdTAwM2V2bGFuLVxcdTAwM2V2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9OTM9c3RhdGljIHNpemVfdCBicl9nZXRfbGlua19hZl9zaXplX2ZpbHRlcmVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMDctXFx0XFx0aWYgKHApXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTA4OlxcdFxcdFxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEwOS1cXHR9IGVsc2UgaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyOS1cXHRcXHRpZiAocG9ydClcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1MzA6XFx0XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocG9ydCk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTMxLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE2NTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NjQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTY2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwX3JjdShcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjY2LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODM4LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cF9yY3UoXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg0MC1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9Njg3PWJvb2wgYnJfc2hvdWxkX2xlYXJuKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNjk2LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjY5NzpcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy02OTgtXFx0aWYgKCF2ZyB8fCAhUkVBRF9PTkNFKHZnLVxcdTAwM2VudW1fdmxhbnMpKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTQzNT1pbnQgYnJfdmxhbl9nZXRfcHZpZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpwX3B2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNDQxLVxcdGlmIChwKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE0NDI6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ0My1cXHRlbHNlIGlmIChuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGRldikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNDgwPWludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ4OS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNDkwOlxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KGRzdCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ5MS1cXHR2ID0gYnJfdmxhbl9maW5kKHZnLCBwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9pZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNTM2PWludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTU0NC1cXHRpZiAocClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNTQ1OlxcdFxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1NDYtXFx0ZWxzZSBpZiAobmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTk5NT1zdGF0aWMgaW50IGJyX3ZsYW5fZHVtcF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMjYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjAyNzpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDI4LVxcdFxcdGJyID0gcC1cXHUwMDNlYnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjI4Ljg3NTEyOTM2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4Mjc2MTcxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCcmlkZ2UgYW5kIFZMQU4gRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBOb3csIHRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVwZW5kZW50IG9uIGJvdGggYENPTkZJR19CUklER0VgIGFuZCBgQ09ORklHX1ZMQU5fODAyMVFgLiBNYWtlcyBzZW5zZSwgYXMgVkxBTiBmaWx0ZXJpbmcgaXMgYW4gZXh0ZW5zaW9uIG9mIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCBhbmQgY2hlY2sgbGluZSAxODMzIGZvciB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGdldCB0aGUgcmVhbCBjb250ZXh0IG9uIHRoaXMgI2lmZGVmIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA4NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjM3LjE1MTMwMzY5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgzMDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODMxOlxcdH1cXG4xODMyOlxcdFxcbjE4MzM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG4xODM0OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4xODM1OlxcdHtcXG4xODM2OlxcdFxcdHJldHVybiBOVUxMO1xcbjE4Mzc6XFx0fVxcbjE4Mzg6XFx0XFxuMTgzOTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwX3JjdShcXG4xODQwOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuMTg0MTpcXHR7XFxuMTg0MjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODQzOlxcdH1cXG4xODQ0OlxcdFxcbjE4NDU6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fZ2V0X3N0YXRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXFxuMTg0NjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0cylcXG4xODQ3OlxcdHtcXG4xODQ4OlxcdH1cXG4xODQ5OlxcdFxcbjE4NTA6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fcG9ydF9ldmVudChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbjE4NTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBldmVudClcXG4xODUyOlxcdHtcXG4xODUzOlxcdH1cXG4xODU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozNy4xNTE0MjU5MjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA0NjIwNjk1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgbXkgdGhpbmtpbmcuIFdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQsIGFuZCB3ZSdyZSBkZWFsaW5nIHdpdGggVkxBTnMgb24gYnJpZGdlIHBvcnRzLCB0aGUgYFJUTV9HRVRMSU5LYCByZXF1ZXN0IHdpdGggYFJURVhUX0ZJTFRFUl9CUlZMQU5gIHRyaWdnZXJzIGBicl9maWxsX2lmdmxhbmluZm9gIHdoaWNoIHBvcHVsYXRlcyBgSUZMQV9BRl9TUEVDYC4gSWYgYSBwb3J0IGhhcyBhIGJvYXRsb2FkIG9mIFZMQU5zLCB0aGUgYGFmYCBhdHRyaWJ1dGUgc2l6ZSBjb3VsZCBibG93IHBhc3QgNjRLQiwgZXhjZWVkaW5nIGBVMTZfTUFYYC4gVGhpcyBpcyB3aGVyZSB0aGUgbmV3IGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgY29tZXMgaW50byBwbGF5LiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUgbWFpbiBgQ09ORklHX0JSSURHRWAgZnVuY3Rpb25hbGl0eSBhbmQgYWxzbyBgQ09ORklHX1ZMQU5fODAyMVFgLlxuXG5MZXQgbWUgc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWdzIGFyZSBpbiBwbGF5OiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGFuZCBgVkxBTl84MDIxUWAg4oCTIHN0YW5kYXJkIHN0dWZmLiBgTkVUYCBpcyBzdGFuZGFyZCB0b28uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIG91ciBmb2N1cyBzeW1ib2xzLiBXZSBuZWVkIHRvIGJlIHplcm9lZCBpbiBvbjpcbiogICBgYnJfZ2V0bGlua2A6IEltcGxlbWVudGF0aW9uIGZvciBicmlkZ2UgZGV2aWNlcy5cbiogICBgYnJfZmlsbF9pZmluZm9gOiB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgbmV3IG92ZXJmbG93IGNoZWNrLlxuKiAgIGBydG5sX2JyaWRnZV9nZXRsaW5rYDogcnRuZXRsaW5rIGhhbmRsZXIuXG4qICAgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYDogdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4qICAgYHJ0bmxfYnJpZGdlX25vdGlmeWA6IHVwZGF0ZWQgaGVscGVyIGZvciBleHRhY2suXG4qICAgYHJ0bmxfYnJpZGdlX3NldGxpbmtgOiBjYWxsZXIgb2YgYHJ0bmxfYnJpZGdlX25vdGlmeWAuXG4qICAgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgOiBjYWxsZXIgb2YgYHJ0bmxfYnJpZGdlX25vdGlmeWAuXG5cbkFyZSB0aG9zZSBnb29kPyBMZXQncyBjb25maXJtIHRoZXkncmUgaW4gdGhlIHJpZ2h0IHBsYWNlczogYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhbmQgYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gWWVzIVxuXG5BbmQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgYnJfZmlsbF9pZmluZm9gIGlubGluZWQ/IE5vLCBpdCdzIG5vdC4gSXQncyBzdGF0aWMsIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgYW5kIGl0J3Mgc3Vic3RhbnRpYWwgaW4gc2l6ZS4gYGJyX2dldGxpbmtgIGlzIG5vbi1zdGF0aWMuIGBydG5sX2JyaWRnZV9nZXRsaW5rYCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC4gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgYWxzbyBpbiBgcnRuZXRsaW5rLmNgLiBgcnRubF9icmlkZ2Vfbm90aWZ5YCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC5cblxuT2theSwgdGltZSB0byByZXZpZXcgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuXG5cbldlIG5lZWQ6XG4qICAgYFdvcnRoRnV6emluZ2A6IGJvb2xlYW4gKHRydWUpLlxuKiAgIGBSZWFzb25pbmdgOiBhIGNvbmNpc2UgZXhwbGFuYXRpb24uXG4qICAgYEZvY3VzU3ltYm9sc2A6IGFuIGFycmF5IG9mIHN0cmluZyBzeW1ib2xzLlxuKiAgIGBFbmFibGVDb25maWdzYDogYW4gYXJyYXkgb2Ygc3RyaW5nIGNvbmZpZ3MgKG5vIGBDT05GSUdfYCBwcmVmaXgpLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrOlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoZSBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBzaXplIGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgdG8gcHJldmVudCBpbnRlZ2VyIHRydW5jYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYElGTEFfQUZfU1BFQ2AsIHdoaWNoIG1lYW5zIGl0IGNhbiByZXR1cm4gLUUyQklHIGFuZCBzZXQgYW4gZXh0ZW5kZWQgQUNLIG1lc3NhZ2UuIEl0IGFsc28gcHVzaGVzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgLCBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoKWAsIGFuZCB0aGUgYHJ0bmxfYnJpZGdlXypgIGNhbGxlcnMgaW4gYHJ0bmV0bGluay5jYC4gVGhpcyBpcyBhbGwgY29yZSwgYW5kIGVhc2lseSB0cmlnZ2VyZWQgdGhyb3VnaCBOZXRsaW5rL2JyaWRnZSBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIHN5emthbGxlciBjYW4gY3JlYXRlIGJyaWRnZXMsIGFzc2lnbiBWTEFOcywgYW5kIHF1ZXJ5IGdldGxpbmsuXG5cbjIuICBgRW5hYmxlQ29uZmlnc2A6IFdlJ3JlIGVuYWJsaW5nIGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBWTEFOXzgwMjFRYC5cblxuMy4gIGBGb2N1c1N5bWJvbHNgOiBXZSdyZSBmb2N1c2luZyBvbiBgYnJfZmlsbF9pZmluZm9gLCBgYnJfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCwgYW5kIGBydG5sX2JyaWRnZV9ub3RpZnlgLlxuXG5BbHJpZ2h0LCBpdCdzIGFsbCByb2NrLXNvbGlkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjcwLCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0Ny42MTM0OTc4NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA1NDEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9maWxsX2lmaW5mb1wiLFxuICAgIFwiYnJfZ2V0bGlua1wiLFxuICAgIFwicnRubF9icmlkZ2VfZ2V0bGlua1wiLFxuICAgIFwibmRvX2RmbHRfYnJpZGdlX2dldGxpbmtcIixcbiAgICBcInJ0bmxfYnJpZGdlX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIChuZXQvYnJpZGdlIGFuZCBuZXQvY29yZS9ydG5ldGxpbmspLCBhZGRpbmcgYSBzaXplIGJvdW5kYXJ5IGNoZWNrIGluIGJyX2ZpbGxfaWZpbmZvKCkgdG8gcHJldmVudCB1MTYgbmxhX2xlbiBvdmVyZmxvdyB3aGVuIHNlcmlhbGl6aW5nIGJyaWRnZSBWTEFOIGluZm9ybWF0aW9uIGludG8gSUZMQV9BRl9TUEVDLCBhbmQgcGx1bWJzIG5ldGxpbmtfZXh0X2FjayB0aHJvdWdoIG5kb19icmlkZ2VfZ2V0bGluayBhY3Jvc3MgbmV0X2RldmljZV9vcHMgYW5kIHJ0bmV0bGluayBjYWxsZXJzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIHJlcXVlc3RzIG9uIGJyaWRnZSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfZmlsbF9pZmluZm9cIixcbiAgICBcImJyX2dldGxpbmtcIixcbiAgICBcInJ0bmxfYnJpZGdlX2dldGxpbmtcIixcbiAgICBcIm5kb19kZmx0X2JyaWRnZV9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2JyaWRnZV9ub3RpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NDcuNjg0NTU5OTg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc4ODA1MzM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQ3LjY4NTAxMjQ2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg3Nzg3NTk0NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVhMDI4MDc1NWZlZTFmOTk4M2U3OWNhYzg4NjdmNDU4ZTVjZjNlNGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo1NTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbmluZGV4IGNhOTlmNGIxYTYzYzMuLmE3NTJlNjZiZjYzNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbkBAIC0xNjE1NCwxMiArMTYxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZHBfdHVubmVsX25pY19pbmZvIGJueHRfdWRwX3R1bm5lbHMgPSB7XG4gXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHQgICAgICAgaW50IG5sZmxhZ3MpXG4rXHRcdFx0ICAgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIGJwLVx1MDAzZWJyX21vZGUsIDAsIDAsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJueHRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcbmluZGV4IGVkMzAyZjVlYzQ3NjguLmNjOWM4NzUzOWE0MjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jXG5AQCAtNTAxMSw3ICs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXG4gc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgaW50IG5sZmxhZ3MpXG4rXHRcdFx0XHQgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7XG4gXHRpbnQgc3RhdHVzID0gMDtcbkBAIC01MDM3LDcgKzUwMzcsNyBAQCBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBoc3dfbW9kZSA9PSBQT1JUX0ZXRF9UWVBFX1ZFUEEgP1xuIFx0XHRcdFx0ICAgICAgIEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUIsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5pbmRleCBhYmJjNzFlODE1YWUzLi41MmMyYjM5M2FhY2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuQEAgLTEzMTUxLDYgKzEzMTUxLDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICAqIEBkZXY6IHRoZSBuZXRkZXYgYmVpbmcgY29uZmlndXJlZFxuICAqIEBmaWx0ZXJfbWFzazogdW51c2VkXG4gICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluXG4rICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2tcbiAgKlxuICAqIFJldHVybiB0aGUgbW9kZSBpbiB3aGljaCB0aGUgaGFyZHdhcmUgYnJpZGdlIGlzIG9wZXJhdGluZyBpblxuICAqIGkuZSBWRUIgb3IgVkVQQS5cbkBAIC0xMzE1OCw3ICsxMzE1OSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICAgaW50IG5sZmxhZ3MsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGk0MGVfbmV0ZGV2X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gbnAtXHUwMDNldnNpO1xuQEAgLTEzMTc1LDcgKzEzMTc3LDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIHZlYi1cdTAwM2VicmlkZ2VfbW9kZSxcbi1cdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGZlNDdlYzBiYTgwOTQuLjAzOGNlMWZlNWJmZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC04MDg2LDEyICs4MDg2LDE0IEBAIGludCBpY2Vfc2V0X3Jzc19oZnVuYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBoZnVuYylcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcbiAgKiBAZmlsdGVyX21hc2s6IGZpbHRlciBtYXNrIHBhc3NlZCBpblxuICAqIEBubGZsYWdzOiBuZXRsaW5rIGZsYWdzIHBhc3NlZCBpblxuKyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXG4gICpcbiAgKiBSZXR1cm4gdGhlIGJyaWRnZSBtb2RlIChWRUIvVkVQQSlcbiAgKi9cbiBzdGF0aWMgaW50XG4gaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tXHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXG4rXHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4rXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGljZV9uZXRkZXZfdG9fcGYoZGV2KTtcbiBcdHUxNiBibW9kZTtcbkBAIC04MDk5LDcgKzgxMDEsNyBAQCBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdGJtb2RlID0gcGYtXHUwMDNlZmlyc3Rfc3ctXHUwMDNlYnJpZGdlX21vZGU7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncyxcbi1cdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuaW5kZXggZjkxODU2NDk4ZWIyZC4uNzdkZmQ4MGE2ZTM2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXG5AQCAtMTA3MjYsNyArMTA3MjYsOCBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTtcbiBcbkBAIC0xMDczNSw3ICsxMDczNiw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIGFkYXB0ZXItXHUwMDNlYnJpZGdlX21vZGUsIDAsIDAsIG5sZmxhZ3MsXG4tXHRcdFx0XHQgICAgICAgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcbmluZGV4IGZjMTEwYTdkMTZlOGQuLjUzYmY3OWRiZTA4ZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5AQCAtNTI3Nyw3ICs1Mjc3LDcgQEAgc3RhdGljIGludCBtbHg1ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcbiAjaWZkZWYgQ09ORklHX01MWDVfRVNXSVRDSFxuIHN0YXRpYyBpbnQgbWx4NWVfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdGludCBubGZsYWdzKVxuK1x0XHRcdFx0aW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbkBAIC01Mjg4LDcgKzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRtb2RlID0gc2V0dGluZyA/IEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUI7XG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuaW5kZXggNzkyOGU3NmRhNzIzZS4uY2I3NTFkZGRiNjg4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jXG5AQCAtMjI1Nyw3ICsyMjU3LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKVxuIFxuIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZnBfbmV0ICpubiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1MTYgbW9kZTtcbkBAIC0yMjY5LDcgKzIyNjksNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdCAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCO1xuIFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgbW9kZSwgMCwgMCxcbi1cdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xuaW5kZXggMjkzNWMyZWNjMzE0Yi4uZjk2MGNmNWE5N2EyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcbisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcbkBAIC05MzUsNyArOTM1LDcgQEAgc3RhdGljIHZvaWQgcWV0aF9sMl9icjJkZXZfcHV0KHZvaWQpXG4gXG4gc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgaW50IG5sZmxhZ3MpXG4rXHRcdFx0XHQgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHFldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LVx1MDAzZW1sX3ByaXY7XG5AQCAtOTQ5LDcgKzk0OSw3IEBAIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBtb2RlLCBwcml2LVx1MDAzZWJycG9ydF9mZWF0dXJlcyxcbiBcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZWJycG9ydF9od19mZWF0dXJlcyxcbi1cdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZXRoX2JycG9ydF9wb2xpY3lbSUZMQV9CUlBPUlRfTUFYICsgMV0gPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDcwN2IyZTUxYzJiOTcuLjE4YTAzZjBmNmYxMTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTM2MCw3ICsxMzYwLDcgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRcdFx0ICAgICB1MTYgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgKiBpbnQgKCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gICpcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi0gKlx0XHRcdCAgICAgaW50IG5sZmxhZ3MpXG4rICpcdFx0XHQgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiAgKlx0XHRcdCAgICAgdTE2IGZsYWdzKTtcbiAgKlxuQEAgLTE2NTksNyArMTY1OSw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4gXHRcdFx0XHRcdFx0ICAgICAgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdFx0XHQgICAgICBpbnQgbmxmbGFncyk7XG4rXHRcdFx0XHRcdFx0ICAgICAgaW50IG5sZmxhZ3MsXG4rXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdGludFx0XHRcdCgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdFx0XHRcdCAgICAgIHUxNiBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMjIyLDcgKzIyMiw4IEBAIGV4dGVybiBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCAgIHUzMiBmaWx0ZXJfbWFzayxcbiBcdFx0XHRcdCAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrKSk7XG4rXHRcdFx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzayksXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIGV4dGVybiB2b2lkIHJ0bmxfb2ZmbG9hZF94c3RhdHNfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbmluZGV4IGFlNzZkZjBkZTA1YTAuLjUzNjc2ZGY5ZTRkMTEgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbkBAIC00NTksNyArNDU5LDcgQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbiBcdFx0XHQgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzLFxuIFx0XHRcdCAgdTMyIGZpbHRlcl9tYXNrLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdCAgYm9vbCBnZXRsaW5rKVxuK1x0XHRcdCAgYm9vbCBnZXRsaW5rLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0dTggb3BlcnN0YXRlID0gbmV0aWZfcnVubmluZyhkZXYpID8gUkVBRF9PTkNFKGRldi1cdTAwM2VvcGVyc3RhdGUpIDpcbiBcdFx0XHRcdFx0ICAgIElGX09QRVJfRE9XTjtcbkBAIC02MTMsNiArNjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBkb25lOlxuIFx0aWYgKGFmKSB7XG4rXHRcdGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOXCIpO1xuK1x0XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4rXHRcdFx0cmV0dXJuIC1FMkJJRztcbitcdFx0fVxuIFx0XHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcdTAwM2UgbmxhX2F0dHJfc2l6ZSgwKSlcbiBcdFx0XHRubGFfbmVzdF9lbmQoc2tiLCBhZik7XG4gXHRcdGVsc2VcbkBAIC02NTQsNyArNjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdGlmIChza2IgPT0gTlVMTClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4tXHRlcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UpO1xuK1x0ZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlLFxuK1x0XHRcdCAgICAgTlVMTCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBicl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02ODAsNyArNjg3LDggQEAgdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuICAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LXG4gICovXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbi1cdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuK1x0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4rXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7XG4gXG5AQCAtNjkyLDcgKzcwMCw3IEBAIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBubGZsYWdzLFxuLVx0XHRcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUpO1xuK1x0XHRcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnJfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCAwOWMzOTdlMzAzMzA3Li5lZGJlN2ExZjU3MzYzIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMjE3OSw3ICsyMTc5LDcgQEAgaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzLFxuIFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzKTtcbiBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpO1xuK1x0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGJyX3Byb2Nlc3Nfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0XHQgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgaW50IGNtZCxcbiBcdFx0XHQgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnZpbmZvX2N1cnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggYmU5ZDE2MjViYWMzMS4uOTY3YjU4N2VmNjY0OCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTUzOTgsNyArNTM5OCw4IEBAIGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2ssXG4gXHRcdFx0ICAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgIHUzMiBmaWx0ZXJfbWFzaykpXG4rXHRcdFx0XHRcdCAgICAgdTMyIGZpbHRlcl9tYXNrKSxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuIFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xuQEAgLTU1NzQsNyArNTU3NSw4IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNiLVx1MDAzZWFyZ3NbMF0pIHtcbiBcdFx0XHRcdGVyciA9IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcbiBcdFx0XHRcdFx0XHRza2IsIHBvcnRpZCwgc2VxLCBkZXYsXG4tXHRcdFx0XHRcdFx0ZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJKTtcbitcdFx0XHRcdFx0XHRmaWx0ZXJfbWFzaywgTkxNX0ZfTVVMVEksXG4rXHRcdFx0XHRcdFx0Y2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU1OTAsNyArNTU5Miw4IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0XHRlcnIgPSBvcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc2VxLCBkZXYsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdFx0XHRcdCAgICAgIE5MTV9GX01VTFRJKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgIE5MTV9GX01VTFRJLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgY2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU2MjQsNyArNTYyNyw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGJyaWRnZV9ubG1zZ19zaXplKHZvaWQpXG4gXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpO1x0LyogSUZMQV9CUklER0VfTU9ERSAqL1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtNTYzOSw3ICs1NjQzLDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0Z290byBlcnJvdXQ7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDAsIDApO1xuK1x0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG5AQCAtNTczMCw3ICs1NzM0LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcbiBcdFx0XHQgKiBjaGFuZ2VcbiBcdFx0XHQgKi9cbi1cdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcbitcdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTgwNSw3ICs1ODA5LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9kZWxsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcbiBcdFx0XHQgKiBjaGFuZ2VcbiBcdFx0XHQgKi9cbi1cdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcbitcdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spO1xuIFx0XHR9XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0Ny42ODUwMTU1OTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ1ODYyNjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIHNwZWNpZmljYWxseSB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBkaWZmIGlzIGFkZGluZyBhIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlciB0byB0aGUgYG5kb19icmlkZ2VfZ2V0bGlua2AgZnVuY3Rpb24gYWNyb3NzIHRoZSBib2FyZC4gVGhpcyBpbmNsdWRlcyB1cGRhdGVzIHRvIGBzdHJ1Y3QgbmV0X2RldmljZV9vcHNgLCB0aGUgaW1wbGVtZW50aW5nIGRyaXZlcnMgbGlrZSBgYm54dGAsIGBiZV9tYWluYCwgYW5kIHNvIG9uLCB0aGUgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gaW4gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxlcnMgd2l0aGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2Agd2hpY2ggYXJlIHBhc3NpbmcgZWl0aGVyIGBjYi1cdTAwM2VleHRhY2tgIG9yIGBleHRhY2tgLlxuXG5UaGUgY29yZSBhcmVhIG9mIGludGVyZXN0LCBob3dldmVyLCBzZWVtcyB0byBiZSB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJyX2ZpbGxfaWZpbmZvYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0IHByb3ZpZGVkLCBpdCBsb29rcyBsaWtlIGBicl9maWxsX2lmaW5mb2Agbm93IGFsc28gdGFrZXMgdGhlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlci4gSSdtIHNlZWluZyBhIGNoZWNrIHRoYXQncyBuZXc7IGEgY29tcGFyaXNvbiBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IFZMQU4gaW5mb3JtYXRpb24gZml0cyB3aXRoaW4gYSBzaW5nbGUgbWVzc2FnZS4gSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGlzIHNldCB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYCB2aWEgYGV4dGFja2AsIGFuZCB0aGUgbWVzc2FnZSBpcyBjYW5jZWxlZC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGBleHRhY2tgIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkLiBJcyBpdCBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZXNlIGZ1bmN0aW9ucz8gSWYgbm90LCB3ZSBjb3VsZCBoYXZlIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgd2hlcmUgZ2FyYmFnZSBkYXRhIG1pZ2h0IGJlIHVzZWQgaW4gdGhlIGBleHRhY2tgIHN0cnVjdHVyZS4gVGhlIFZMQU4gY2hlY2sgaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIHRoZSBpbml0aWFsaXphdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBvZiBgZXh0YWNrYCB0aGF0J3MgcmFpc2luZyBteSBmbGFncyBoZXJlLiBUaGUgY29udGV4dCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGxzIHRvIGBicl9maWxsX2lmaW5mb2AgaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHJpc2suIEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBjaGFuZ2UgdG8gc2VlIGhvdyBhbmQgd2hlcmUgYGV4dGFja2AgaXMgaW5pdGlhbGl6ZWQsIGFuZCBpZiBhbnkgY29kZSBwYXRocyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gdGhlc2UgaW1wb3J0YW50IGZ1bmN0aW9ucy4gVGhpcyB3YXJyYW50cyBkZWVwZXIgaW52ZXN0aWdhdGlvbiBhbmQgdmVyeSB3ZWxsIG1pZ2h0IG5lZWQgYSBLTVNBTiBmdXp6aW5nIHJ1biB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NTQuMTQzNjQ0NDQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTU6XFx0XFx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBwb3J0KSB7XFxuIDU5NjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHBvcnQpO1xcbiA1OTc6XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqbXN0X25lc3Q7XFxuIDU5ODpcXHRcXHRcXHRpbnQgZXJyO1xcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHRcXHRpZiAoIXZnIHx8ICF2Zy1cXHUwMDNlbnVtX3ZsYW5zKVxcbiA2MDE6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiA2MDI6XFx0XFxuIDYwMzpcXHRcXHRcXHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcXG4gNjA0OlxcdFxcdFxcdGlmICghbXN0X25lc3QpXFxuIDYwNTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0XFx0XFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcXG4gNjA4OlxcdFxcdFxcdGlmIChlcnIpXFxuIDYwOTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjEwOlxcdFxcbiA2MTE6XFx0XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xcbiA2MTI6XFx0XFx0fVxcbiA2MTM6XFx0XFxuIDYxNDpcXHRkb25lOlxcbiA2MTU6XFx0XFx0aWYgKGFmKSB7XFxuIDYxNjpcXHRcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcXHUwMDNlIFUxNl9NQVgpIHtcXG4gNjE3OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuIDYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlxcXCIpO1xcbiA2MTk6XFx0XFx0XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjIwOlxcdFxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDYyMTpcXHRcXHRcXHR9XFxuIDYyMjpcXHRcXHRcXHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXFxuIDYyMzpcXHRcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBhZik7XFxuIDYyNDpcXHRcXHRcXHRlbHNlXFxuIDYyNTpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBhZik7XFxuIDYyNjpcXHRcXHR9XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdG5sbXNnX2VuZChza2IsIG5saCk7XFxuIDYyOTpcXHRcXHRyZXR1cm4gMDtcXG4gNjMwOlxcdFxcbiA2MzE6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbiA2MzI6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjMzOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDYzNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjU0LjE0MzgzMDk3M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDE3Njg2MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIE5ldGxpbmsgQXR0cmlidXRlIE92ZXJmbG93KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGlzIGBhZmAgdmFyaWFibGUgaXMgYSBgc3RydWN0IG5sYXR0ciAqYCwgc3BlY2lmaWNhbGx5IGNyZWF0ZWQgdXNpbmcgYG5sYV9uZXN0X3N0YXJ0X25vZmxhZ2Agd2l0aGluIHRoZSBuZXRsaW5rIGNvbnRleHQuIFJpZ2h0LCBpbiBuZXRsaW5rLCBgbmxhX2xlbmAgaXMgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYF9fdTE2YCksIG1lYW5pbmcgaXQgaGFzIGEgbWF4aW11bSB2YWx1ZSBvZiA2NTUzNS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgYG5sYV9uZXN0X2VuZGAgY2FsY3VsYXRlcyBgbmxhX2xlbmAuIEl0IGFzc2lnbnMgYGFmLVx1MDAzZW5sYV9sZW5gIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBvZiB0aGUgc2tiIChgc2tiX3RhaWxfcG9pbnRlcmApIGFuZCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXR0cmlidXRlIChgKHVuc2lnbmVkIGNoYXIgKilhZmApLlxuXG5UaGUgcG90ZW50aWFsIGlzc3VlIGltbWVkaWF0ZWx5IGp1bXBzIG91dDogSWYgdGhlIGRhdGEgYmVpbmcgbmVzdGVkICp3aXRoaW4qIHRoZSBhdHRyaWJ1dGUgaXMgdG9vIGxhcmdlIOKAkyBpZiwgZm9yIGluc3RhbmNlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBodWdlIG51bWJlciBvZiBWTEFOcyDigJMgdGhpcyBsZW5ndGggY2FsY3VsYXRpb24gY291bGQgZXhjZWVkIHRoZSBgVTE2X01BWGAgbGltaXQuIFRoYXQncyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyEgYGFmLVx1MDAzZW5sYV9sZW5gIHdvdWxkIHdyYXAgYXJvdW5kLCBiZWNvbWluZyBhIHNtYWxsLCBpbmNvcnJlY3QgbnVtYmVyLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBlaXRoZXIgdGhlIGtlcm5lbCBvciB1c2Vyc3BhY2UgcGFyc2luZyB0aGUgYXR0cmlidXRlIGFzIG11Y2ggc21hbGxlciB0aGFuIGl0IGFjdHVhbGx5IGlzLCByZXN1bHRpbmcgaW4gYSBjb3JydXB0ZWQgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIG9yIHRydW5jYXRlZCBhdHRyaWJ1dGUuXG5cbkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBleGFjdGx5IHRoYXQhIEl0IGFkZHMgYSBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYKWAuIElmIHRoZSBsZW5ndGggaXMgdG9vIGxhcmdlLCBpdCBzZXRzIGFuIGV4dGVuZGVkIEFDSyBlcnJvciBtZXNzYWdlLCBjYW5jZWxzIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCByZXR1cm5zIGAtRTJCSUdgLiBTbWFydCEgVGhleSd2ZSBtYW5hZ2VkIHRvIGNhdGNoIHRoZSBvdmVyZmxvdyBiZWZvcmUgaXQgY2F1c2VzIHJlYWwgZGFtYWdlLlxuXG5UaGUgY29kZSdzIHRocmVhZGluZyBhIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AgZG93biB0byBgYnJfZmlsbF9pZmluZm9gIHRvIGVuYWJsZSB0aGUgc2V0dGluZyBvZiBgZXh0YWNrYCBpbiB0aGUgZmlyc3QgcGxhY2UsIGdvb2QgZGVzaWduLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgaW4gdGhlIGV4dGVuZGVkIEFDSy5cblxuTm93LCBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgdGhpcyBwYXRjaCBoYXMgYW55IG90aGVyIGNoYW5nZXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCB0byBjb25maXJtIHRoYXQgYW55IHNpbWlsYXIgY29kZSBpcyBjb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NTguNTYxNTE5NjIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1Mzk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1Mzk1OlxcdGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbjUzOTY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtb2RlLFxcbjUzOTc6XFx0XFx0XFx0XFx0ICAgIHUzMiBmbGFncywgdTMyIG1hc2ssIGludCBubGZsYWdzLFxcbjUzOTg6XFx0XFx0XFx0XFx0ICAgIHUzMiBmaWx0ZXJfbWFzayxcXG41Mzk5OlxcdFxcdFxcdFxcdCAgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXFxuNTQwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuNTQwMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBmaWx0ZXJfbWFzayksXFxuNTQwMjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjU0MDM6XFx0e1xcbjU0MDQ6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuNTQwNTpcXHRcXHRzdHJ1Y3QgaWZpbmZvbXNnICppZm07XFxuNTQwNjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpicl9hZnNwZWM7XFxuNTQwNzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpwcm90aW5mbztcXG41NDA4OlxcdFxcdHU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IGRldi1cXHUwMDNlb3BlcnN0YXRlIDogSUZfT1BFUl9ET1dOO1xcbjU0MDk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpO1xcbjU0MTA6XFx0XFx0aW50IGVyciA9IDA7XFxuNTQxMTpcXHRcXG41NDEyOlxcdFxcdG5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCBSVE1fTkVXTElOSywgc2l6ZW9mKCppZm0pLCBubGZsYWdzKTtcXG41NDEzOlxcdFxcdGlmIChubGggPT0gTlVMTClcXG41NDE0OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuNTQxNTpcXHRcXG41NDE2OlxcdFxcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcXG41NDE3OlxcdFxcdGlmbS1cXHUwMDNlaWZpX2ZhbWlseSA9IEFGX0JSSURHRTtcXG41NDE4OlxcdFxcdGlmbS1cXHUwMDNlX19pZmlfcGFkID0gMDtcXG41NDE5OlxcdFxcdGlmbS1cXHUwMDNlaWZpX3R5cGUgPSBkZXYtXFx1MDAzZXR5cGU7XFxuNTQyMDpcXHRcXHRpZm0tXFx1MDAzZWlmaV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG41NDIxOlxcdFxcdGlmbS1cXHUwMDNlaWZpX2ZsYWdzID0gbmV0aWZfZ2V0X2ZsYWdzKGRldik7XFxuNTQyMjpcXHRcXHRpZm0tXFx1MDAzZWlmaV9jaGFuZ2UgPSAwO1xcbjU0MjM6XFx0XFxuNTQyNDpcXHRcXG41NDI1OlxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhza2IsIElGTEFfSUZOQU1FLCBkZXYtXFx1MDAzZW5hbWUpIHx8XFxuNTQyNjpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX01UVSwgZGV2LVxcdTAwM2VtdHUpIHx8XFxuNTQyNzpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfT1BFUlNUQVRFLCBvcGVyc3RhdGUpIHx8XFxuNTQyODpcXHRcXHQgICAgKGJyX2RldiBcXHUwMDI2XFx1MDAyNlxcbjU0Mjk6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTUFTVEVSLCBicl9kZXYtXFx1MDAzZWlmaW5kZXgpKSB8fFxcbjU0MzA6XFx0XFx0ICAgIChkZXYtXFx1MDAzZWFkZHJfbGVuIFxcdTAwMjZcXHUwMDI2XFxuNTQzMTpcXHRcXHQgICAgIG5sYV9wdXQoc2tiLCBJRkxBX0FERFJFU1MsIGRldi1cXHUwMDNlYWRkcl9sZW4sIGRldi1cXHUwMDNlZGV2X2FkZHIpKSB8fFxcbjU0MzI6XFx0XFx0ICAgIChkZXYtXFx1MDAzZWlmaW5kZXggIT0gZGV2X2dldF9pZmxpbmsoZGV2KSBcXHUwMDI2XFx1MDAyNlxcbjU0MzM6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTElOSywgZGV2X2dldF9pZmxpbmsoZGV2KSkpKVxcbjU0MzQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjU4LjU2MTkzMDU0NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjI1MzE0NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQnJpZGdlIE5ldGxpbmsgSW50ZXJmYWNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIGJyaWRnZSBuZXRsaW5rIGludGVyZmFjZSBoYW5kbGVzIGdldHRpbmcgbGluayBpbmZvcm1hdGlvbi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AgdGFrZXMgYW4gYGV4dGFja2AgYXJndW1lbnQsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSB1c2luZyBpdCByaWdodCBub3cuIEl0J3MgcHJvYmFibHkgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBvciBmb3IgcG90ZW50aWFsIGZ1dHVyZSB1c2UgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJIGp1c3Qgd2FudCB0byB2ZXJpZnk7IG5vLCBgdmxhbl9maWxsYCBkb2Vzbid0IGdldCBgZXh0YWNrYCBwYXNzZWQgdG8gaXQuXG5cbkFscmlnaHQsIG1vdmluZyBvbiwgbGV0J3MgbG9vayBhdCBgcnRubF9icmlkZ2VfZ2V0bGlua2AuIE9rYXksIEkgc2VlIHRoYXQgd2l0aGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgdGhlIGRyaXZlcidzIGBuZG9fYnJpZGdlX2dldGxpbmtgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2l0aCBgY2ItXHUwMDNlZXh0YWNrYCBwYXNzZWQgaW4uIFRoYXQgbWFrZXMgc2Vuc2UuIEkgc2VlIGEgc2ltaWxhciBwYXR0ZXJuIHdpdGggYHJ0bmxfYnJpZGdlX25vdGlmeWAsIHdoZXJlIGBleHRhY2tgIGlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyJ3MgYG5kb19icmlkZ2VfZ2V0bGlua2AuXG5cbk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSdtIGdvaW5nIHRvIHJ1biBhIHF1aWNrIGdyZXAgZm9yIGAubmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgdGhlIHJlbGV2YW50IGNvZGViYXNlLiBJIHdhbnQgdG8gY2hlY2sgdGhhdCBhbGwgZHJpdmVycyB0aGF0IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFyZSBjb25zaXN0ZW50bHkgdXBkYXRlZCB0byB0aGUgY3VycmVudCBzaWduYXR1cmUgd2l0aCBgZXh0YWNrYCBhbmQgZXZlcnl0aGluZyBlbHNlLiBJdCB3b3VsZCBiZSBlYXN5IHRvIG1pc3MgYW4gaW5zdGFuY2UgYW5kIGludHJvZHVjZSBhIHN1YnRsZSBidWcuIEknbGwgbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgZHJpdmVycyBzbGlwIHVuZGVyIHRoZSByYWRhci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowMS43ODcyNDg5MTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDAyOTA5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX2JyaWRnZV9nZXRsaW5rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2MjEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm54dF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYyNDAtXFx0Lm5kb194ZHBfeG1pdFxcdFxcdD0gYm54dF94ZHBfeG1pdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjI0MTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBibnh0X2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2MjQyLVxcdC5uZG9fYnJpZGdlX3NldGxpbmtcXHQ9IGJueHRfYnJpZGdlX3NldGxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTQ5Njg9c3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTUwMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo1MDEyOnN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy01MDEzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTUxNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy01MTczLVxcdC5uZG9fYnJpZGdlX3NldGxpbmtcXHQ9IGJlX25kb19icmlkZ2Vfc2V0bGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjUxNzQ6XFx0Lm5kb19icmlkZ2VfZ2V0bGlua1xcdD0gYmVfbmRvX2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNTE3NS1cXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBiZV9mZWF0dXJlc19jaGVjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTMwODg9c3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xMzE0Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEzMTQ3OiAqIGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rIC0gR2V0IHRoZSBoYXJkd2FyZSBicmlkZ2UgbW9kZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNDgtICogQHNrYjogc2tiIGJ1ZmZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNTgtICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTMxNTk6c3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNjAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTM2Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTEzNjY2LVxcdC5uZG9fZmVhdHVyZXNfY2hlY2tcXHQ9IGk0MGVfZmVhdHVyZXNfY2hlY2ssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxMzY2NzpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBpNDBlX25kb19icmlkZ2VfZ2V0bGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTEzNjY4LVxcdC5uZG9fYnJpZGdlX3NldGxpbmtcXHQ9IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9OTc4OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGljZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtOTgxMy1cXHQubmRvX3NldF9mZWF0dXJlcyA9IGljZV9zZXRfZmVhdHVyZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgxNDpcXHQubmRvX2JyaWRnZV9nZXRsaW5rID0gaWNlX2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTk4MTUtXFx0Lm5kb19icmlkZ2Vfc2V0bGluayA9IGljZV9icmlkZ2Vfc2V0bGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYz0xMDY5OT1zdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTEwNzI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYzoxMDcyNzpzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0xMDcyOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYz0xMTA3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4Z2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTExMTAtXFx0Lm5kb19icmlkZ2Vfc2V0bGlua1xcdD0gaXhnYmVfbmRvX2JyaWRnZV9zZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYzoxMTExMTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTExMTEyLVxcdC5uZG9fZGZ3ZF9hZGRfc3RhdGlvblxcdD0gaXhnYmVfZndkX2FkZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTMyND1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NWVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTM1MC1cXHQubmRvX2JyaWRnZV9zZXRsaW5rICAgICAgPSBtbHg1ZV9icmlkZ2Vfc2V0bGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jOjUzNTE6XFx0Lm5kb19icmlkZ2VfZ2V0bGluayAgICAgID0gbWx4NWVfYnJpZGdlX2dldGxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jPTIzMTU9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5mcF9uZmQzX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM0MS1cXHQubmRvX3hza193YWtldXBcXHRcXHQ9IG5mcF9uZXRfeHNrX3dha2V1cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmM6MjM0MjpcXHQubmRvX2JyaWRnZV9nZXRsaW5rICAgICA9IG5mcF9uZXRfYnJpZGdlX2dldGxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jLTIzNDMtXFx0Lm5kb19icmlkZ2Vfc2V0bGluayAgICAgPSBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jPTIzNDY9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5mcF9uZmRrX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM3MS1cXHQubmRvX2JwZlxcdFxcdD0gbmZwX25ldF94ZHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jOjIzNzI6XFx0Lm5kb19icmlkZ2VfZ2V0bGluayAgICAgPSBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYy0yMzczLVxcdC5uZG9fYnJpZGdlX3NldGxpbmsgICAgID0gbmZwX25ldF9icmlkZ2Vfc2V0bGluayxcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9MTA0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFldGhfbDJfaXFkX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTEwNjUtXFx0Lm5kb19zZXRfZmVhdHVyZXNcXHQ9IHFldGhfc2V0X2ZlYXR1cmVzLFxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM6MTA2NjpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMTA2Ny1cXHQubmRvX2JyaWRnZV9zZXRsaW5rXFx0PSBxZXRoX2wyX2JyaWRnZV9zZXRsaW5rLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM2MC0gKlxcdFxcdFxcdCAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMzYxOiAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTEzNjItICpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNjU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNjU4OlxcdGludFxcdFxcdFxcdCgqbmRvX2JyaWRnZV9nZXRsaW5rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY1OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1MzIgc2VxLFxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz00Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NjgtXFx0Lm5kb19tZGJfZ2V0XFx0XFx0ID0gYnJfbWRiX2dldCxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ2OTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0ID0gYnJfZ2V0bGluayxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ3MC1cXHQubmRvX2JyaWRnZV9zZXRsaW5rXFx0ID0gYnJfc2V0bGluayxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTU1NTM9c3RhdGljIGludCBydG5sX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1NzMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU3NDpcXHRcXHRpZiAoYnJfZGV2IFxcdTAwMjZcXHUwMDI2IGJyX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU3NS1cXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU3NjpcXHRcXHRcXHRcXHRlcnIgPSBicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NTc3LVxcdFxcdFxcdFxcdFxcdFxcdHNrYiwgcG9ydGlkLCBzZXEsIGRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1ODktXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU5MDpcXHRcXHRpZiAob3BzLVxcdTAwM2VuZG9fYnJpZGdlX2dldGxpbmspIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NTkxLVxcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gY2ItXFx1MDAzZWFyZ3NbMF0pIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NTkyOlxcdFxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1OTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2VxLCBkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz01NjMwPXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjM2LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjU2Mzc6XFx0aWYgKCFkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluaylcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTY0NS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NjQ2OlxcdGVyciA9IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU2NDctXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjAzLjYyNzU0NTgwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTQ5NTI0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBJbmZvcm1hdGlvbiBPdmVyZmxvdyBDaGVjayoqXG5cbk9rYXksIHNvIEkndmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgYWxsIHRoZSBpbXBsZW1lbnRhdGlvbnMgYW5kIGNhbGxlcnMgd2l0aCBgZXh0YWNrYCwgdGhhdCdzIGEgZ29vZCBzdGFydC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGNvZGUuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZSB3aXRoIFZMQU4gaW5mb3JtYXRpb24uIEZyb20gd2hhdCBJIHNlZSwgaXQgaW50cm9kdWNlcyBhIGNydWNpYWwgb3ZlcmZsb3cgY2hlY2s6IGBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIHByZXZpb3VzbHksIGlmIHRoZSBWTEFOIGRhdGEgbmVzdGVkIHdpdGhpbiB0aGUgYGFmYCBhdHRyaWJ1dGUgZXhjZWVkZWQgNjU1MzUgYnl0ZXMgKHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgc2l6ZSBmb3IgYG5sYV9sZW5gKSwgdGhlIGBubGFfbmVzdF9lbmRgIGZ1bmN0aW9uIHdvdWxkIHNpbXBseSB0cnVuY2F0ZSB0aGUgbGVuZ3RoIHRvIGEgYHUxNmAuXG5cblRoaXMgbmV3IGNoZWNrIGFkZHJlc3NlcyB0aGF0IGJ5IGNhbmNlbGxpbmcgdGhlIE5ldGxpbmsgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIGAtRTJCSUdgIGlmIHRoZSBvdmVyZmxvdyBpcyBkZXRlY3RlZC4gQ3JpdGljYWxseSwgaXQgYWxzbyBwcm9wYWdhdGVzIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUgc28gYSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIGNhbiBiZSBzZXQgdXNpbmcgYE5MX1NFVF9FUlJfTVNHX01PRGAuIFRoYXQgYWxsb3dzIHVzIHRvIHByb3ZpZGUgYSBtdWNoIG1vcmUgdXNlZnVsIGVycm9yIG1lc3NhZ2UuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG4qICAgTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIHNvIG5vIGNvbmNlcm5zIHRoZXJlLlxuKiAgIGBOTF9TRVRfRVJSX01TR19NT0RgIGNvcnJlY3RseSBzZXRzIHRoZSBlcnJvciBtZXNzYWdlIHBvaW50ZXIgdG8gYSBzdHJpbmcgbGl0ZXJhbCwgd2hpY2ggaXMgc2FmZS5cbiogICBJbiB0aGUgZXJyb3IgcGF0aCAoYC1FMkJJR2AgcmV0dXJuKSwgYG5sbXNnX2NhbmNlbChza2IsIG5saClgIGNvcnJlY3RseSB0cmltcyB0aGUgYHNrYmAgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4qICAgVGhlIGBza2JgIGJ1ZmZlciBpdHNlbGYgaXMgYW4gZXhpc3RpbmcgYHNrYmAgYWxsb2NhdGVkIGJ5IHRoZSBOZXRsaW5rIGR1bXAvbm90aWZ5IHJvdXRpbmVzLCBpdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHNrYiBidWZmZXIuXG4qICAgSSBjYW4gc2VlIHRoYXQgdGhlIGNyaXRpY2FsIGNhbGN1bGF0aW9uLCBgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZmAsIGlzIHVzaW5nIHZhbGlkIHBvaW50ZXJzIGludG8gdGhlIGBza2JgIGJ1ZmZlci5cbiogICBUaGlzIGFsc28gbWVhbnMgdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZTsgaW4gZmFjdCwgaXQgKnByZXZlbnRzKiBzZW5kaW5nIGEgY29ycnVwdGVkIG1lc3NhZ2UuXG4qICAgVGhlcmUncyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhOyBgYWZgIGFuZCBgc2tiYCBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGV4dGFja2Agc3RydWN0dXJlIGlzIHBhc3NlZCBpbi5cbiogICBBbGwgZHJpdmVycyBhcmUgY29ycmVjdGx5IHBhc3NpbmcgdGhlIGBleHRhY2tgIHN0cnVjdCB0aHJvdWdoIHRvIGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AuXG5cbkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZXh0YWNrYCBpcyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXJzLCBlc3BlY2lhbGx5IGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYHJ0bmxfYnJpZGdlX3NldGxpbmtgLCBhbmQgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLlxuXG5JIGtub3cgaW4gYHJ0bmxfYnJpZGdlX2dldGxpbmtgLCBgY2ItXHUwMDNlZXh0YWNrYCBjb21lcyBmcm9tIHRoZSBgbmV0bGlua19jYWxsYmFja2Agc3RydWN0LCB3aGljaCBpcyBtYW5hZ2VkIGJ5IHRoZSBOZXRsaW5rIGNvcmUgaXRzZWxmIChpbml0aWFsaXplZCBhbmQgemVyb2VkIGJ5IHRoZSBjb3JlKS4gVGhhdCdzIGdvb2QuXG5cbkluIGBydG5sX2JyaWRnZV9zZXRsaW5rYCBhbmQgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHJ0bmxfYnJpZGdlX25vdGlmeWAgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseSB0byBlbnN1cmUgdGhlIGBleHRhY2tgIHBvaW50ZXIgaXMgYmVpbmcgaGFuZGxlZCBzYWZlbHkuIExldCBtZSByZXZpZXcgdGhhdCBjb2RlIGFnYWluIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjA5Ljc3NzA3NDY1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTcyMDpcXHRcXG41NzIxOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5CUklER0VfRkxBR1NfTUFTVEVSO1xcbjU3MjI6XFx0XFx0fVxcbjU3MjM6XFx0XFxuNTcyNDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlJJREdFX0ZMQUdTX1NFTEYpKSB7XFxuNTcyNTpcXHRcXHRcXHRpZiAoIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9zZXRsaW5rKVxcbjU3MjY6XFx0XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuNTcyNzpcXHRcXHRcXHRlbHNlXFxuNTcyODpcXHRcXHRcXHRcXHRlcnIgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2Vfc2V0bGluayhkZXYsIG5saCxcXG41NzI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZmxhZ3MsXFxuNTczMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGV4dGFjayk7XFxuNTczMTpcXHRcXHRcXHRpZiAoIWVycikge1xcbjU3MzI6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfkJSSURHRV9GTEFHU19TRUxGO1xcbjU3MzM6XFx0XFxuNTczNDpcXHRcXHRcXHRcXHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXFxuNTczNTpcXHRcXHRcXHRcXHQgKiBjaGFuZ2VcXG41NzM2OlxcdFxcdFxcdFxcdCAqL1xcbjU3Mzc6XFx0XFx0XFx0XFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcXG41NzM4OlxcdFxcdFxcdH1cXG41NzM5OlxcdFxcdH1cXG41NzQwOlxcdFxcbjU3NDE6XFx0XFx0aWYgKGJyX2ZsYWdzX2F0dHIpXFxuNTc0MjpcXHRcXHRcXHRtZW1jcHkobmxhX2RhdGEoYnJfZmxhZ3NfYXR0ciksIFxcdTAwMjZmbGFncywgc2l6ZW9mKGZsYWdzKSk7XFxuNTc0MzpcXHRvdXQ6XFxuNTc0NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjU3NDU6XFx0fVxcbjU3NDY6XFx0XFxuNTc0NzpcXHRzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2RlbGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuNTc0ODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjU3NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowOS43NzczMTQ5N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTY5NTI2NDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQb3RlbnRpYWwgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIE5ldGxpbmsgQnJpZGdlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgYGV4dGFja2AgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIG5ldGxpbmsgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGBydG5sX2JyaWRnZV9kZWxsaW5rYCwgYW5kIGBicl9pbmZvX25vdGlmeWAuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgYGV4dGFja2AgY2FuIGJlIHBhc3NlZCBhcm91bmQgYXMgYE5VTExgIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgb3JpZ2luYXRpbmcgZnJvbSBgbmV0bGlua19yY3Zfc2tiYCB3aXRoaW4gdGhlIG5ldGxpbmsgZGlzcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLlxuXG5NeSBjb25jZXJuIGluaXRpYWxseSB3YXMgd2hldGhlciB0aGlzIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciwgd29yc2UsIHdyaXR0ZW4gdG8uIFdlIGNhbiBzZWUgdGhhdCBgTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgLi4uKWAgaXMgdGhlIGtleSBtYWNybyBoZXJlLiBUaGF0IGV4cGFuZHMgdG8gYE5MX1NFVF9FUlJfTVNHKClgIHdoaWNoIGluY2x1ZGVzIGEgY2hlY2sgYGlmIChleHRhY2spYCB3aXRoaW4gaXRzIHN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCB0aGUgY29kZSBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIGBleHRhY2sgPT0gTlVMTGAgY2FzZSwgcHJldmVudGluZyBhbnkgZGlyZWN0IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUncyBubyBuZXcgbWVtb3J5IGFsbG9jYXRlZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbmQgY2VydGFpbmx5IG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBhbHNvIHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgZm9yIG1hbGZvcm1lZCBtZXNzYWdlcy5cblxuSSd2ZSBleGFtaW5lZCB0aGUgY29kZSBjYXJlZnVsbHkgYW5kIGRldGVybWluZWQgdGhhdCB0aGVyZSdzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBpbiB0aGlzIGNvbnRleHQuIFRoZSBjb2RlIG5vdyBhbHNvIGluY2x1ZGVzIGVycm9yIGNoZWNrcyBmb3IgYnVmZmVyIHNpemUgZXhjZWVkaW5nIGBVMTZfTUFYYCwgY2FuY2VsbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIHdoZW4gdGhlIGJ1ZmZlciBpcyB0b28gbGFyZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaW4gc2NlbmFyaW9zIHdpdGggZGVlcCBuZXN0aW5nLCB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93aW5nIGRhdGEgYW5kIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cblxuSSd2ZSBjb25maXJtZWQgbXkgYW5hbHlzaXMgYnkgY2hlY2tpbmcgYWxsIGZvdXIgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOYC5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSAtIHRoZSBwYXRjaCBhY3R1YWxseSBjYW5jZWxzIHRoZSBtZXNzYWdlIGlmIGl0J3MgdG9vIGxhcmdlIGluc3RlYWQgb2Ygd3JpdGluZyBhIHRydW5jYXRlZCBsZW5ndGguXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIC0gbm8gc3VjaCBkZXBlbmRlbmNlLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgLSBubyBhbGxvY2F0aW9ucyBhZGRlZC5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyAtIHRoZSBuZXN0IHNpemUgaXMgbm93IHJlc3RyaWN0ZWQgdG8gYFx1MDAzYz0gVTE2X01BWGAuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGVyZSdzIG5vIHBvc3NpYmlsaXR5IG9mIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGluIHRoaXMgY29kZS4gVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGluIHRoaXMgaW5zdGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzg3LCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU4OjE1LjQ3MjU4MjUzNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgYSAxNi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBsZW5ndGggKElGTEFfQUZfU1BFQykgd2hlbiBkdW1waW5nIGJyaWRnZSBwb3J0IFZMQU4gaW5mb3JtYXRpb24sIGNhbmNlbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIGFuZCByZXR1cm5pbmcgLUUyQklHIGlmIHRoZSBuZXN0ZWQgZGF0YSBleGNlZWRzIFUxNl9NQVguIFRvIHN1cHBvcnQgc2V0dGluZyBhbiBleHRlbmRlZCBhY2sgbWVzc2FnZSAoTkxfU0VUX0VSUl9NU0dfTU9EKSwgaXQgdGhyZWFkcyB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgcGFyYW1ldGVyIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AgYWNyb3NzIG5ldCBjb3JlIGFuZCB2YXJpb3VzIGV0aGVybmV0IGRyaXZlcnMuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgcG9pbnRlciBhcml0aG1ldGljIHJlbGllcyBvbiB2YWxpZCBidWZmZXIgcG9pbnRlcnMgKGBza2JfdGFpbF9wb2ludGVyKHNrYilgIGFuZCBgYWZgKSwgYW5kIE5MX1NFVF9FUlJfTVNHX01PRCBzYWZlbHkgaGFuZGxlcyBib3RoIHZhbGlkIGFuZCBOVUxMIGV4dGFjayBwb2ludGVycy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQ7IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 13:53:14 +0000 UTC FinishedAt: 2026-09-12 13:58:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "966b795d-2cd2-4228-8cf2-7d670f9480fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_fill_ifinfo", "br_getlink", "rtnl_bridge_getlink", "ndo_dflt_bridge_getlink", "rtnl_bridge_notify" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZpbGxfaWZpbmZvJiMzNDssCiAgICAmIzM0O2JyX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgcG9pbnRlciBhcml0aG1ldGljIHJlbGllcyBvbiB2YWxpZCBidWZmZXIgcG9pbnRlcnMgKGBza2JfdGFpbF9wb2ludGVyKHNrYilgIGFuZCBgYWZgKSwgYW5kIE5MX1NFVF9FUlJfTVNHX01PRCBzYWZlbHkgaGFuZGxlcyBib3RoIHZhbGlkIGFuZCBOVUxMIGV4dGFjayBwb2ludGVycy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQ7IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgKG5ldC9icmlkZ2UgYW5kIG5ldC9jb3JlL3J0bmV0bGluayksIGFkZGluZyBhIHNpemUgYm91bmRhcnkgY2hlY2sgaW4gYnJfZmlsbF9pZmluZm8oKSB0byBwcmV2ZW50IHUxNiBubGFfbGVuIG92ZXJmbG93IHdoZW4gc2VyaWFsaXppbmcgYnJpZGdlIFZMQU4gaW5mb3JtYXRpb24gaW50byBJRkxBX0FGX1NQRUMsIGFuZCBwbHVtYnMgbmV0bGlua19leHRfYWNrIHRocm91Z2ggbmRvX2JyaWRnZV9nZXRsaW5rIGFjcm9zcyBuZXRfZGV2aWNlX29wcyBhbmQgcnRuZXRsaW5rIGNhbGxlcnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgcmVxdWVzdHMgb24gYnJpZGdlIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YTAyODA3NTVmZWUxZjk5ODNlNzljYWM4ODY3ZjQ1OGU1Y2YzZTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuaW5kZXggY2E5OWY0YjFhNjNjMy4uYTc1MmU2NmJmNjM2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuQEAgLTE2MTU0LDEyICYjNDM7MTYxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZHBfdHVubmVsX25pY19pbmZvIGJueHRfdWRwX3R1bm5lbHMgPSB7XG4gXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHQgICAgICAgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdCAgICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBibnh0ICpicCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBicC1cdTAwM2Vicl9tb2RlLCAwLCAwLFxuLVx0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYm54dF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xuaW5kZXggZWQzMDJmNWVjNDc2OC4uY2M5Yzg3NTM5YTQyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcbkBAIC01MDExLDcgJiM0Mzs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXG4gc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0IGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHN0YXR1cyA9IDA7XG5AQCAtNTAzNyw3ICYjNDM7NTAzNyw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIGhzd19tb2RlID09IFBPUlRfRldEX1RZUEVfVkVQQSA/XG4gXHRcdFx0XHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQixcbi1cdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5pbmRleCBhYmJjNzFlODE1YWUzLi41MmMyYjM5M2FhY2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuQEAgLTEzMTUxLDYgJiM0MzsxMzE1MSw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcbiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZFxuICAqIEBubGZsYWdzOiBuZXRsaW5rIGZsYWdzIHBhc3NlZCBpblxuJiM0MzsgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFja1xuICAqXG4gICogUmV0dXJuIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBoYXJkd2FyZSBicmlkZ2UgaXMgb3BlcmF0aW5nIGluXG4gICogaS5lIFZFQiBvciBWRVBBLlxuQEAgLTEzMTU4LDcgJiM0MzsxMzE1OSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgIGludCBubGZsYWdzKVxuJiM0MztcdFx0XHRcdCAgIGludCBubGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaTQwZV9uZXRkZXZfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGk0MGVfdnNpICp2c2kgPSBucC1cdTAwM2V2c2k7XG5AQCAtMTMxNzUsNyAmIzQzOzEzMTc3LDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIHZlYi1cdTAwM2VicmlkZ2VfbW9kZSxcbi1cdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBmZTQ3ZWMwYmE4MDk0Li4wMzhjZTFmZTViZmU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtODA4NiwxMiAmIzQzOzgwODYsMTQgQEAgaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKVxuICAqIEBkZXY6IHRoZSBuZXRkZXYgYmVpbmcgY29uZmlndXJlZFxuICAqIEBmaWx0ZXJfbWFzazogZmlsdGVyIG1hc2sgcGFzc2VkIGluXG4gICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluXG4mIzQzOyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXG4gICpcbiAgKiBSZXR1cm4gdGhlIGJyaWRnZSBtb2RlIChWRUIvVkVQQSlcbiAgKi9cbiBzdGF0aWMgaW50XG4gaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tXHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuJiM0MztcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihkZXYpO1xuIFx0dTE2IGJtb2RlO1xuQEAgLTgwOTksNyAmIzQzOzgxMDEsNyBAQCBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdGJtb2RlID0gcGYtXHUwMDNlZmlyc3Rfc3ctXHUwMDNlYnJpZGdlX21vZGU7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncyxcbi1cdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbmluZGV4IGY5MTg1NjQ5OGViMmQuLjc3ZGZkODBhNmUzNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuQEAgLTEwNzI2LDcgJiM0MzsxMDcyNiw4IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXG5AQCAtMTA3MzUsNyAmIzQzOzEwNzM2LDcgQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXG4gXHRcdFx0XHQgICAgICAgYWRhcHRlci1cdTAwM2VicmlkZ2VfbW9kZSwgMCwgMCwgbmxmbGFncyxcbi1cdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcbmluZGV4IGZjMTEwYTdkMTZlOGQuLjUzYmY3OWRiZTA4ZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5AQCAtNTI3Nyw3ICYjNDM7NTI3Nyw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXG4gI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcbiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRpbnQgbmxmbGFncylcbiYjNDM7XHRcdFx0XHRpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuQEAgLTUyODgsNyAmIzQzOzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRtb2RlID0gc2V0dGluZyA/IEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUI7XG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbmluZGV4IDc5MjhlNzZkYTcyM2UuLmNiNzUxZGRkYjY4ODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuQEAgLTIyNTcsNyAmIzQzOzIyNTcsNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpXG4gXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZnBfbmV0ICpubiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1MTYgbW9kZTtcbkBAIC0yMjY5LDcgJiM0MzsyMjY5LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jXG5pbmRleCAyOTM1YzJlY2MzMTRiLi5mOTYwY2Y1YTk3YTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xuQEAgLTkzNSw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIHZvaWQgcWV0aF9sMl9icjJkZXZfcHV0KHZvaWQpXG4gXG4gc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgaW50IG5sZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBxZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi1cdTAwM2VtbF9wcml2O1xuQEAgLTk0OSw3ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIG1vZGUsIHByaXYtXHUwMDNlYnJwb3J0X2ZlYXR1cmVzLFxuIFx0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlYnJwb3J0X2h3X2ZlYXR1cmVzLFxuLVx0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZXRoX2JycG9ydF9wb2xpY3lbSUZMQV9CUlBPUlRfTUFYICYjNDM7IDFdID0ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA3MDdiMmU1MWMyYjk3Li4xOGEwM2YwZjZmMTEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4gICpcdFx0XHQgICAgIHUxNiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuICAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiAgKlx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLSAqXHRcdFx0ICAgICBpbnQgbmxmbGFncylcbiYjNDM7ICpcdFx0XHQgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiAgKlx0XHRcdCAgICAgdTE2IGZsYWdzKTtcbiAgKlxuQEAgLTE2NTksNyAmIzQzOzE2NTksOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuIFx0XHRcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0XHQgICAgICB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0ICAgICAgaW50IG5sZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBpbnQgbmxmbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdGludFx0XHRcdCgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdFx0XHRcdCAgICAgIHUxNiBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMjIyLDcgJiM0MzsyMjIsOCBAQCBleHRlcm4gaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICB1MzIgZmlsdGVyX21hc2ssXG4gXHRcdFx0XHQgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaykpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrKSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIGV4dGVybiB2b2lkIHJ0bmxfb2ZmbG9hZF94c3RhdHNfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbmluZGV4IGFlNzZkZjBkZTA1YTAuLjUzNjc2ZGY5ZTRkMTEgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbkBAIC00NTksNyAmIzQzOzQ1OSw3IEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4gXHRcdFx0ICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncyxcbiBcdFx0XHQgIHUzMiBmaWx0ZXJfbWFzaywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHQgIGJvb2wgZ2V0bGluaylcbiYjNDM7XHRcdFx0ICBib29sIGdldGxpbmssIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LVx1MDAzZW9wZXJzdGF0ZSkgOlxuIFx0XHRcdFx0XHQgICAgSUZfT1BFUl9ET1dOO1xuQEAgLTYxMyw2ICYjNDM7NjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBkb25lOlxuIFx0aWYgKGFmKSB7XG4mIzQzO1x0XHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcdTAwM2UgVTE2X01BWCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlwmIzM0Oyk7XG4mIzQzO1x0XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRTJCSUc7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChubG1zZ19nZXRfcG9zKHNrYikgLSAodm9pZCAqKWFmIFx1MDAzZSBubGFfYXR0cl9zaXplKDApKVxuIFx0XHRcdG5sYV9uZXN0X2VuZChza2IsIGFmKTtcbiBcdFx0ZWxzZVxuQEAgLTY1NCw3ICYjNDM7NjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdGlmIChza2IgPT0gTlVMTClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4tXHRlcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UpO1xuJiM0MztcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSxcbiYjNDM7XHRcdFx0ICAgICBOVUxMKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGJyX25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuQEAgLTY4MCw3ICYjNDM7Njg3LDggQEAgdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuICAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LXG4gICovXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbi1cdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuJiM0MztcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuJiM0MztcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTtcbiBcbkBAIC02OTIsNyAmIzQzOzcwMCw3IEBAIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBubGZsYWdzLFxuLVx0XHRcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUpO1xuJiM0MztcdFx0XHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggMDljMzk3ZTMwMzMwNy4uZWRiZTdhMWY1NzM2MyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuQEAgLTIxNzksNyAmIzQzOzIxNzksNyBAQCBpbnQgYnJfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MsXG4gXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBpbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MpO1xuIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHQgICAgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyk7XG4mIzQzO1x0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGJyX3Byb2Nlc3Nfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0XHQgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgaW50IGNtZCxcbiBcdFx0XHQgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnZpbmZvX2N1cnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggYmU5ZDE2MjViYWMzMS4uOTY3YjU4N2VmNjY0OCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTUzOTgsNyAmIzQzOzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrLFxuIFx0XHRcdCAgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0ICAgICB1MzIgZmlsdGVyX21hc2spKVxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgZmlsdGVyX21hc2spLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuIFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xuQEAgLTU1NzQsNyAmIzQzOzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdGlmIChpZHggXHUwMDNlPSBjYi1cdTAwM2VhcmdzWzBdKSB7XG4gXHRcdFx0XHRlcnIgPSBicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoXG4gXHRcdFx0XHRcdFx0c2tiLCBwb3J0aWQsIHNlcSwgZGV2LFxuLVx0XHRcdFx0XHRcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7XG4mIzQzO1x0XHRcdFx0XHRcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSxcbiYjNDM7XHRcdFx0XHRcdFx0Y2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU1OTAsNyAmIzQzOzU1OTIsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHNlcSwgZGV2LFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0XHQgICAgICBOTE1fRl9NVUxUSSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgTkxNX0ZfTVVMVEksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgY2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU2MjQsNyAmIzQzOzU2MjcsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBicmlkZ2Vfbmxtc2dfc2l6ZSh2b2lkKVxuIFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7XHQvKiBJRkxBX0JSSURHRV9NT0RFICovXG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTU2MzksNyAmIzQzOzU2NDMsNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRnb3RvIGVycm91dDtcbiBcdH1cbiBcbi1cdGVyciA9IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCk7XG4mIzQzO1x0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG5AQCAtNTczMCw3ICYjNDM7NTczNCw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG4gXHRcdFx0ICogY2hhbmdlXG4gXHRcdFx0ICovXG4tXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7XG4mIzQzO1x0XHRcdGVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYsIGV4dGFjayk7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01ODA1LDcgJiM0Mzs1ODA5LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9kZWxsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcbiBcdFx0XHQgKiBjaGFuZ2VcbiBcdFx0XHQgKi9cbi1cdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcbiYjNDM7XHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbiBcdFx0fVxuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZpbGxfaWZpbmZvJiMzNDssCiAgICAmIzM0O2JyX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgKG5ldC9icmlkZ2UgYW5kIG5ldC9jb3JlL3J0bmV0bGluayksIGFkZGluZyBhIHNpemUgYm91bmRhcnkgY2hlY2sgaW4gYnJfZmlsbF9pZmluZm8oKSB0byBwcmV2ZW50IHUxNiBubGFfbGVuIG92ZXJmbG93IHdoZW4gc2VyaWFsaXppbmcgYnJpZGdlIFZMQU4gaW5mb3JtYXRpb24gaW50byBJRkxBX0FGX1NQRUMsIGFuZCBwbHVtYnMgbmV0bGlua19leHRfYWNrIHRocm91Z2ggbmRvX2JyaWRnZV9nZXRsaW5rIGFjcm9zcyBuZXRfZGV2aWNlX29wcyBhbmQgcnRuZXRsaW5rIGNhbGxlcnMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgcmVxdWVzdHMgb24gYnJpZGdlIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YTAyODA3NTVmZWUxZjk5ODNlNzljYWM4ODY3ZjQ1OGU1Y2YzZTRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jCmluZGV4IGNhOTlmNGIxYTYzYzMuLmE3NTJlNjZiZjYzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jCkBAIC0xNjE1NCwxMiAmIzQzOzE2MTU0LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdWRwX3R1bm5lbF9uaWNfaW5mbyBibnh0X3VkcF90dW5uZWxzID0gewogCiBzdGF0aWMgaW50IGJueHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkgICAgICAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJICAgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIGJwLSZndDticl9tb2RlLCAwLCAwLAotCQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGludCBibnh0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKaW5kZXggZWQzMDJmNWVjNDc2OC4uY2M5Yzg3NTM5YTQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCkBAIC01MDExLDcgJiM0Mzs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAKIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywKLQkJCQkgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc3RhdHVzID0gMDsKQEAgLTUwMzcsNyAmIzQzOzUwMzcsNyBAQCBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIGhzd19tb2RlID09IFBPUlRfRldEX1RZUEVfVkVQQSA/CiAJCQkJICAgICAgIEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUIsCi0JCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggYWJiYzcxZTgxNWFlMy4uNTJjMmIzOTNhYWNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC0xMzE1MSw2ICYjNDM7MTMxNTEsNyBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWQKICAqIEBmaWx0ZXJfbWFzazogdW51c2VkCiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW4KJiM0MzsgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFjawogICoKICAqIFJldHVybiB0aGUgbW9kZSBpbiB3aGljaCB0aGUgaGFyZHdhcmUgYnJpZGdlIGlzIG9wZXJhdGluZyBpbgogICogaS5lIFZFQiBvciBWRVBBLgpAQCAtMTMxNTgsNyAmIzQzOzEzMTU5LDggQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzaywKLQkJCQkgICBpbnQgbmxmbGFncykKJiM0MzsJCQkJICAgaW50IG5sZmxhZ3MsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgaTQwZV9uZXRkZXZfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gbnAtJmd0O3ZzaTsKQEAgLTEzMTc1LDcgJiM0MzsxMzE3Nyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCB2ZWItJmd0O2JyaWRnZV9tb2RlLAotCQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGZlNDdlYzBiYTgwOTQuLjAzOGNlMWZlNWJmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC04MDg2LDEyICYjNDM7ODA4NiwxNCBAQCBpbnQgaWNlX3NldF9yc3NfaGZ1bmMoc3RydWN0IGljZV92c2kgKnZzaSwgdTggaGZ1bmMpCiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWQKICAqIEBmaWx0ZXJfbWFzazogZmlsdGVyIG1hc2sgcGFzc2VkIGluCiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW4KJiM0MzsgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFjawogICoKICAqIFJldHVybiB0aGUgYnJpZGdlIG1vZGUgKFZFQi9WRVBBKQogICovCiBzdGF0aWMgaW50CiBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKLQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncykKJiM0MzsJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsCiYjNDM7CQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGljZV9wZiAqcGYgPSBpY2VfbmV0ZGV2X3RvX3BmKGRldik7CiAJdTE2IGJtb2RlOwpAQCAtODA5OSw3ICYjNDM7ODEwMSw3IEBAIGljZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCWJtb2RlID0gcGYtJmd0O2ZpcnN0X3N3LSZndDticmlkZ2VfbW9kZTsKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIGJtb2RlLCAwLCAwLCBubGZsYWdzLAotCQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggZjkxODU2NDk4ZWIyZC4uNzdkZmQ4MGE2ZTM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMTA3MjYsNyAmIzQzOzEwNzI2LDggQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncykKJiM0MzsJCQkJICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBpeGdiZV9mcm9tX25ldGRldihkZXYpOwogCkBAIC0xMDczNSw3ICYjNDM7MTA3MzYsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCiAJcmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwKIAkJCQkgICAgICAgYWRhcHRlci0mZ3Q7YnJpZGdlX21vZGUsIDAsIDAsIG5sZmxhZ3MsCi0JCQkJICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwppbmRleCBmYzExMGE3ZDE2ZThkLi41M2JmNzlkYmUwOGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKQEAgLTUyNzcsNyAmIzQzOzUyNzcsNyBAQCBzdGF0aWMgaW50IG1seDVlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqeGRwKQogI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0gKIHN0YXRpYyBpbnQgbWx4NWVfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkJaW50IG5sZmxhZ3MpCiYjNDM7CQkJCWludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi0mZ3Q7bWRldjsKQEAgLTUyODgsNyAmIzQzOzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJbW9kZSA9IHNldHRpbmcgPyBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCOwogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIG1vZGUsCi0JCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jCmluZGV4IDc5MjhlNzZkYTcyM2UuLmNiNzUxZGRkYjY4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMKQEAgLTIyNTcsNyAmIzQzOzIyNTcsNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpCiAKIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJCSAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgbmZwX25ldCAqbm4gPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNiBtb2RlOwpAQCAtMjI2OSw3ICYjNDM7MjI2OSw3IEBAIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCSAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCOwogCiAJcmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgbW9kZSwgMCwgMCwKLQkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCmluZGV4IDI5MzVjMmVjYzMxNGIuLmY5NjBjZjVhOTdhMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwpAQCAtOTM1LDcgJiM0Mzs5MzUsNyBAQCBzdGF0aWMgdm9pZCBxZXRoX2wyX2JyMmRldl9wdXQodm9pZCkKIAogc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkJICBpbnQgbmxmbGFncykKJiM0MzsJCQkJICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBxZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtJmd0O21sX3ByaXY7CkBAIC05NDksNyAmIzQzOzk0OSw3IEBAIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIG1vZGUsIHByaXYtJmd0O2JycG9ydF9mZWF0dXJlcywKIAkJCQkgICAgICAgcHJpdi0mZ3Q7YnJwb3J0X2h3X2ZlYXR1cmVzLAotCQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHFldGhfYnJwb3J0X3BvbGljeVtJRkxBX0JSUE9SVF9NQVggJiM0MzsgMV0gPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA3MDdiMmU1MWMyYjk3Li4xOGEwM2YwZjZmMTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7CiAgKgkJCSAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiAgKiBpbnQgKCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAgKgkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotICoJCQkgICAgIGludCBubGZsYWdzKQomIzQzOyAqCQkJICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKICAqCQkJICAgICB1MTYgZmxhZ3MpOwogICoKQEAgLTE2NTksNyAmIzQzOzE2NTksOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgewogCQkJCQkJICAgICAgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICB1MzIgZmlsdGVyX21hc2ssCi0JCQkJCQkgICAgICBpbnQgbmxmbGFncyk7CiYjNDM7CQkJCQkJICAgICAgaW50IG5sZmxhZ3MsCiYjNDM7CQkJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAlpbnQJCQkoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJCQkJICAgICAgdTE2IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMjIyLDcgJiM0MzsyMjIsOCBAQCBleHRlcm4gaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJICAgdTMyIGZpbHRlcl9tYXNrLAogCQkJCSAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJICAgIHUzMiBmaWx0ZXJfbWFzaykpOwomIzQzOwkJCQkJCSAgICB1MzIgZmlsdGVyX21hc2spLAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogCiBleHRlcm4gdm9pZCBydG5sX29mZmxvYWRfeHN0YXRzX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBhZTc2ZGYwZGUwNWEwLi41MzY3NmRmOWU0ZDExIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtNDU5LDcgJiM0Mzs0NTksNyBAQCBzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCiAJCQkgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICB1MzIgZmlsdGVyX21hc2ssIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIGJvb2wgZ2V0bGluaykKJiM0MzsJCQkgIGJvb2wgZ2V0bGluaywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IFJFQURfT05DRShkZXYtJmd0O29wZXJzdGF0ZSkgOgogCQkJCQkgICAgSUZfT1BFUl9ET1dOOwpAQCAtNjEzLDYgJiM0Mzs2MTMsMTIgQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiBkb25lOgogCWlmIChhZikgewomIzQzOwkJaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgJmd0OyBVMTZfTUFYKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTiYjMzQ7KTsKJiM0MzsJCQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwomIzQzOwkJCXJldHVybiAtRTJCSUc7CiYjNDM7CQl9CiAJCWlmIChubG1zZ19nZXRfcG9zKHNrYikgLSAodm9pZCAqKWFmICZndDsgbmxhX2F0dHJfc2l6ZSgwKSkKIAkJCW5sYV9uZXN0X2VuZChza2IsIGFmKTsKIAkJZWxzZQpAQCAtNjU0LDcgJiM0Mzs2NjAsOCBAQCB2b2lkIGJyX2luZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CiAKLQllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UpOwomIzQzOwllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UsCiYjNDM7CQkJICAgICBOVUxMKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gYnJfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC02ODAsNyAmIzQzOzY4Nyw4IEBAIHZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKICAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LCiAgKi8KIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCi0JICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpCiYjNDM7CSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLAomIzQzOwkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CiAKQEAgLTY5Miw3ICYjNDM7NzAwLDcgQEAgaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCBwaWQsIHNlcSwgUlRNX05FV0xJTkssIG5sZmxhZ3MsCi0JCQkgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlKTsKJiM0MzsJCQkgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spOwogfQogCiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IDA5YzM5N2UzMDMzMDcuLmVkYmU3YTFmNTczNjMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC0yMTc5LDcgJiM0MzsyMTc5LDcgQEAgaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzLAogCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzKTsKIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpOwomIzQzOwkgICAgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBicl9wcm9jZXNzX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCQkgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgaW50IGNtZCwKIAkJCSBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqdmluZm9fY3VyciwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggYmU5ZDE2MjViYWMzMS4uOTY3YjU4N2VmNjY0OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTUzOTgsNyAmIzQzOzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCSAgICB1MzIgZmlsdGVyX21hc2ssCiAJCQkgICAgaW50ICgqdmxhbl9maWxsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgdTMyIGZpbHRlcl9tYXNrKSkKJiM0MzsJCQkJCSAgICAgdTMyIGZpbHRlcl9tYXNrKSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKQEAgLTU1NzQsNyAmIzQzOzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJaWYgKGlkeCAmZ3Q7PSBjYi0mZ3Q7YXJnc1swXSkgewogCQkJCWVyciA9IGJyX2Rldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKAogCQkJCQkJc2tiLCBwb3J0aWQsIHNlcSwgZGV2LAotCQkJCQkJZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJKTsKJiM0MzsJCQkJCQlmaWx0ZXJfbWFzaywgTkxNX0ZfTVVMVEksCiYjNDM7CQkJCQkJY2ItJmd0O2V4dGFjayk7CiAJCQkJaWYgKGVyciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApIHsKIAkJCQkJaWYgKGxpa2VseShza2ItJmd0O2xlbikpCiAJCQkJCQlicmVhazsKQEAgLTU1OTAsNyAmIzQzOzU1OTIsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCWVyciA9IG9wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLAogCQkJCQkJCSAgICAgIHNlcSwgZGV2LAogCQkJCQkJCSAgICAgIGZpbHRlcl9tYXNrLAotCQkJCQkJCSAgICAgIE5MTV9GX01VTFRJKTsKJiM0MzsJCQkJCQkJICAgICAgTkxNX0ZfTVVMVEksCiYjNDM7CQkJCQkJCSAgICAgIGNiLSZndDtleHRhY2spOwogCQkJCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FT1BOT1RTVVBQKSB7CiAJCQkJCWlmIChsaWtlbHkoc2tiLSZndDtsZW4pKQogCQkJCQkJYnJlYWs7CkBAIC01NjI0LDcgJiM0Mzs1NjI3LDggQEAgc3RhdGljIGlubGluZSBzaXplX3QgYnJpZGdlX25sbXNnX3NpemUodm9pZCkKIAkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOwkvKiBJRkxBX0JSSURHRV9NT0RFICovCiB9CiAKLXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7c3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC01NjM5LDcgJiM0Mzs1NjQzLDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JZXJyID0gZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDAsIDApOwomIzQzOwllcnIgPSBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCwgZXh0YWNrKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnJvdXQ7CiAKQEAgLTU3MzAsNyAmIzQzOzU3MzQsNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX3NldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlCiAJCQkgKiBjaGFuZ2UKIAkJCSAqLwotCQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7CiYjNDM7CQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTsKIAkJfQogCX0KIApAQCAtNTgwNSw3ICYjNDM7NTgwOSw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCS8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2UKIAkJCSAqIGNoYW5nZQogCQkJICovCi0JCQllcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTsKJiM0MzsJCQllcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spOwogCQl9CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCBJIG5lZWQgdG8gZXZhbHVhdGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSB3aGF0IGl0IHRvdWNoZXMuIEFoLCByaWdodCwgYSB3aG9sZSBzd2F0aCBvZiBuZXR3b3JrIGRyaXZlcnM6IEJyb2FkY29tLCBFbXVsZXgsIEludGVsIChpNDBlLCBpY2UsIGl4Z2JlKSwgTWVsbGFub3gsIE5ldHJvbm9tZSwgYW5kIGV2ZW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJbnRlcmVzdGluZy4gUGx1cywgY2hhbmdlcyB0byBgbmV0ZGV2aWNlLmhgLCBgcnRuZXRsaW5rLmhgLCBhbmQgc29tZSBrZXkgYnJpZGdlIGNvZGUgKGBicl9uZXRsaW5rLmNgLCBgYnJfcHJpdmF0ZS5oYCksIGFuZCBgcnRuZXRsaW5rLmNgIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYXJlYS4gVGhhdCYjMzk7cyBhIHByZXR0eSB3aWRlIHNjb3BlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgY2hhbmdlcyBpbiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFyZSBncmFiYmluZyBteSBhdHRlbnRpb24uIFRoZXkmIzM5O3ZlIGFkZGVkIGEgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgYXJndW1lbnQgdG8gYGJyX2ZpbGxfaWZpbmZvYCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIEFuZCB0aGVyZSYjMzk7cyB0aGlzIG5ldyBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWClgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCByZXR1cm5zIGAtRTJCSUdgLiBBaGEhIFNvLCB0aGV5JiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc2l6ZSBsaW1pdGF0aW9ucyB3aXRoaW4gdGhlIE5ldGxpbmsgbWVzc2FnZXMgd2hlbiBoYW5kbGluZyBWTEFOIGluZm9ybWF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGJyaWRnZSBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgbGlrZSB0aGUgVkxBTiBpbmZvcm1hdGlvbiBtaWdodCBiZSBnZXR0aW5nIHRvbyBsYXJnZSB0byBmaXQgaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlIGluIHNvbWUgY2FzZXMuCgpUaGUgaW50ZXJlc3RpbmcgcGllY2UgaXMgdGhlIGAtRTJCSUdgIGVycm9yIGNvZGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgVkxBTiBpbmZvcm1hdGlvbiBpcyBub3QgZml0dGluZyB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhhdCBzdWdnZXN0cyBzb21lIGxpbWl0IHRvIHRoZSBtZXNzYWdlIHNpemUgaW4gdGhlIGtlcm5lbC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKldoeSogd2FzIHRoaXMgY2hlY2sgYWRkZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdhcyB0aGlzIGEga25vd24gaXNzdWUsIGEgbmV3bHkgZGlzY292ZXJlZCBvbmUsIG9yIGEgcmVzcG9uc2UgdG8gc29tZSBzcGVjaWZpYyB1c2VyIHJlcG9ydHMgb3Igc2NlbmFyaW9zPyBJIG5lZWQgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIHByb2JsZW0gYW5kIGlmIHRoZSBhcHByb2FjaCBpcyBjb3JyZWN0LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBnaXQgbG9nIGFuZCBzZWUgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29tbWl0cyB0ZWxsIG1lIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02MTctXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjYxODpcdFx0XHRcdFx0ICAgXCYjMzQ7VkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02MTktXHRcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29tbWl0JiMzOTtzIEludGVudCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjdXJyZW50IGBIRUFEYCBjb21taXQuIFRoZSBpZGVhbCBhcHByb2FjaCB3b3VsZCBiZSB0byBkaXZlIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgdGhlIGdyZXBwZXIgdG9vbCBpc24mIzM5O3QgZGlzcGxheWluZyBgZ2l0IGxvZ2Agb3V0cHV0LiBIbW0sIHRoYXQmIzM5O3MgYSBsaW1pdGF0aW9uLiBJIG5lZWQgdG8gYWRhcHQuIElzIHRoZXJlIGEgd2F5IHRvIGluZGlyZWN0bHkgYWNjZXNzIHRoZSBjb21taXQgaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgb3RoZXIgdG9vbHM/IENhbiBJIHVzZSBzb21ldGhpbmcgbGlrZSBgY29kZXNlYXJjaGAgb3IgYHJlYWQtZmlsZWAgdG8gZ2xlYW4gaW5zaWdodHMgZnJvbSByZWxhdGVkIGZpbGVzPyBObywgSSYjMzk7bSBsaW1pdGVkIHRvIGBncmVwcGVyYCwgYGNvZGVzZWFyY2hgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AuIExvb2tzIGxpa2UgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gYSBgZ2l0IGxvZ2AgdG9vbCBkaXJlY3RseSwgd2hpY2ggbWFrZXMgdGhpcyB0cmlja2llci4KCkFscmlnaHQsIGEgbW9yZSBkaXJlY3QgYXBwcm9hY2ggaXMgb2ZmIHRoZSB0YWJsZS4gTGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGZvciBjbHVlcyB3aXRoaW4gdGhlIGNvZGViYXNlIGl0c2VsZi4gTGV0JiMzOTtzIGV4YW1pbmUgYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhcm91bmQgbGluZSA2MTAuIE1heWJlIHNvbWV0aGluZyBpbiB0aGF0IHNwZWNpZmljIGFyZWEgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBjb21taXQmIzM5O3MgcHVycG9zZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBhcm91bmQgdGhhdCBsaW5lIHRvIHNlZSBpZiBpdCBzaGVkcyBhbnkgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODU6XHRcdFx0XHRlcnIgPSBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhza2IsIGJyLCBnZXRsaW5rKTtcbiA1ODY6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1ODc6XHRcdFx0XHRpZiAoZXJyKVxuIDU4ODpcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNTg5Olx0XHRcdH1cbiA1OTA6XHRcbiA1OTE6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgY2ZtX25lc3QpO1xuIDU5MjpcdFx0fVxuIDU5MzpcdFxuIDU5NDpcdFx0aWYgKChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX01TVCkgXHUwMDI2XHUwMDI2XG4gNTk1Olx0XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwb3J0KSB7XG4gNTk2Olx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4gNTk3Olx0XHRcdHN0cnVjdCBubGF0dHIgKm1zdF9uZXN0O1xuIDU5ODpcdFx0XHRpbnQgZXJyO1xuIDU5OTpcdFxuIDYwMDpcdFx0XHRpZiAoIXZnIHx8ICF2Zy1cdTAwM2VudW1fdmxhbnMpXG4gNjAxOlx0XHRcdFx0Z290byBkb25lO1xuIDYwMjpcdFxuIDYwMzpcdFx0XHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcbiA2MDQ6XHRcdFx0aWYgKCFtc3RfbmVzdClcbiA2MDU6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MDY6XHRcbiA2MDc6XHRcdFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcbiA2MDg6XHRcdFx0aWYgKGVycilcbiA2MDk6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MTA6XHRcbiA2MTE6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xuIDYxMjpcdFx0fVxuIDYxMzpcdFxuIDYxNDpcdGRvbmU6XG4gNjE1Olx0XHRpZiAoYWYpIHtcbiA2MTY6XHRcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgXHUwMDNlIFUxNl9NQVgpIHtcbiA2MTc6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIDYxODpcdFx0XHRcdFx0XHQgICBcJiMzNDtWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOXCYjMzQ7KTtcbiA2MTk6XHRcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuIDYyMDpcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gNjIxOlx0XHRcdH1cbiA2MjI6XHRcdFx0aWYgKG5sbXNnX2dldF9wb3Moc2tiKSAtICh2b2lkICopYWYgXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXG4gNjIzOlx0XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgYWYpO1xuIDYyNDpcdFx0XHRlbHNlXG4gNjI1Olx0XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYWYpO1xuIDYyNjpcdFx0fVxuIDYyNzpcdFxuIDYyODpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiA2Mjk6XHRcdHJldHVybiAwO1xuIDYzMDpcdFxuIDYzMTpcdG5sYV9wdXRfZmFpbHVyZTpcbiA2MzI6XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4gNjMzOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDYzNDpcdH1cbiA2MzU6XHRcbiA2MzY6XHR2b2lkIGJyX2luZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIDYzNzpcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTMyIGZpbHRlcilcbiA2Mzg6XHR7XG4gNjM5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDY0MDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA2NDE6XHRcdGludCBlcnIgPSAtRU5PQlVGUztcbiA2NDI6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA2NDM6XHRcdHUxNiBwb3J0X25vID0gMDtcbiA2NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBicl9maWxsX2lmaW5mb2AgYW5kIGl0cyBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoaXMgYGFmYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIGFzIGFuIGBubGF0dHJgLCBhbmQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgc29tZXdoZXJlIGVhcmxpZXIgaW4gdGhlIGBicl9maWxsX2lmaW5mb2AgZnVuY3Rpb24uIFJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGdvIGJhY2sgYW5kIHJlLXJlYWQgdGhlIHJlbGV2YW50IHBhcnQgb2YgYGJyX2ZpbGxfaWZpbmZvYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgYGFmYCBpcyBlc3RhYmxpc2hlZCwgYmVmb3JlIEkgY2FuIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2UuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2MDpcdFx0XHRcdCAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4gNDYxOlx0XHRcdFx0ICB1MzIgZmlsdGVyX21hc2ssIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNDYyOlx0XHRcdFx0ICBib29sIGdldGxpbmssIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA0NjM6XHR7XG4gNDY0Olx0XHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LVx1MDAzZW9wZXJzdGF0ZSkgOlxuIDQ2NTpcdFx0XHRcdFx0XHQgICAgSUZfT1BFUl9ET1dOO1xuIDQ2NjpcdFx0c3RydWN0IG5sYXR0ciAqYWYgPSBOVUxMO1xuIDQ2NzpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuIDQ2ODpcdFx0c3RydWN0IGlmaW5mb21zZyAqaGRyO1xuIDQ2OTpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4gNDcwOlx0XG4gNDcxOlx0XHRpZiAocG9ydClcbiA0NzI6XHRcdFx0YnIgPSBwb3J0LVx1MDAzZWJyO1xuIDQ3MzpcdFx0ZWxzZVxuIDQ3NDpcdFx0XHRiciA9IG5ldGRldl9wcml2KGRldik7XG4gNDc1Olx0XG4gNDc2Olx0XHRicl9kZWJ1ZyhiciwgXCYjMzQ7YnJfZmlsbF9pZmluZm8gZXZlbnQgJWQgcG9ydCAlcyBtYXN0ZXIgJXNcXG5cJiMzNDssXG4gNDc3Olx0XHRcdCAgICAgZXZlbnQsIGRldi1cdTAwM2VuYW1lLCBici1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gNDc4Olx0XG4gNDc5Olx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqaGRyKSwgZmxhZ3MpO1xuIDQ4MDpcdFx0aWYgKG5saCA9PSBOVUxMKVxuIDQ4MTpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDQ4MjpcdFxuIDQ4MzpcdFx0aGRyID0gbmxtc2dfZGF0YShubGgpO1xuIDQ4NDpcdFx0aGRyLVx1MDAzZWlmaV9mYW1pbHkgPSBBRl9CUklER0U7XG4gNDg1Olx0XHRoZHItXHUwMDNlX19pZmlfcGFkID0gMDtcbiA0ODY6XHRcdGhkci1cdTAwM2VpZmlfdHlwZSA9IGRldi1cdTAwM2V0eXBlO1xuIDQ4NzpcdFx0aGRyLVx1MDAzZWlmaV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuIDQ4ODpcdFx0aGRyLVx1MDAzZWlmaV9mbGFncyA9IG5ldGlmX2dldF9mbGFncyhkZXYpO1xuIDQ4OTpcdFx0aGRyLVx1MDAzZWlmaV9jaGFuZ2UgPSAwO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgSUZMQV9JRk5BTUUsIGRldi1cdTAwM2VuYW1lKSB8fFxuIDQ5MjpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9NQVNURVIsIGJyLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4KSB8fFxuIDQ5MzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9NVFUsIGRldi1cdTAwM2VtdHUpIHx8XG4gNDk0Olx0XHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfT1BFUlNUQVRFLCBvcGVyc3RhdGUpIHx8XG4gNDk1Olx0XHQgICAgKGRldi1cdTAwM2VhZGRyX2xlbiBcdTAwMjZcdTAwMjZcbiA0OTY6XHRcdCAgICAgbmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LVx1MDAzZWFkZHJfbGVuLCBkZXYtXHUwMDNlZGV2X2FkZHIpKSB8fFxuIDQ5NzpcdFx0ICAgIChkZXYtXHUwMDNlaWZpbmRleCAhPSBkZXZfZ2V0X2lmbGluayhkZXYpIFx1MDAyNlx1MDAyNlxuIDQ5ODpcdFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTElOSywgZGV2X2dldF9pZmxpbmsoZGV2KSkpKVxuIDQ5OTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA1MDA6XHRcbiA1MDE6XHRcdGlmIChldmVudCA9PSBSVE1fTkVXTElOSyBcdTAwMjZcdTAwMjYgcG9ydCkge1xuIDUwMjpcdFx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuIDUwMzpcdFxuIDUwNDpcdFx0XHRuZXN0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX1BST1RJTkZPKTtcbiA1MDU6XHRcdFx0aWYgKG5lc3QgPT0gTlVMTCB8fCBicl9wb3J0X2ZpbGxfYXR0cnMoc2tiLCBwb3J0KSBcdTAwM2MgMClcbiA1MDY6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA1MDc6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4gNTA4Olx0XHR9XG4gNTA5Olx0XG4gNTEwOlx0XHRpZiAoZmlsdGVyX21hc2sgXHUwMDI2IChSVEVYVF9GSUxURVJfQlJWTEFOIHxcbiA1MTE6XHRcdFx0XHQgICBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgfFxuIDUxMjpcdFx0XHRcdCAgIFJURVhUX0ZJTFRFUl9NUlAgfFxuIDUxMzpcdFx0XHRcdCAgIFJURVhUX0ZJTFRFUl9DRk1fQ09ORklHIHxcbiA1MTQ6XHRcdFx0XHQgICBSVEVYVF9GSUxURVJfQ0ZNX1NUQVRVUyB8XG4gNTE1Olx0XHRcdFx0ICAgUlRFWFRfRklMVEVSX01TVCkpIHtcbiA1MTY6XHRcdFx0YWYgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0FGX1NQRUMpO1xuIDUxNzpcdFx0XHRpZiAoIWFmKVxuIDUxODpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDUxOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDU3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYWZgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgY3JlYXRlZCB1c2luZyBgbmxhX25lc3Rfc3RhcnRfbm9mbGFnYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGFmLSZndDtubGFfbGVuYCBpcyBhIGB1MTZgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiAgVGhpcyBpcyBhIGNyaXRpY2FsIG9ic2VydmF0aW9uLgoKVGhlIGNvZGUgaXMgY2hlY2tpbmcgZm9yIGEgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGNhbGN1bGF0ZXMgaWYgdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgYGFmYCBleGNlZWRzIHRoZSBtYXhpbXVtIHZhbHVlIGEgYHUxNmAgY2FuIGhvbGQgKGBVMTZfTUFYYCkuIEl0JiMzOTtzIHVzaW5nIGBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmYC4gSWYgdGhpcyBkaWZmZXJlbmNlICppcyogZ3JlYXRlciB0aGFuIGBVMTZfTUFYYCwgdGhlbiB0aGUgYG5sYV9sZW5gIGZpZWxkIHdpdGhpbiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSB3aWxsIHdyYXAgYXJvdW5kIHdoZW4gYG5sYV9uZXN0X2VuZChza2IsIGFmKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgY2xhc3NpYyBpbnRlZ2VyIG92ZXJmbG93IHNpdHVhdGlvbi4KClRoZSBjb2RlIHNuaXBwZXQgYWRkcmVzc2VzIHRoaXMgb3ZlcmZsb3cuIElmIGl0IGRldGVjdHMgdGhlIG92ZXJmbG93LCBpdCBzZXRzIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgYE5MX1NFVF9FUlJfTVNHX01PRGAgYW5kIHJldHVybnMgYW4gZXJyb3IgKGAtRTJCSUdgKSwgY2FuY2VsbGluZyB0aGUgbWVzc2FnZSB3aXRoIGBubG1zZ19jYW5jZWxgLiAgVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgdGhlIGBleHRhY2tgIHN0cnVjdHVyZSBoYXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AuIEkgc2VlIHRoYXQgdGhlIGZpeCBpbnZvbHZlZCB1cGRhdGluZyBkcml2ZXJzIHdoaWNoIGltcGxlbWVudCBgbmRvX2JyaWRnZV9nZXRsaW5rYCwgbGlrZSBgYm54dGAsIGBiZW5ldGAsIGBpNDBlYCwgYGljZWAsIGBpeGdiZWAsIGBtbHg1YCwgYG5mcGAsIGBxZXRoYCwgYW5kIGBicl9uZXRsaW5rYCAoYGJyX2dldGxpbmtgKS4gQWxzbyBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgIGFuZCBgcnRubF9icmlkZ2VfZ2V0bGlua2AgYXJlIHBhdGNoZWQgYXMgd2VsbC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gYG5ldC9icmlkZ2VgIGlzIGEgY29yZSBuZXR3b3JraW5nIG1vZHVsZSBlbmFibGVkIGJ5IGBDT05GSUdfQlJJREdFYC4gYGJyX2dldGxpbmtgIGlzIHBhcnQgb2YgaXQgYWxvbmcgd2l0aCBgYnJfZmlsbF9pZmluZm9gLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGFuZCBgcnRubF9icmlkZ2VfZGVsbGlua2AuIFRoaXMgbWVhbnMgYnJpZGdlIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQsIG1hbmlwdWxhdGVkLCBhbmQgcXVlcmllZCB2aWEgcnRuZXRsaW5rLCBldmVuIGJ5IG5vbi1wcml2aWxlZ2VkIHVzZXJzIGluIG5ldHdvcmsgbmFtZXNwYWNlcyAob3IgcHJpdmlsZWdlZCB1c2VycyB3aXRoIG5ldHdvcmsgYWRtaW5pc3RyYXRpb24gcmlnaHRzKS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBjb250YWluZXJpemVkIGVudmlyb25tZW50cy4KClN5emthbGxlciwgaW4gcGFydGljdWxhciwgZnJlcXVlbnRseSBjcmVhdGVzIGJyaWRnZSBkZXZpY2VzLCBjb25maWd1cmVzIFZMQU5zIG9uIGJyaWRnZSBwb3J0cywgYW5kIHF1ZXJpZXMgYnJpZGdlIGluZm9ybWF0aW9uIHVzaW5nIGBSVE1fR0VUTElOS2AsIGBSVE1fU0VUTElOS2AsIGFuZCBgUlRNX0RFTExJTktgIHJlcXVlc3RzLiBUaGF0IG1ha2VzIHRoaXMgYSB2ZXJ5IHBsYXVzaWJsZSB0YXJnZXQgZm9yIGV4cGxvaXRhdGlvbiEgIEkgbmVlZCB0byBnbyBkZWVwZXIgbm93IGFuZCBzZWUgaG93IGBicl9nZXRsaW5rYCBpcyBhY3R1YWxseSB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgY2FsbHMgdG8gYG5kb19icmlkZ2VfZ2V0bGlua2Agb3IgdG8gYGJyX2dldGxpbmtgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9nZXRsaW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfZGV2aWNlLmM9NDM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnJfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ2OC1cdC5uZG9fbWRiX2dldFx0XHQgPSBicl9tZGJfZ2V0LFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzo0Njk6XHQubmRvX2JyaWRnZV9nZXRsaW5rXHQgPSBicl9nZXRsaW5rLFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NzAtXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQgPSBicl9zZXRsaW5rLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTY3OD12b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjg4LSAqL1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6Njg5OmludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02OTAtXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMTgwPWludCBicl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTgxOmludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTgyLVx0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJyaWRnZSBOZXRsaW5rIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBicmlkZ2UgbmV0bGluayBvcGVyYXRpb25zIHdvcmssIHNwZWNpZmljYWxseSBhcm91bmQgYFJUTV9HRVRMSU5LYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGBicl9uZXRkZXZfb3BzYCBzdHJ1Y3QgaGFzIGAubmRvX2JyaWRnZV9nZXRsaW5rYCBkZWZpbmVkIGFzIGBicl9nZXRsaW5rYC4gVGhpcyBpcyBrZXkgYmVjYXVzZSB3aGVuIGEgdXNlciBzZW5kcyBhbiBgUlRNX0dFVExJTktgIG1lc3NhZ2Ugd2l0aCBgQUZfQlJJREdFYCB2aWEgYSBuZXRsaW5rIHNvY2tldCDigJMgb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB0cmlnZ2VycyB0aGUgZHVtcCByZXF1ZXN0IGBydG5sX2JyaWRnZV9nZXRsaW5rYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIOKAkyB0aGUgc3lzdGVtIHVsdGltYXRlbHkgY2FsbHMgYGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKC4uLiwgY2ItJmd0O2V4dGFjaylgLgoKSSYjMzk7bSBhbHNvIG5vdGluZyB0aGF0IGJvdGggYHJ0bmxfYnJpZGdlX3NldGxpbmtgIGFuZCBgcnRubF9icmlkZ2VfZGVsbGlua2AgY2FsbCBgcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rYCBhZ2FpbiwgYnV0IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIGFyZ3VtZW50cyAoaW5jbHVkaW5nIGBza2JgKS4KClRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgaXMgaW4gYGJyX2ZpbGxfaWZpbmZvYC4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIG5ldyBjaGVjayBoZXJlIHRoYXQmIzM5O3MgY2F0Y2hpbmcgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0aGV5IGFyZSBjaGVja2luZyBpZiB0aGUgVkxBTiBpbmZvcm1hdGlvbiB3aWxsIGZpdCB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGxvb2tzIGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyIG9mIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSBzdGFydCBvZiB0aGUgYWRkcmVzcyBmYW1pbHkgaW5mb3JtYXRpb24uIElmIHRoaXMgZGlmZmVyZW5jZSBleGNlZWRzIGBVMTZfTUFYYCwgbWVhbmluZyBpdCYjMzk7cyB0b28gbGFyZ2UgdG8gZml0LCB0aGVuIGl0IHNldHMgYW4gZXJyb3IgbWVzc2FnZSB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYCBvbiB0aGUgYGV4dGFja2AgKGV4dGVuZGVkIGFjaykgYnVmZmVyLiBUaGUgbWVzc2FnZSBjbGVhcmx5IHN0YXRlcywgJiMzNDtWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOLiYjMzQ7IFRoZSBjb2RlIHRoZW4gY2FuY2VscyB0aGUgbWVzc2FnZSBhbmQgcmV0dXJucyBgLUUyQklHYCwgd2hpY2ggaXMgdGhlICYjMzQ7bWVzc2FnZSB0b28gbG9uZyYjMzQ7IGVycm9yIGNvZGUuCgpOb3cgSSYjMzk7bSBjdXJpb3VzIGFzIHRvIGhvdyB0aGUgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdCBgLUUyQklHYCBlcnJvciwgc2luY2UgaXQmIzM5O3MgdGhlIG9uZSB0aGF0JiMzOTtzIGdldHRpbmcgY2FsbGVkIGluIGFsbCB0aGVzZSBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoYXQgZXJyb3IgYnViYmxlcyB1cC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgYXJvdW5kIGxpbmUgNTU3NS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGVycm9yIGlzIHByb2Nlc3NlZCBhbmQgaWYgaXQgaXMgcHJvcGVybHkgaGFuZGxlZCB0byByZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IgYmFjayB0byB0aGUgdXNlciBzcGFjZSBhcHBsaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTU2NTpcdFx0XHRcdFx0ICAgICAgIGNiLVx1MDAzZWV4dGFjayk7XG41NTY2Olx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBjYi1cdTAwM2VzdHJpY3RfY2hlY2spXG41NTY3Olx0XHRcdHJldHVybiBlcnI7XG41NTY4Olx0XG41NTY5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG41NTcwOlx0XHRmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KSB7XG41NTcxOlx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LVx1MDAzZW5ldGRldl9vcHM7XG41NTcyOlx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoZGV2KTtcbjU1NzM6XHRcbjU1NzQ6XHRcdFx0aWYgKGJyX2RldiBcdTAwMjZcdTAwMjYgYnJfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XG41NTc1Olx0XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNiLVx1MDAzZWFyZ3NbMF0pIHtcbjU1NzY6XHRcdFx0XHRcdGVyciA9IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcbjU1Nzc6XHRcdFx0XHRcdFx0XHRza2IsIHBvcnRpZCwgc2VxLCBkZXYsXG41NTc4Olx0XHRcdFx0XHRcdFx0ZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJLFxuNTU3OTpcdFx0XHRcdFx0XHRcdGNiLVx1MDAzZWV4dGFjayk7XG41NTgwOlx0XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcbjU1ODE6XHRcdFx0XHRcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlbGVuKSlcbjU1ODI6XHRcdFx0XHRcdFx0XHRicmVhaztcbjU1ODM6XHRcbjU1ODQ6XHRcdFx0XHRcdFx0Z290byBvdXRfZXJyO1xuNTU4NTpcdFx0XHRcdFx0fVxuNTU4NjpcdFx0XHRcdH1cbjU1ODc6XHRcdFx0XHRpZHgmIzQzOyYjNDM7O1xuNTU4ODpcdFx0XHR9XG41NTg5Olx0XG41NTkwOlx0XHRcdGlmIChvcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XG41NTkxOlx0XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNiLVx1MDAzZWFyZ3NbMF0pIHtcbjU1OTI6XHRcdFx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCBwb3J0aWQsXG41NTkzOlx0XHRcdFx0XHRcdFx0XHQgICAgICBzZXEsIGRldixcbjU1OTQ6XHRcdFx0XHRcdFx0XHRcdCAgICAgIGZpbHRlcl9tYXNrLFxuNTU5NTpcdFx0XHRcdFx0XHRcdFx0ICAgICAgTkxNX0ZfTVVMVEksXG41NTk2Olx0XHRcdFx0XHRcdFx0XHQgICAgICBjYi1cdTAwM2VleHRhY2spO1xuNTU5NzpcdFx0XHRcdFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKSB7XG41NTk4Olx0XHRcdFx0XHRcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWxlbikpXG41NTk5Olx0XHRcdFx0XHRcdFx0YnJlYWs7XG41NjAwOlx0XG41NjAxOlx0XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjU2MDI6XHRcdFx0XHRcdH1cbjU2MDM6XHRcdFx0XHR9XG41NjA0Olx0XHRcdFx0aWR4JiM0MzsmIzQzOztcbjU2MDU6XHRcdFx0fVxuNTYwNjpcdFx0fVxuNTYwNzpcdFx0ZXJyID0gc2tiLVx1MDAzZWxlbjtcbjU2MDg6XHRvdXRfZXJyOlxuNTYwOTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzAwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTY0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQnJpZGdlIFZMQU4gSW5mbyBPdmVyZmxvdyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3RhcnRzIHdpdGggbm90aWNpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGJyaWRnZSBWTEFOIGZpbHRlcmluZyBhbmQgbmV0bGluayBtZXNzYWdlIHNpemVzLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgdGhlIGBydG5sX2JyaWRnZV9ub3RpZnlgIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCB3aXRoaW4gYHJ0bmxfYnJpZGdlX3NldGxpbmtgIHRvIGhhbmRsZSBicmlkZ2UgY2hhbmdlcywgYW5kIGBydG5sX2JyaWRnZV9nZXRsaW5rYCBtaWdodCBiZSBzdXNjZXB0aWJsZSB0byBhbiBvdmVyZmxvdy4gSWYgYSBicmlkZ2UgcG9ydCBoYXMgYW4gZXh0cmVtZWx5IGxhcmdlIG51bWJlciBvZiBWTEFOcyAoc2F5LCA0MDk0KSwgYW5kIGlmIHdlJiMzOTtyZSBkdW1waW5nIHRoZSBicmlkZ2UgbGluayBpbmZvcm1hdGlvbiB3aXRoIFZMQU4gZmlsdGVyaW5nIGVuYWJsZWQsIHRoZSBkYXRhIHBhY2tlZCBpbnRvIHRoZSBgSUZMQV9BRl9TUEVDYCBhdHRyaWJ1dGUgY291bGQgZXhjZWVkIHRoZSA2NEtCIGxpbWl0IChgVTE2X01BWGApLiBJIG9ic2VydmVkIHRoYXQgdGhlIGBhZi0mZ3Q7bmxhX2xlbmAgZmllbGQsIHdoaWNoIHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uLCB3YXMgdXNpbmcgYSAxNi1iaXQgZmllbGQgYW5kIHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93LiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgJmd0OyBVMTZfTUFYKWAsIHRyaWdnZXJpbmcgYW4gYC1FMkJJR2AgZXJyb3IgYW5kIHNldHRpbmcgYGV4dGFja2Agd2hlbiB0aGUgcGFja2V0IHNpemUgbGltaXRzLgoKVGhpcyBpcyBhIGdvb2QgcG9pbnQgdG8gc3RhcnQ6IEkgdGhpbmsgdGhhdCBtZWFucyB0aGUgY29kZSYjMzk7cyBub3cgaGFuZGxpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIFZMQU4gZHVtcGluZyBwcm9jZXNzLiBHb29kIGNhdGNoLgoKSSBzZWUgdGhhdCBgcnRubF9icmlkZ2Vfbm90aWZ5YCBjYWxscyBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fYnJpZGdlX2dldGxpbmtgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSWYgdGhhdCByZXR1cm5zIGFuIGVycm9yLCB0aGUgZnVuY3Rpb24gaGFuZGxlcyBpdC4gVGhpcyBpbmRpY2F0ZXMgYSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aCwgY3J1Y2lhbCBmb3IgZnV6emluZyEKClRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzdGFydCB0byB0aGluayB0aGF0IG1heWJlIGBuZG9fYnJpZGdlX2dldGxpbmtgIGlzIGNhbGxlZCBmcm9tIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBzbyBpdHMgcmV0dXJuIGNvZGUgbWF0dGVycy4gVGhpcyBpcyBhbGwgY29ubmVjdGVkIHRvIG5ldGxpbmsgbWVzc2FnaW5nIHdoaWNoIGlzIGEgZ3JlYXQgdGFyZ2V0LgoKSSYjMzk7dmUgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgaXMgaW5kZWVkIHdvcnRoIGZ1enppbmcuIEkgY29uZmlybWVkIHRoYXQgY29kZSBtb2RpZmljYXRpb25zIGFyZSBwcmVzZW50IGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIGJyaWRnZSBzdWJzeXN0ZW0gKGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AsIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIGFzc29jaWF0ZWQgaGVhZGVyIGZpbGVzKSBpbmNsdWRpbmcgdGhlIGNyaXRpY2FsIGFkZGl0aW9uIG9mIHRoZSBkZWZlbnNpdmUgY2hlY2sgYW5kIGVycm9yIGhhbmRsaW5nIChyZXR1cm5pbmcgLUUyQklHIGFuZCBjYW5jZWxpbmcgdGhlIE5MIG1lc3NhZ2UpIHZpYSBgZXh0YWNrYC4gVGhpcyBhbGwgaGFzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gSW1wb3J0YW50bHksIEkgY2FuIGFjY2VzcyB0aGlzIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBzdGFuZGFyZCBuZXRsaW5rIHNvY2tldHMsIHNvIEkgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVSB3aXRob3V0IG5lZWRpbmcgc3BlY2lhbCBoYXJkd2FyZS4KClRvIGRldGVybWluZSAqd2hpY2gqIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZywgSSBuZWVkIGEgbGlzdCBvZiB0aGUgKmtleSogZW50cnkgcG9pbnRzIGFuZCBtb2RpZmllZCBsb2dpYy4gSSBmb2N1c2VkIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCwgYW5kIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGBicl9maWxsX2lmaW5mb2AsIGBicl9nZXRsaW5rYCwgYGJyX2luZm9fbm90aWZ5YCwgYGJyX2lmaW5mb19ub3RpZnlgLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGBydG5sX2JyaWRnZV9kZWxsaW5rYCwgYW5kIGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AgYXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkLiBJIGNvbnNpZGVyZWQgaWYgc3RhdGljIGZ1bmN0aW9ucyBhcmUgT0suIFllcyEgU3RhdGljIGZ1bmN0aW9ucywgYXMgbG9uZyBhcyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgYXJlIGdvb2QuCgpDcnVjaWFsbHksIHRob3NlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdWJpcXVpdG91cyAmIzM0O2hvdCBwYXRocyYjMzQ7LCB3aGljaCB3b3VsZCBiZSB1c2VsZXNzLCBzbyBJIGtub3cgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZSEgVGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eSBtYWtlcyB0aGVtIHZlcnkgc3BlY2lmaWMgdG8gdGhlc2UgYnJpZGdlIFZMQU4gb3BlcmF0aW9ucywgcGVyZmVjdC4KCkZpbmFsbHksIEkgbmVlZCB0byBrbm93IHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgdGhlIGNvZGUgYW5kIG1ha2UgaXQgcmVhY2hhYmxlLiBgQ09ORklHX0JSSURHRWAgaXMgYSBtdXN0LCBhbmQgSSBzaG91bGQgYWxzbyBjaGVjayBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX25ldGxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGU9OD1icmlkZ2UteVx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXG5uZXQvYnJpZGdlL01ha2VmaWxlLTktXHRcdFx0YnJfaW9jdGwubyBicl9zdHAubyBicl9zdHBfYnBkdS5vIFxcXG5uZXQvYnJpZGdlL01ha2VmaWxlOjEwOlx0XHRcdGJyX3N0cF9pZi5vIGJyX3N0cF90aW1lci5vIGJyX25ldGxpbmsubyBcXFxubmV0L2JyaWRnZS9NYWtlZmlsZToxMTpcdFx0XHRicl9uZXRsaW5rX3R1bm5lbC5vIGJyX2FycF9uZF9wcm94eS5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTEyLVxuLS1cbm5ldC9icmlkZ2UvYnIuYz00MjU9c3RhdGljIGludCBfX2luaXQgYnJfaW5pdCh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvYnIuYy00NjAtXG5uZXQvYnJpZGdlL2JyLmM6NDYxOlx0ZXJyID0gYnJfbmV0bGlua19pbml0KCk7XG5uZXQvYnJpZGdlL2JyLmMtNDYyLVx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyLmM9NDkyPXN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZClcbi0tXG5uZXQvYnJpZGdlL2JyLmMtNDk0LVx0c3RwX3Byb3RvX3VucmVnaXN0ZXIoXHUwMDI2YnJfc3RwX3Byb3RvKTtcbm5ldC9icmlkZ2UvYnIuYzo0OTU6XHRicl9uZXRsaW5rX2ZpbmkoKTtcbm5ldC9icmlkZ2UvYnIuYy00OTYtXHR1bnJlZ2lzdGVyX3N3aXRjaGRldl9ibG9ja2luZ19ub3RpZmllcihcdTAwMjZicl9zd2l0Y2hkZXZfYmxvY2tpbmdfbm90aWZpZXIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE5NTY9c3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xOTc3LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTk3ODppbnQgX19pbml0IGJyX25ldGxpbmtfaW5pdCh2b2lkKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk3OS17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMjAwMy1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjIwMDQ6dm9pZCBicl9uZXRsaW5rX2Zpbmkodm9pZClcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTIwMDUte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxNjM9c3RhdGljIGlubGluZSBpbnQgYnJfY2ZtX3BlZXJfbWVwX2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTMyICpjb3VudClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTY5LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3MDovKiBicl9uZXRsaW5rLmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxNzEtZXh0ZXJuIHN0cnVjdCBydG5sX2xpbmtfb3BzIGJyX2xpbmtfb3BzO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3MjppbnQgYnJfbmV0bGlua19pbml0KHZvaWQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3Mzp2b2lkIGJyX25ldGxpbmtfZmluaSh2b2lkKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxNzQtdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD0xMj1zdHJ1Y3QgdnR1bm5lbF9pbmZvIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtMTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6MTg6LyogYnJfbmV0bGlua190dW5uZWwuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTE5LWludCBicl9wYXJzZV92bGFuX3R1bm5lbF9pbmZvKHN0cnVjdCBubGF0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJyaWRnaW5nLCBzcGVjaWZpY2FsbHkgdGhlIFZMQU4gZmlsdGVyaW5nIGFzcGVjdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIHRvIGZpbmQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYnJpZGdlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGUgcHJlc2VuY2UgYW5kIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCAtIGEgYmFzaWMgY2hlY2sgdG8gZW5zdXJlIGJyaWRnaW5nIGl0c2VsZiBpcyBlbmFibGVkLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBzY2FuIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIGxvb2tpbmcgZm9yIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZyB3aXRoaW4gdGhlIGJyaWRnZSBjb250ZXh0LiBUaGlzIGFwcHJvYWNoIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29udHJvbGxlZCBhdCBjb21waWxlLXRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBCUklER0VcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IExMQ1xuICAgOTpcdFx0c2VsZWN0IFNUUFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFuXG4gIDEyOlx0XHQgIEV0aGVybmV0IGJyaWRnZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGlmZmVyZW50IEV0aGVybmV0IHNlZ21lbnRzIGl0XG4gIDEzOlx0XHQgIGlzIGNvbm5lY3RlZCB0byB3aWxsIGFwcGVhciBhcyBvbmUgRXRoZXJuZXQgdG8gdGhlIHBhcnRpY2lwYW50cy5cbiAgMTQ6XHRcdCAgU2V2ZXJhbCBzdWNoIGJyaWRnZXMgY2FuIHdvcmsgdG9nZXRoZXIgdG8gY3JlYXRlIGV2ZW4gbGFyZ2VyXG4gIDE1Olx0XHQgIG5ldHdvcmtzIG9mIEV0aGVybmV0cyB1c2luZyB0aGUgSUVFRSA4MDIuMSBzcGFubmluZyB0cmVlIGFsZ29yaXRobS5cbiAgMTY6XHRcdCAgQXMgdGhpcyBpcyBhIHN0YW5kYXJkLCBMaW51eCBicmlkZ2VzIHdpbGwgY29vcGVyYXRlIHByb3Blcmx5IHdpdGhcbiAgMTc6XHRcdCAgb3RoZXIgdGhpcmQgcGFydHkgYnJpZGdlIHByb2R1Y3RzLlxuICAxODpcdFxuICAxOTpcdFx0ICBJbiBvcmRlciB0byB1c2UgdGhlIEV0aGVybmV0IGJyaWRnZSwgeW91JiMzOTtsbCBuZWVkIHRoZSBicmlkZ2VcbiAgMjA6XHRcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcdTAwM2VcbiAgMjE6XHRcdCAgZm9yIGxvY2F0aW9uLiBQbGVhc2UgcmVhZCB0aGUgQnJpZGdlIG1pbmktSE9XVE8gZm9yIG1vcmVcbiAgMjI6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHlvdSBlbmFibGUgaXB0YWJsZXMgc3VwcG9ydCBhbG9uZyB3aXRoIHRoZSBicmlkZ2Ugc3VwcG9ydCB0aGVuIHlvdVxuICAyNTpcdFx0ICB0dXJuIHlvdXIgYnJpZGdlIGludG8gYSBicmlkZ2luZyBJUCBmaXJld2FsbC5cbiAgMjY6XHRcdCAgaXB0YWJsZXMgd2lsbCB0aGVuIHNlZSB0aGUgSVAgcGFja2V0cyBiZWluZyBicmlkZ2VkLCBzbyB5b3UgbmVlZCB0b1xuICAyNzpcdFx0ICB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB1cCB5b3VyIGZpcmV3YWxsIHJ1bGVzLlxuICAyODpcdFx0ICBFbmFibGluZyBhcnB0YWJsZXMgc3VwcG9ydCB3aGVuIGJyaWRnaW5nIHdpbGwgbGV0IGFycHRhYmxlcyBzZWVcbiAgMjk6XHRcdCAgYnJpZGdlZCBBUlAgdHJhZmZpYyBpbiB0aGUgYXJwdGFibGVzIEZPUldBUkQgY2hhaW4uXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGJyaWRnZS5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbiAgMzc6XHRcdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDM5Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA0MzpcdFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxuICA0NDpcdFx0ICBlYWNoIHBvcnQuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDUzOlx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgNTQ6XHRcdGRlZmF1bHQgblxuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA1NzpcdFx0ICByZWNlaXZlIGFuZCBmb3J3YXJkIHRyYWZmaWMgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFja2V0XG4gIDU4Olx0XHQgIGFueSBWTEFOIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIGJyaWRnZSBwb3J0IG9yIGJyaWRnZSBkZXZpY2UuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA2MTpcdFxuICA2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA2MzpcdFxuICA2NDpcdGNvbmZpZyBCUklER0VfTVJQXG4gIDY1Olx0XHRib29sIFwmIzM0O01SUCBwcm90b2NvbFwmIzM0O1xuICA2NjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNjc6XHRcdGRlZmF1bHQgblxuICA2ODpcdFx0aGVscFxuICA2OTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXG4gIDcwOlx0XHQgIHByb3RvY29sIHRvIGRldGVjdCBsb29wc1xuICA3MTpcdFxuICA3MjpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNzM6XHRcbiAgNzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgQlJJREdFX0NGTVxuICA3NzpcdFx0Ym9vbCBcJiMzNDtDRk0gcHJvdG9jb2xcJiMzNDtcbiAgNzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDc5Olx0XHRoZWxwXG4gIDgwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBDRk1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBWTEFOIEZpbHRlcmluZyBpbiBCcmlkZ2UgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIFZMQU4gcG9wdWxhdGlvbiBsb2dpYyBpbiBgYnJfZmlsbF9pZmluZm9gIGlzIGNvbnRpbmdlbnQgb24gdGhpcyBjb25maWcgb3B0aW9uLiBJdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBkZXBlbmRlbmN5LCBidXQgYXNzdW1wdGlvbnMgYXJlIHRoZSBiYW5lIG9mIG15IGV4aXN0ZW5jZS4KClRoZSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJyX2ZpbGxfaWZpbmZvYCBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSB0aG9zZSBWTEFOIGZpZWxkcyBhcmUgcG9wdWxhdGVkLiBUaGVuLCBJIGNhbiBjb3JyZWxhdGUgdGhhdCBzZWN0aW9uIHdpdGggYSBjb25kaXRpb25hbCBjaGVjayBvbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgKG9yIGEgc2ltaWxhciBtYWNybykuIFRoYXQgd2lsbCB0ZWxsIG1lIGRlZmluaXRpdmVseSB3aGV0aGVyIGl0JiMzOTtzIG9wdGlvbmFsIG9yIG1hbmRhdG9yeSB0byBoYXZlIHRoaXMgZW5hYmxlZC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCBhbmQgd2hhdCB0aGUgY29uc2VxdWVuY2VzIGFyZSBpZiB0aGF0IGZlYXR1cmUgaXMgZGlzYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgYnJpZGdlIGhhbmRsZXMgdGhlc2Ugc2l0dWF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRFWFRfRklMVEVSX0JSVkxBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MjM9c3RhdGljIGludCBfX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0zMC1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjMxOlx0aWYgKCEoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0zMi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NzU9c3RhdGljIGludCBicl9nZXRfbnVtX3ZsYW5faW5mb3Moc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODItXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo4MzpcdGlmIChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTilcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTg0LVx0XHRyZXR1cm4gUkVBRF9PTkNFKHZnLVx1MDAzZW51bV92bGFucyk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MDktXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1MTA6XHRpZiAoZmlsdGVyX21hc2sgXHUwMDI2IChSVEVYVF9GSUxURVJfQlJWTEFOIHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjUxMTpcdFx0XHQgICBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgfFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTEyLVx0XHRcdCAgIFJURVhUX0ZJTFRFUl9NUlAgfFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyMS1cdC8qIENoZWNrIGlmICB0aGUgVklEIGluZm9ybWF0aW9uIGlzIHJlcXVlc3RlZCAqL1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTIyOlx0aWYgKChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTikgfHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjUyMzpcdCAgICAoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkpIHtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyNC1cdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTM3LVx0XHR9XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1Mzg6XHRcdGlmIChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTM5LVx0XHRcdGVyciA9IGJyX2ZpbGxfaWZ2bGFuaW5mb19jb21wcmVzc2VkKHNrYiwgdmcpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTY3OD12b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjgwLXtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjY4MTpcdHUzMiBmaWx0ZXIgPSBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQ7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02ODItXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9Njg5PWludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjk0LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6Njk1Olx0aWYgKCFwb3J0IFx1MDAyNlx1MDAyNiAhKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjY5NjpcdCAgICAhKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjk3LVx0ICAgICEoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9NUlApIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk5NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGJyX2ZpbGxfaWZ2bGFuaW5mb2AgYW5kIFZMQU4gSW5mb3JtYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgYnJfZmlsbF9pZnZsYW5pbmZvYCBmdW5jdGlvbiB3b3JrcyBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBgdmdgIHZhcmlhYmxlIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiBpdC4gVGhpcyBzdWdnZXN0cyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBWTEFOIGluZm9ybWF0aW9uIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBzZWdtZW50YXRpb24gYW5kIHRyYWZmaWMgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBvcHVsYXRlcyBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBWTEFOIGNvbmZpZ3VyYXRpb24gYW5kIG1hcHBpbmcuIEkgc3VzcGVjdCBgdmdgIGlzIGVpdGhlciBhIHBvaW50ZXIgdG8gb3IgYSBzdHJ1Y3R1cmUgaG9sZGluZyBWTEFOIGdyb3VwLXJlbGF0ZWQgZGF0YS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhbmQgZm9jdXMgb24gbGluZXMgNTIwIHRocm91Z2ggNTUwLiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEJ5IGV4YW1pbmluZyB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZSwgSSBhbnRpY2lwYXRlIHRoYXQgSSYjMzk7bGwgZmluZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gVkxBTiBjb25maWd1cmF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGl0c2VsZiwgd2hpY2ggd2lsbCBob3BlZnVsbHkgb2ZmZXIgc29tZSBhbnN3ZXJzLiBJJiMzOTttIGhvcGluZyB0aGlzIHNlY3Rpb24gaGFuZGxlcyB0aGUgbmV0bGluayBpbnRlcmFjdGlvbnMgaW4gdGhlIFZMQU4gY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XG4gNTIxOlx0XHQvKiBDaGVjayBpZiAgdGhlIFZJRCBpbmZvcm1hdGlvbiBpcyByZXF1ZXN0ZWQgKi9cbiA1MjI6XHRcdGlmICgoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU4pIHx8XG4gNTIzOlx0XHQgICAgKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpKSB7XG4gNTI0Olx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuIDUyNTpcdFx0XHRpbnQgZXJyO1xuIDUyNjpcdFxuIDUyNzpcdFx0XHQvKiBSQ1UgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFZMQU4gbG9ja2luZyBydWxlcyAocmN1IHx8IHJ0bmwpICovXG4gNTI4Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA1Mjk6XHRcdFx0aWYgKHBvcnQpXG4gNTMwOlx0XHRcdFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocG9ydCk7XG4gNTMxOlx0XHRcdGVsc2VcbiA1MzI6XHRcdFx0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiA1MzM6XHRcbiA1MzQ6XHRcdFx0aWYgKCF2ZyB8fCAhUkVBRF9PTkNFKHZnLVx1MDAzZW51bV92bGFucykpIHtcbiA1MzU6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1MzY6XHRcdFx0XHRnb3RvIGRvbmU7XG4gNTM3Olx0XHRcdH1cbiA1Mzg6XHRcdFx0aWYgKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpXG4gNTM5Olx0XHRcdFx0ZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvX2NvbXByZXNzZWQoc2tiLCB2Zyk7XG4gNTQwOlx0XHRcdGVsc2VcbiA1NDE6XHRcdFx0XHRlcnIgPSBicl9maWxsX2lmdmxhbmluZm8oc2tiLCB2Zyk7XG4gNTQyOlx0XG4gNTQzOlx0XHRcdGlmIChwb3J0IFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChCUl9WTEFOX1RVTk5FTF9CSVQsIFx1MDAyNnBvcnQtXHUwMDNlZmxhZ3MpKVxuIDU0NDpcdFx0XHRcdGVyciA9IGJyX2ZpbGxfdmxhbl90dW5uZWxfaW5mbyhza2IsIHZnKTtcbiA1NDU6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNTQ2Olx0XHRcdGlmIChlcnIpXG4gNTQ3Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNTQ4Olx0XHR9XG4gNTQ5Olx0XG4gNTUwOlx0XHRpZiAoZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9NUlApIHtcbiA1NTE6XHRcdFx0aW50IGVycjtcbiA1NTI6XHRcbiA1NTM6XHRcdFx0aWYgKCFicl9tcnBfZW5hYmxlZChicikgfHwgcG9ydClcbiA1NTQ6XHRcdFx0XHRnb3RvIGRvbmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBWTEFOIEdyb3VwIFJDVSBGdW5jdGlvbnMgd2l0aCBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcgRGlzYWJsZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgbmJwX3ZsYW5fZ3JvdXBfcmN1YCBhbmQgYGJyX3ZsYW5fZ3JvdXBfcmN1YCB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBvZmYuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Q/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLCBidXQgYSBxdWljayBncmVwIGlzIHByb2JhYmx5IHRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgYmlyZCYjMzk7cyBleWUgdmlldyBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV2ZW4gKmNhbGxlZCogd2hlbiB0aGUgZmlsdGVyaW5nIGlzIGRpc2FibGVkLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIGBuYnBfdmxhbl9ncm91cF9yY3VgLiBUaW1lIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgJiMzNDtubyBmaWx0ZXJpbmcmIzM0OyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJwX3ZsYW5fZ3JvdXBfcmN1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTQzPXN0YXRpYyB2b2lkIGJyX2FycF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTY4LVx0aWYgKHApXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjY5Olx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNzAtXHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0yNTQ9c3RhdGljIHZvaWQgYnJfbmRfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0zNjEtXHRpZiAocClcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MzYyOlx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMzYzLVx0ZWxzZVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NTEyPWJvb2wgYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTE3LVx0aWYgKHZpZCBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoQlJfTkVJR0hfVkxBTl9TVVBQUkVTU19CSVQsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpKSB7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjUxODpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTUxOS1cdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTUzMD1ib29sIGJyX2lzX25laWdoX2ZvcndhcmRfZ3JhdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiB2aWQpXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MzItXHRpZiAodmlkIFx1MDAyNlx1MDAyNiB0ZXN0X2JpdChCUl9ORUlHSF9WTEFOX1NVUFBSRVNTX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpIHtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NTMzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTM0LVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTIxPXN0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjUtXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoyNjpcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjctXHRyZXR1cm4gKHRlc3RfYml0KEJSX0hBSVJQSU5fTU9ERV9CSVQsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpIHx8IHNrYi1cdTAwM2VkZXYgIT0gcC1cdTAwM2VkZXYpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04NS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjg2Olx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UodG8pO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODctXHRza2IgPSBicl9oYW5kbGVfdmxhbih0by1cdTAwM2ViciwgdG8sIHZnLCBza2IpO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz03Nj1pbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTA5LVx0cG1jdHggPSBcdTAwMjZwLVx1MDAzZW11bHRpY2FzdF9jdHg7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTEwOlx0aWYgKCFicl9hbGxvd2VkX2luZ3Jlc3MocC1cdTAwM2ViciwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApLCBza2IsIFx1MDAyNnZpZCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xMTEtXHRcdFx0XHRcdTAwMjZzdGF0ZSwgXHUwMDI2dmxhbikpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTM0Nz1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzAtXHRpZiAodGVzdF9iaXQoQlJfVkxBTl9UVU5ORUxfQklULCBcdTAwMjZwLVx1MDAzZWZsYWdzKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNzE6XHRcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzItXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz05NT1pbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0xMTAtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvYnJpZGdlL2JyX21zdC5jOjExMTpcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl9tc3QuYy0xMTItXHRpZiAoIXZnKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEwPWJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyOC1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjI5Olx0dmxhbiA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cF9yY3UocGctXHUwMDNla2V5LnBvcnQpLCBwZy1cdTAwM2VrZXkuYWRkci52aWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzAtXHRpZiAodmxhbiBcdTAwMjZcdTAwMjYgIWJyX211bHRpY2FzdF9wb3J0X2N0eF92bGFuX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjQwPWJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjQ5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyNTA6XHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwb3J0KSwgdmlkKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjUxLVx0aWYgKHZsYW4pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjMzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjI0MC1cdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjQxOlx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwb3J0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjI0Mi1cdFx0aWYgKCF2Zykge1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3ND1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc3RhcnRfcXVlcmllcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5Ni1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY5NzpcdFx0XHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwb3J0KSxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cdFx0XHRcdFx0ICAgIGJybWN0eC1cdTAwM2V2bGFuLVx1MDAzZXZpZCk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9OTM9c3RhdGljIHNpemVfdCBicl9nZXRfbGlua19hZl9zaXplX2ZpbHRlcmVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTA3LVx0XHRpZiAocClcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEwODpcdFx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEwOS1cdH0gZWxzZSBpZiAobmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MjktXHRcdGlmIChwb3J0KVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTMwOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHBvcnQpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTMxLVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY1OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXBfcmN1KFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NjQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXBfcmN1KFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTY2Ni1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTgzOC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cF9yY3UoXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODQwLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nz1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy02OTYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo2OTc6XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTY5OC1cdGlmICghdmcgfHwgIVJFQURfT05DRSh2Zy1cdTAwM2VudW1fdmxhbnMpKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE0MzU9aW50IGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqcF9wdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0NDEtXHRpZiAocClcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE0NDI6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ0My1cdGVsc2UgaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSlcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNDgwPWludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0ODktXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNDkwOlx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UoZHN0KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0OTEtXHR2ID0gYnJfdmxhbl9maW5kKHZnLCBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNTM2PWludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1NDQtXHRpZiAocClcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE1NDU6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTU0Ni1cdGVsc2UgaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSlcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xOTk1PXN0YXRpYyBpbnQgYnJfdmxhbl9kdW1wX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMjYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMDI3Olx0XHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMjgtXHRcdGJyID0gcC1cdTAwM2VicjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgQnJpZGdlIGFuZCBWTEFOIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX0JSSURHRWAgYW5kIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gTm93LCB0aGUgcmVsYXRpb25zaGlwIGhlcmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYC4gTWFrZXMgc2Vuc2UsIGFzIFZMQU4gZmlsdGVyaW5nIGlzIGFuIGV4dGVuc2lvbiBvZiBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LiBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAgYW5kIGNoZWNrIGxpbmUgMTgzMyBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBnZXQgdGhlIHJlYWwgY29udGV4dCBvbiB0aGlzICNpZmRlZiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdFx0cmV0dXJuIE5VTEw7XG4xODMxOlx0fVxuMTgzMjpcdFxuMTgzMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXG4xODM0Olx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcbjE4MzU6XHR7XG4xODM2Olx0XHRyZXR1cm4gTlVMTDtcbjE4Mzc6XHR9XG4xODM4Olx0XG4xODM5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cF9yY3UoXG4xODQwOlx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4xODQxOlx0e1xuMTg0MjpcdFx0cmV0dXJuIE5VTEw7XG4xODQzOlx0fVxuMTg0NDpcdFxuMTg0NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl92bGFuX2dldF9zdGF0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuMTg0NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHMpXG4xODQ3Olx0e1xuMTg0ODpcdH1cbjE4NDk6XHRcbjE4NTA6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfdmxhbl9wb3J0X2V2ZW50KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4xODUxOlx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50KVxuMTg1MjpcdHtcbjE4NTM6XHR9XG4xODU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjcwCgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDEwMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcqKgoKT2theSwgc28gaGVyZSYjMzk7cyBteSB0aGlua2luZy4gV2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZW5hYmxlZCwgYW5kIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTnMgb24gYnJpZGdlIHBvcnRzLCB0aGUgYFJUTV9HRVRMSU5LYCByZXF1ZXN0IHdpdGggYFJURVhUX0ZJTFRFUl9CUlZMQU5gIHRyaWdnZXJzIGBicl9maWxsX2lmdmxhbmluZm9gIHdoaWNoIHBvcHVsYXRlcyBgSUZMQV9BRl9TUEVDYC4gSWYgYSBwb3J0IGhhcyBhIGJvYXRsb2FkIG9mIFZMQU5zLCB0aGUgYGFmYCBhdHRyaWJ1dGUgc2l6ZSBjb3VsZCBibG93IHBhc3QgNjRLQiwgZXhjZWVkaW5nIGBVMTZfTUFYYC4gVGhpcyBpcyB3aGVyZSB0aGUgbmV3IGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgY29tZXMgaW50byBwbGF5LiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUgbWFpbiBgQ09ORklHX0JSSURHRWAgZnVuY3Rpb25hbGl0eSBhbmQgYWxzbyBgQ09ORklHX1ZMQU5fODAyMVFgLgoKTGV0IG1lIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgY29uZmlncyBhcmUgaW4gcGxheTogYEJSSURHRWAsIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYFZMQU5fODAyMVFgIOKAkyBzdGFuZGFyZCBzdHVmZi4gYE5FVGAgaXMgc3RhbmRhcmQgdG9vLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIG91ciBmb2N1cyBzeW1ib2xzLiBXZSBuZWVkIHRvIGJlIHplcm9lZCBpbiBvbjoKKiAgIGBicl9nZXRsaW5rYDogSW1wbGVtZW50YXRpb24gZm9yIGJyaWRnZSBkZXZpY2VzLgoqICAgYGJyX2ZpbGxfaWZpbmZvYDogdGhlIGZ1bmN0aW9uIHdpdGggdGhlIG5ldyBvdmVyZmxvdyBjaGVjay4KKiAgIGBydG5sX2JyaWRnZV9nZXRsaW5rYDogcnRuZXRsaW5rIGhhbmRsZXIuCiogICBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgOiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKiAgIGBydG5sX2JyaWRnZV9ub3RpZnlgOiB1cGRhdGVkIGhlbHBlciBmb3IgZXh0YWNrLgoqICAgYHJ0bmxfYnJpZGdlX3NldGxpbmtgOiBjYWxsZXIgb2YgYHJ0bmxfYnJpZGdlX25vdGlmeWAuCiogICBgcnRubF9icmlkZ2VfZGVsbGlua2A6IGNhbGxlciBvZiBgcnRubF9icmlkZ2Vfbm90aWZ5YC4KCkFyZSB0aG9zZSBnb29kPyBMZXQmIzM5O3MgY29uZmlybSB0aGV5JiMzOTtyZSBpbiB0aGUgcmlnaHQgcGxhY2VzOiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBZZXMhCgpBbmQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgYnJfZmlsbF9pZmluZm9gIGlubGluZWQ/IE5vLCBpdCYjMzk7cyBub3QuIEl0JiMzOTtzIHN0YXRpYywgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBhbmQgaXQmIzM5O3Mgc3Vic3RhbnRpYWwgaW4gc2l6ZS4gYGJyX2dldGxpbmtgIGlzIG5vbi1zdGF0aWMuIGBydG5sX2JyaWRnZV9nZXRsaW5rYCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC4gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgYWxzbyBpbiBgcnRuZXRsaW5rLmNgLiBgcnRubF9icmlkZ2Vfbm90aWZ5YCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC4KCk9rYXksIHRpbWUgdG8gcmV2aWV3IHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgLgoKV2UgbmVlZDoKKiAgIGBXb3J0aEZ1enppbmdgOiBib29sZWFuICh0cnVlKS4KKiAgIGBSZWFzb25pbmdgOiBhIGNvbmNpc2UgZXhwbGFuYXRpb24uCiogICBgRm9jdXNTeW1ib2xzYDogYW4gYXJyYXkgb2Ygc3RyaW5nIHN5bWJvbHMuCiogICBgRW5hYmxlQ29uZmlnc2A6IGFuIGFycmF5IG9mIHN0cmluZyBjb25maWdzIChubyBgQ09ORklHX2AgcHJlZml4KS4KCkxldCBtZSBkb3VibGUtY2hlY2s6CgoxLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoZSBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBzaXplIGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgdG8gcHJldmVudCBpbnRlZ2VyIHRydW5jYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYElGTEFfQUZfU1BFQ2AsIHdoaWNoIG1lYW5zIGl0IGNhbiByZXR1cm4gLUUyQklHIGFuZCBzZXQgYW4gZXh0ZW5kZWQgQUNLIG1lc3NhZ2UuIEl0IGFsc28gcHVzaGVzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgLCBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoKWAsIGFuZCB0aGUgYHJ0bmxfYnJpZGdlXypgIGNhbGxlcnMgaW4gYHJ0bmV0bGluay5jYC4gVGhpcyBpcyBhbGwgY29yZSwgYW5kIGVhc2lseSB0cmlnZ2VyZWQgdGhyb3VnaCBOZXRsaW5rL2JyaWRnZSBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIHN5emthbGxlciBjYW4gY3JlYXRlIGJyaWRnZXMsIGFzc2lnbiBWTEFOcywgYW5kIHF1ZXJ5IGdldGxpbmsuCgoyLiAgYEVuYWJsZUNvbmZpZ3NgOiBXZSYjMzk7cmUgZW5hYmxpbmcgYEJSSURHRWAsIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYFZMQU5fODAyMVFgLgoKMy4gIGBGb2N1c1N5bWJvbHNgOiBXZSYjMzk7cmUgZm9jdXNpbmcgb24gYGJyX2ZpbGxfaWZpbmZvYCwgYGJyX2dldGxpbmtgLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AsIGFuZCBgcnRubF9icmlkZ2Vfbm90aWZ5YC4KCkFscmlnaHQsIGl0JiMzOTtzIGFsbCByb2NrLXNvbGlkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmlsbF9pZmluZm8mIzM0OywKICAgICYjMzQ7YnJfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O25kb19kZmx0X2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O3J0bmxfYnJpZGdlX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmlsbF9pZmluZm8mIzM0OywKICAgICYjMzQ7YnJfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O25kb19kZmx0X2JyaWRnZV9nZXRsaW5rJiMzNDssCiAgICAmIzM0O3J0bmxfYnJpZGdlX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IGEgMTYtYml0IGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIG5lc3RlZCBhdHRyaWJ1dGUgbGVuZ3RoIChJRkxBX0FGX1NQRUMpIHdoZW4gZHVtcGluZyBicmlkZ2UgcG9ydCBWTEFOIGluZm9ybWF0aW9uLCBjYW5jZWxpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIC1FMkJJRyBpZiB0aGUgbmVzdGVkIGRhdGEgZXhjZWVkcyBVMTZfTUFYLiBUbyBzdXBwb3J0IHNldHRpbmcgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgKE5MX1NFVF9FUlJfTVNHX01PRCksIGl0IHRocmVhZHMgdGhlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlciB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgIGFjcm9zcyBuZXQgY29yZSBhbmQgdmFyaW91cyBldGhlcm5ldCBkcml2ZXJzLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWEwMjgwNzU1ZmVlMWY5OTgzZTc5Y2FjODg2N2Y0NThlNWNmM2U0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwppbmRleCBjYTk5ZjRiMWE2M2MzLi5hNzUyZTY2YmY2MzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwpAQCAtMTYxNTQsMTIgJiM0MzsxNjE1NCwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHVkcF90dW5uZWxfbmljX2luZm8gYm54dF91ZHBfdHVubmVscyA9IHsKIAogc3RhdGljIGludCBibnh0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJICAgICAgIGludCBubGZsYWdzKQomIzQzOwkJCSAgICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBibnh0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBicC0mZ3Q7YnJfbW9kZSwgMCwgMCwKLQkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIHN0YXRpYyBpbnQgYm54dF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGVkMzAyZjVlYzQ3NjguLmNjOWM4NzUzOWE0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwpAQCAtNTAxMSw3ICYjNDM7NTAxMSw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCiBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssCi0JCQkJIGludCBubGZsYWdzKQomIzQzOwkJCQkgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1cyA9IDA7CkBAIC01MDM3LDcgJiM0Mzs1MDM3LDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LAogCQkJCSAgICAgICBoc3dfbW9kZSA9PSBQT1JUX0ZXRF9UWVBFX1ZFUEEgPwogCQkJCSAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCLAotCQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9jbWRfd29yayAqYmVfYWxsb2Nfd29yayhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCmluZGV4IGFiYmM3MWU4MTVhZTMuLjUyYzJiMzkzYWFjZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwpAQCAtMTMxNTEsNiAmIzQzOzEzMTUxLDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICogQGRldjogdGhlIG5ldGRldiBiZWluZyBjb25maWd1cmVkCiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZAogICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluCiYjNDM7ICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2sKICAqCiAgKiBSZXR1cm4gdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGhhcmR3YXJlIGJyaWRnZSBpcyBvcGVyYXRpbmcgaW4KICAqIGkuZSBWRUIgb3IgVkVQQS4KQEAgLTEzMTU4LDcgJiM0MzsxMzE1OSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHUzMiBfX2Fsd2F5c191bnVzZWQgZmlsdGVyX21hc2ssCi0JCQkJICAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgIGludCBubGZsYWdzLAomIzQzOwkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGk0MGVfbmV0ZGV2X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaTQwZV92c2kgKnZzaSA9IG5wLSZndDt2c2k7CkBAIC0xMzE3NSw3ICYjNDM7MTMxNzcsNyBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgdmViLSZndDticmlkZ2VfbW9kZSwKLQkJCQkgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBmZTQ3ZWMwYmE4MDk0Li4wMzhjZTFmZTViZmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwpAQCAtODA4NiwxMiAmIzQzOzgwODYsMTQgQEAgaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKQogICogQGRldjogdGhlIG5ldGRldiBiZWluZyBjb25maWd1cmVkCiAgKiBAZmlsdGVyX21hc2s6IGZpbHRlciBtYXNrIHBhc3NlZCBpbgogICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluCiYjNDM7ICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2sKICAqCiAgKiBSZXR1cm4gdGhlIGJyaWRnZSBtb2RlIChWRUIvVkVQQSkKICAqLwogc3RhdGljIGludAogaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCi0JCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpCiYjNDM7CQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLAomIzQzOwkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihkZXYpOwogCXUxNiBibW9kZTsKQEAgLTgwOTksNyAmIzQzOzgxMDEsNyBAQCBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAlibW9kZSA9IHBmLSZndDtmaXJzdF9zdy0mZ3Q7YnJpZGdlX21vZGU7CiAKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncywKLQkJCQkgICAgICAgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGY5MTg1NjQ5OGViMmQuLjc3ZGZkODBhNmUzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTEwNzI2LDcgJiM0MzsxMDcyNiw4IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTsKIApAQCAtMTA3MzUsNyAmIzQzOzEwNzM2LDcgQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsCiAJCQkJICAgICAgIGFkYXB0ZXItJmd0O2JyaWRnZV9tb2RlLCAwLCAwLCBubGZsYWdzLAotCQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKaW5kZXggZmMxMTBhN2QxNmU4ZC4uNTNiZjc5ZGJlMDhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCkBAIC01Mjc3LDcgJiM0Mzs1Mjc3LDcgQEAgc3RhdGljIGludCBtbHg1ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcCkKICNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENICiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJCWludCBubGZsYWdzKQomIzQzOwkJCQlpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtJmd0O21kZXY7CkBAIC01Mjg4LDcgJiM0Mzs1Mjg4LDcgQEAgc3RhdGljIGludCBtbHg1ZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCW1vZGUgPSBzZXR0aW5nID8gQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjsKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LAogCQkJCSAgICAgICBtb2RlLAotCQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7CiYjNDM7CQkJCSAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYwppbmRleCA3OTI4ZTc2ZGE3MjNlLi5jYjc1MWRkZGI2ODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jCkBAIC0yMjU3LDcgJiM0MzsyMjU3LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKQogCiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywKLQkJCQkgIGludCBubGZsYWdzKQomIzQzOwkJCQkgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG5mcF9uZXQgKm5uID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MTYgbW9kZTsKQEAgLTIyNjksNyAmIzQzOzIyNjksNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAkgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjsKIAogCXJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsCi0JCQkJICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTsKJiM0MzsJCQkJICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spOwogfQogCiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAyOTM1YzJlY2MzMTRiLi5mOTYwY2Y1YTk3YTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTkzNSw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIHZvaWQgcWV0aF9sMl9icjJkZXZfcHV0KHZvaWQpCiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLAotCQkJCSAgaW50IG5sZmxhZ3MpCiYjNDM7CQkJCSAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgcWV0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LSZndDttbF9wcml2OwpAQCAtOTQ5LDcgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IHFldGhfbDJfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKIAlyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LAogCQkJCSAgICAgICBtb2RlLCBwcml2LSZndDticnBvcnRfZmVhdHVyZXMsCiAJCQkJICAgICAgIHByaXYtJmd0O2JycG9ydF9od19mZWF0dXJlcywKLQkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpOwomIzQzOwkJCQkgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZXRoX2JycG9ydF9wb2xpY3lbSUZMQV9CUlBPUlRfTUFYICYjNDM7IDFdID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNzA3YjJlNTFjMmI5Ny4uMThhMDNmMGY2ZjExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMzYwLDcgJiM0MzsxMzYwLDcgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIgewogICoJCQkgICAgIHUxNiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogICogaW50ICgqbmRvX2JyaWRnZV9nZXRsaW5rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogICoJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywKLSAqCQkJICAgICBpbnQgbmxmbGFncykKJiM0MzsgKgkJCSAgICAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKICAqIGludCAoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAgKgkJCSAgICAgdTE2IGZsYWdzKTsKICAqCkBAIC0xNjU5LDcgJiM0MzsxNjU5LDggQEAgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHsKIAkJCQkJCSAgICAgIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgICAgdTMyIGZpbHRlcl9tYXNrLAotCQkJCQkJICAgICAgaW50IG5sZmxhZ3MpOwomIzQzOwkJCQkJCSAgICAgIGludCBubGZsYWdzLAomIzQzOwkJCQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiAJaW50CQkJKCpuZG9fYnJpZGdlX2RlbGxpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCQkJCSAgICAgIHUxNiBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCA5NTcyOTMzOWU3YTU0Li5hNDA4YzM2YTdiNTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTIyMiw3ICYjNDM7MjIyLDggQEAgZXh0ZXJuIGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCSAgIHUzMiBmaWx0ZXJfbWFzaywKIAkJCQkgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCSAgICB1MzIgZmlsdGVyX21hc2spKTsKJiM0MzsJCQkJCQkgICAgdTMyIGZpbHRlcl9tYXNrKSwKJiM0MzsJCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogZXh0ZXJuIHZvaWQgcnRubF9vZmZsb2FkX3hzdGF0c19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggYWU3NmRmMGRlMDVhMC4uNTM2NzZkZjllNGQxMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTQ1OSw3ICYjNDM7NDU5LDcgQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAogCQkJICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncywKIAkJCSAgdTMyIGZpbHRlcl9tYXNrLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBib29sIGdldGxpbmspCiYjNDM7CQkJICBib29sIGdldGxpbmssIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LSZndDtvcGVyc3RhdGUpIDoKIAkJCQkJICAgIElGX09QRVJfRE9XTjsKQEAgLTYxMyw2ICYjNDM7NjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogZG9uZToKIAlpZiAoYWYpIHsKJiM0MzsJCWlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWCkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O1ZMQU4gaW5mb3JtYXRpb24gZG9lcyBub3QgZml0IGluIG9uZSBtZXNzYWdlLCB1c2UgUlRNX0dFVFZMQU4mIzM0Oyk7CiYjNDM7CQkJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKJiM0MzsJCQlyZXR1cm4gLUUyQklHOwomIzQzOwkJfQogCQlpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiAmZ3Q7IG5sYV9hdHRyX3NpemUoMCkpCiAJCQlubGFfbmVzdF9lbmQoc2tiLCBhZik7CiAJCWVsc2UKQEAgLTY1NCw3ICYjNDM7NjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OwogCi0JZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlKTsKJiM0MzsJZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlLAomIzQzOwkJCSAgICAgTlVMTCk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGJyX25sbXNnX3NpemUoKSAqLwogCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwpAQCAtNjgwLDcgJiM0Mzs2ODcsOCBAQCB2b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOSwogICovCiBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLAotCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKQomIzQzOwkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncywKJiM0MzsJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOwogCkBAIC02OTIsNyAmIzQzOzcwMCw3IEBAIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBubGZsYWdzLAotCQkJICAgICAgZmlsdGVyX21hc2ssIGRldiwgdHJ1ZSk7CiYjNDM7CQkJICAgICAgZmlsdGVyX21hc2ssIGRldiwgdHJ1ZSwgZXh0YWNrKTsKIH0KIAogc3RhdGljIGludCBicl92bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCAwOWMzOTdlMzAzMzA3Li5lZGJlN2ExZjU3MzYzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtMjE3OSw3ICYjNDM7MjE3OSw3IEBAIGludCBicl9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncywKIAkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGludCBicl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7CiBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCSAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKTsKJiM0MzsJICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiBpbnQgYnJfcHJvY2Vzc192bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkJIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsCiAJCQkgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnZpbmZvX2N1cnIsCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGJlOWQxNjI1YmFjMzEuLjk2N2I1ODdlZjY2NDggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC01Mzk4LDcgJiM0Mzs1Mzk4LDggQEAgaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkgICAgdTMyIGZpbHRlcl9tYXNrLAogCQkJICAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgIHUzMiBmaWx0ZXJfbWFzaykpCiYjNDM7CQkJCQkgICAgIHUzMiBmaWx0ZXJfbWFzayksCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgaWZpbmZvbXNnICppZm07CkBAIC01NTc0LDcgJiM0Mzs1NTc1LDggQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJCWlmIChpZHggJmd0Oz0gY2ItJmd0O2FyZ3NbMF0pIHsKIAkJCQllcnIgPSBicl9kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19icmlkZ2VfZ2V0bGluaygKIAkJCQkJCXNrYiwgcG9ydGlkLCBzZXEsIGRldiwKLQkJCQkJCWZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7CiYjNDM7CQkJCQkJZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJLAomIzQzOwkJCQkJCWNiLSZndDtleHRhY2spOwogCQkJCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FT1BOT1RTVVBQKSB7CiAJCQkJCWlmIChsaWtlbHkoc2tiLSZndDtsZW4pKQogCQkJCQkJYnJlYWs7CkBAIC01NTkwLDcgJiM0Mzs1NTkyLDggQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJCQllcnIgPSBvcHMtJmd0O25kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCwKIAkJCQkJCQkgICAgICBzZXEsIGRldiwKIAkJCQkJCQkgICAgICBmaWx0ZXJfbWFzaywKLQkJCQkJCQkgICAgICBOTE1fRl9NVUxUSSk7CiYjNDM7CQkJCQkJCSAgICAgIE5MTV9GX01VTFRJLAomIzQzOwkJCQkJCQkgICAgICBjYi0mZ3Q7ZXh0YWNrKTsKIAkJCQlpZiAoZXJyICZsdDsgMCAmYW1wOyZhbXA7IGVyciAhPSAtRU9QTk9UU1VQUCkgewogCQkJCQlpZiAobGlrZWx5KHNrYi0mZ3Q7bGVuKSkKIAkJCQkJCWJyZWFrOwpAQCAtNTYyNCw3ICYjNDM7NTYyNyw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGJyaWRnZV9ubG1zZ19zaXplKHZvaWQpCiAJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTsJLyogSUZMQV9CUklER0VfTU9ERSAqLwogfQogCi1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNTYzOSw3ICYjNDM7NTY0Myw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWdvdG8gZXJyb3V0OwogCX0KIAotCWVyciA9IGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwKTsKJiM0MzsJZXJyID0gZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDAsIDAsIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyb3V0OwogCkBAIC01NzMwLDcgJiM0Mzs1NzM0LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJLyogR2VuZXJhdGUgZXZlbnQgdG8gbm90aWZ5IHVwcGVyIGxheWVyIG9mIGJyaWRnZQogCQkJICogY2hhbmdlCiAJCQkgKi8KLQkJCWVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYpOwomIzQzOwkJCWVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYsIGV4dGFjayk7CiAJCX0KIAl9CiAKQEAgLTU4MDUsNyAmIzQzOzU4MDksNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2RlbGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlCiAJCQkgKiBjaGFuZ2UKIAkJCSAqLwotCQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7CiYjNDM7CQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTsKIAkJfQogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgc3BlY2lmaWNhbGx5IHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGRpZmYgaXMgYWRkaW5nIGEgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgcGFyYW1ldGVyIHRvIHRoZSBgbmRvX2JyaWRnZV9nZXRsaW5rYCBmdW5jdGlvbiBhY3Jvc3MgdGhlIGJvYXJkLiBUaGlzIGluY2x1ZGVzIHVwZGF0ZXMgdG8gYHN0cnVjdCBuZXRfZGV2aWNlX29wc2AsIHRoZSBpbXBsZW1lbnRpbmcgZHJpdmVycyBsaWtlIGBibnh0YCwgYGJlX21haW5gLCBhbmQgc28gb24sIHRoZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBpbiBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGVycyB3aXRoaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB3aGljaCBhcmUgcGFzc2luZyBlaXRoZXIgYGNiLSZndDtleHRhY2tgIG9yIGBleHRhY2tgLgoKVGhlIGNvcmUgYXJlYSBvZiBpbnRlcmVzdCwgaG93ZXZlciwgc2VlbXMgdG8gYmUgd2l0aGluIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicl9maWxsX2lmaW5mb2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCBwcm92aWRlZCwgaXQgbG9va3MgbGlrZSBgYnJfZmlsbF9pZmluZm9gIG5vdyBhbHNvIHRha2VzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIuIEkmIzM5O20gc2VlaW5nIGEgY2hlY2sgdGhhdCYjMzk7cyBuZXc7IGEgY29tcGFyaXNvbiBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IFZMQU4gaW5mb3JtYXRpb24gZml0cyB3aXRoaW4gYSBzaW5nbGUgbWVzc2FnZS4gSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGlzIHNldCB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYCB2aWEgYGV4dGFja2AsIGFuZCB0aGUgbWVzc2FnZSBpcyBjYW5jZWxlZC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyBgZXh0YWNrYCBpcyBpbml0aWFsaXplZCBhbmQgdXNlZC4gSXMgaXQgYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgaW50byB0aGVzZSBmdW5jdGlvbnM/IElmIG5vdCwgd2UgY291bGQgaGF2ZSBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIHdoZXJlIGdhcmJhZ2UgZGF0YSBtaWdodCBiZSB1c2VkIGluIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUuIFRoZSBWTEFOIGNoZWNrIGlzIGludGVyZXN0aW5nLCBidXQgaXQmIzM5O3MgdGhlIGluaXRpYWxpemF0aW9uLCBvciBsYWNrIHRoZXJlb2YsIG9mIGBleHRhY2tgIHRoYXQmIzM5O3MgcmFpc2luZyBteSBmbGFncyBoZXJlLiBUaGUgY29udGV4dCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGxzIHRvIGBicl9maWxsX2lmaW5mb2AgaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHJpc2suIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgY2hhbmdlIHRvIHNlZSBob3cgYW5kIHdoZXJlIGBleHRhY2tgIGlzIGluaXRpYWxpemVkLCBhbmQgaWYgYW55IGNvZGUgcGF0aHMgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIHRoZXNlIGltcG9ydGFudCBmdW5jdGlvbnMuIFRoaXMgd2FycmFudHMgZGVlcGVyIGludmVzdGlnYXRpb24gYW5kIHZlcnkgd2VsbCBtaWdodCBuZWVkIGEgS01TQU4gZnV6emluZyBydW4gdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTk1Olx0XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwb3J0KSB7XG4gNTk2Olx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4gNTk3Olx0XHRcdHN0cnVjdCBubGF0dHIgKm1zdF9uZXN0O1xuIDU5ODpcdFx0XHRpbnQgZXJyO1xuIDU5OTpcdFxuIDYwMDpcdFx0XHRpZiAoIXZnIHx8ICF2Zy1cdTAwM2VudW1fdmxhbnMpXG4gNjAxOlx0XHRcdFx0Z290byBkb25lO1xuIDYwMjpcdFxuIDYwMzpcdFx0XHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcbiA2MDQ6XHRcdFx0aWYgKCFtc3RfbmVzdClcbiA2MDU6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MDY6XHRcbiA2MDc6XHRcdFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcbiA2MDg6XHRcdFx0aWYgKGVycilcbiA2MDk6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2MTA6XHRcbiA2MTE6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xuIDYxMjpcdFx0fVxuIDYxMzpcdFxuIDYxNDpcdGRvbmU6XG4gNjE1Olx0XHRpZiAoYWYpIHtcbiA2MTY6XHRcdFx0aWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgXHUwMDNlIFUxNl9NQVgpIHtcbiA2MTc6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIDYxODpcdFx0XHRcdFx0XHQgICBcJiMzNDtWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOXCYjMzQ7KTtcbiA2MTk6XHRcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuIDYyMDpcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gNjIxOlx0XHRcdH1cbiA2MjI6XHRcdFx0aWYgKG5sbXNnX2dldF9wb3Moc2tiKSAtICh2b2lkICopYWYgXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXG4gNjIzOlx0XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgYWYpO1xuIDYyNDpcdFx0XHRlbHNlXG4gNjI1Olx0XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYWYpO1xuIDYyNjpcdFx0fVxuIDYyNzpcdFxuIDYyODpcdFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiA2Mjk6XHRcdHJldHVybiAwO1xuIDYzMDpcdFxuIDYzMTpcdG5sYV9wdXRfZmFpbHVyZTpcbiA2MzI6XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4gNjMzOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDYzNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBOZXRsaW5rIEF0dHJpYnV0ZSBPdmVyZmxvdyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGlzIGBhZmAgdmFyaWFibGUgaXMgYSBgc3RydWN0IG5sYXR0ciAqYCwgc3BlY2lmaWNhbGx5IGNyZWF0ZWQgdXNpbmcgYG5sYV9uZXN0X3N0YXJ0X25vZmxhZ2Agd2l0aGluIHRoZSBuZXRsaW5rIGNvbnRleHQuIFJpZ2h0LCBpbiBuZXRsaW5rLCBgbmxhX2xlbmAgaXMgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYF9fdTE2YCksIG1lYW5pbmcgaXQgaGFzIGEgbWF4aW11bSB2YWx1ZSBvZiA2NTUzNS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgYG5sYV9uZXN0X2VuZGAgY2FsY3VsYXRlcyBgbmxhX2xlbmAuIEl0IGFzc2lnbnMgYGFmLSZndDtubGFfbGVuYCBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IHRhaWwgb2YgdGhlIHNrYiAoYHNrYl90YWlsX3BvaW50ZXJgKSBhbmQgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGF0dHJpYnV0ZSAoYCh1bnNpZ25lZCBjaGFyICopYWZgKS4KClRoZSBwb3RlbnRpYWwgaXNzdWUgaW1tZWRpYXRlbHkganVtcHMgb3V0OiBJZiB0aGUgZGF0YSBiZWluZyBuZXN0ZWQgKndpdGhpbiogdGhlIGF0dHJpYnV0ZSBpcyB0b28gbGFyZ2Ug4oCTIGlmLCBmb3IgaW5zdGFuY2UsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBodWdlIG51bWJlciBvZiBWTEFOcyDigJMgdGhpcyBsZW5ndGggY2FsY3VsYXRpb24gY291bGQgZXhjZWVkIHRoZSBgVTE2X01BWGAgbGltaXQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3chIGBhZi0mZ3Q7bmxhX2xlbmAgd291bGQgd3JhcCBhcm91bmQsIGJlY29taW5nIGEgc21hbGwsIGluY29ycmVjdCBudW1iZXIuIFRoaXMgd291bGQgcmVzdWx0IGluIGVpdGhlciB0aGUga2VybmVsIG9yIHVzZXJzcGFjZSBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUgYXMgbXVjaCBzbWFsbGVyIHRoYW4gaXQgYWN0dWFsbHkgaXMsIHJlc3VsdGluZyBpbiBhIGNvcnJ1cHRlZCBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgb3IgdHJ1bmNhdGVkIGF0dHJpYnV0ZS4KCkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBleGFjdGx5IHRoYXQhIEl0IGFkZHMgYSBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWClgLiBJZiB0aGUgbGVuZ3RoIGlzIHRvbyBsYXJnZSwgaXQgc2V0cyBhbiBleHRlbmRlZCBBQ0sgZXJyb3IgbWVzc2FnZSwgY2FuY2VscyB0aGUgbmV0bGluayBtZXNzYWdlLCBhbmQgcmV0dXJucyBgLUUyQklHYC4gU21hcnQhIFRoZXkmIzM5O3ZlIG1hbmFnZWQgdG8gY2F0Y2ggdGhlIG92ZXJmbG93IGJlZm9yZSBpdCBjYXVzZXMgcmVhbCBkYW1hZ2UuCgpUaGUgY29kZSYjMzk7cyB0aHJlYWRpbmcgYSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgIGRvd24gdG8gYGJyX2ZpbGxfaWZpbmZvYCB0byBlbmFibGUgdGhlIHNldHRpbmcgb2YgYGV4dGFja2AgaW4gdGhlIGZpcnN0IHBsYWNlLCBnb29kIGRlc2lnbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGluIHRoZSBleHRlbmRlZCBBQ0suCgpOb3csIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgdGhpcyBwYXRjaCBoYXMgYW55IG90aGVyIGNoYW5nZXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AgdG8gY29uZmlybSB0aGF0IGFueSBzaW1pbGFyIGNvZGUgaXMgY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTM5NTpcdGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuNTM5NjpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbW9kZSxcbjUzOTc6XHRcdFx0XHQgICAgdTMyIGZsYWdzLCB1MzIgbWFzaywgaW50IG5sZmxhZ3MsXG41Mzk4Olx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzayxcbjUzOTk6XHRcdFx0XHQgICAgaW50ICgqdmxhbl9maWxsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuNTQwMDpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG41NDAxOlx0XHRcdFx0XHRcdCAgICAgdTMyIGZpbHRlcl9tYXNrKSxcbjU0MDI6XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuNTQwMzpcdHtcbjU0MDQ6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuNTQwNTpcdFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xuNTQwNjpcdFx0c3RydWN0IG5sYXR0ciAqYnJfYWZzcGVjO1xuNTQwNzpcdFx0c3RydWN0IG5sYXR0ciAqcHJvdGluZm87XG41NDA4Olx0XHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBkZXYtXHUwMDNlb3BlcnN0YXRlIDogSUZfT1BFUl9ET1dOO1xuNTQwOTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpO1xuNTQxMDpcdFx0aW50IGVyciA9IDA7XG41NDExOlx0XG41NDEyOlx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgUlRNX05FV0xJTkssIHNpemVvZigqaWZtKSwgbmxmbGFncyk7XG41NDEzOlx0XHRpZiAobmxoID09IE5VTEwpXG41NDE0Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG41NDE1Olx0XG41NDE2Olx0XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG41NDE3Olx0XHRpZm0tXHUwMDNlaWZpX2ZhbWlseSA9IEFGX0JSSURHRTtcbjU0MTg6XHRcdGlmbS1cdTAwM2VfX2lmaV9wYWQgPSAwO1xuNTQxOTpcdFx0aWZtLVx1MDAzZWlmaV90eXBlID0gZGV2LVx1MDAzZXR5cGU7XG41NDIwOlx0XHRpZm0tXHUwMDNlaWZpX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG41NDIxOlx0XHRpZm0tXHUwMDNlaWZpX2ZsYWdzID0gbmV0aWZfZ2V0X2ZsYWdzKGRldik7XG41NDIyOlx0XHRpZm0tXHUwMDNlaWZpX2NoYW5nZSA9IDA7XG41NDIzOlx0XG41NDI0Olx0XG41NDI1Olx0XHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBJRkxBX0lGTkFNRSwgZGV2LVx1MDAzZW5hbWUpIHx8XG41NDI2Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX01UVSwgZGV2LVx1MDAzZW10dSkgfHxcbjU0Mjc6XHRcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9PUEVSU1RBVEUsIG9wZXJzdGF0ZSkgfHxcbjU0Mjg6XHRcdCAgICAoYnJfZGV2IFx1MDAyNlx1MDAyNlxuNTQyOTpcdFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTUFTVEVSLCBicl9kZXYtXHUwMDNlaWZpbmRleCkpIHx8XG41NDMwOlx0XHQgICAgKGRldi1cdTAwM2VhZGRyX2xlbiBcdTAwMjZcdTAwMjZcbjU0MzE6XHRcdCAgICAgbmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LVx1MDAzZWFkZHJfbGVuLCBkZXYtXHUwMDNlZGV2X2FkZHIpKSB8fFxuNTQzMjpcdFx0ICAgIChkZXYtXHUwMDNlaWZpbmRleCAhPSBkZXZfZ2V0X2lmbGluayhkZXYpIFx1MDAyNlx1MDAyNlxuNTQzMzpcdFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTElOSywgZGV2X2dldF9pZmxpbmsoZGV2KSkpKVxuNTQzNDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCcmlkZ2UgTmV0bGluayBJbnRlcmZhY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYnJpZGdlIG5ldGxpbmsgaW50ZXJmYWNlIGhhbmRsZXMgZ2V0dGluZyBsaW5rIGluZm9ybWF0aW9uLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCB0YWtlcyBhbiBgZXh0YWNrYCBhcmd1bWVudCwgZXZlbiB0aG91Z2ggaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB1c2luZyBpdCByaWdodCBub3cuIEl0JiMzOTtzIHByb2JhYmx5IHRoZXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYG5kb19icmlkZ2VfZ2V0bGlua2Agb3IgZm9yIHBvdGVudGlhbCBmdXR1cmUgdXNlIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSBqdXN0IHdhbnQgdG8gdmVyaWZ5OyBubywgYHZsYW5fZmlsbGAgZG9lc24mIzM5O3QgZ2V0IGBleHRhY2tgIHBhc3NlZCB0byBpdC4KCkFscmlnaHQsIG1vdmluZyBvbiwgbGV0JiMzOTtzIGxvb2sgYXQgYHJ0bmxfYnJpZGdlX2dldGxpbmtgLiBPa2F5LCBJIHNlZSB0aGF0IHdpdGhpbiBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIHRoZSBkcml2ZXImIzM5O3MgYG5kb19icmlkZ2VfZ2V0bGlua2AgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aXRoIGBjYi0mZ3Q7ZXh0YWNrYCBwYXNzZWQgaW4uIFRoYXQgbWFrZXMgc2Vuc2UuIEkgc2VlIGEgc2ltaWxhciBwYXR0ZXJuIHdpdGggYHJ0bmxfYnJpZGdlX25vdGlmeWAsIHdoZXJlIGBleHRhY2tgIGlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyJiMzOTtzIGBuZG9fYnJpZGdlX2dldGxpbmtgLgoKTm93LCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayBncmVwIGZvciBgLm5kb19icmlkZ2VfZ2V0bGlua2AgYWNyb3NzIHRoZSByZWxldmFudCBjb2RlYmFzZS4gSSB3YW50IHRvIGNoZWNrIHRoYXQgYWxsIGRyaXZlcnMgdGhhdCBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhcmUgY29uc2lzdGVudGx5IHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgc2lnbmF0dXJlIHdpdGggYGV4dGFja2AgYW5kIGV2ZXJ5dGhpbmcgZWxzZS4gSXQgd291bGQgYmUgZWFzeSB0byBtaXNzIGFuIGluc3RhbmNlIGFuZCBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciBkcml2ZXJzIHNsaXAgdW5kZXIgdGhlIHJhZGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fYnJpZGdlX2dldGxpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTYyMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibnh0X25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYyNDAtXHQubmRvX3hkcF94bWl0XHRcdD0gYm54dF94ZHBfeG1pdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2MjQxOlx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0PSBibnh0X2JyaWRnZV9nZXRsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYyNDItXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQ9IGJueHRfYnJpZGdlX3NldGxpbmssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz00OTY4PXN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNTAxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NTAxMjpzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy01MDEzLVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTUxNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNTE3My1cdC5uZG9fYnJpZGdlX3NldGxpbmtcdD0gYmVfbmRvX2JyaWRnZV9zZXRsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo1MTc0Olx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0PSBiZV9uZG9fYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTUxNzUtXHQubmRvX2ZlYXR1cmVzX2NoZWNrXHQ9IGJlX2ZlYXR1cmVzX2NoZWNrLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTMwODg9c3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEzMTQ3OiAqIGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rIC0gR2V0IHRoZSBoYXJkd2FyZSBicmlkZ2UgbW9kZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xMzE0OC0gKiBAc2tiOiBza2IgYnVmZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNTgtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxMzE1OTpzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTEzMTYwLVx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTEzNjM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTQwZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTM2NjYtXHQubmRvX2ZlYXR1cmVzX2NoZWNrXHQ9IGk0MGVfZmVhdHVyZXNfY2hlY2ssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEzNjY3Olx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0PSBpNDBlX25kb19icmlkZ2VfZ2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTM2NjgtXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQ9IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTk3ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpY2VfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODEzLVx0Lm5kb19zZXRfZmVhdHVyZXMgPSBpY2Vfc2V0X2ZlYXR1cmVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgxNDpcdC5uZG9fYnJpZGdlX2dldGxpbmsgPSBpY2VfYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODE1LVx0Lm5kb19icmlkZ2Vfc2V0bGluayA9IGljZV9icmlkZ2Vfc2V0bGluayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM9MTA2OTk9c3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTA3MjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MTA3Mjc6c3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0xMDcyOC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYz0xMTA3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4Z2JlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTExMTEwLVx0Lm5kb19icmlkZ2Vfc2V0bGlua1x0PSBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MTExMTE6XHQubmRvX2JyaWRnZV9nZXRsaW5rXHQ9IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0xMTExMi1cdC5uZG9fZGZ3ZF9hZGRfc3RhdGlvblx0PSBpeGdiZV9md2RfYWRkLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTMyND1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NWVfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTUzNTAtXHQubmRvX2JyaWRnZV9zZXRsaW5rICAgICAgPSBtbHg1ZV9icmlkZ2Vfc2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM6NTM1MTpcdC5uZG9fYnJpZGdlX2dldGxpbmsgICAgICA9IG1seDVlX2JyaWRnZV9nZXRsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzUyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYz0yMzE1PWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZnBfbmZkM19uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYy0yMzQxLVx0Lm5kb194c2tfd2FrZXVwXHRcdD0gbmZwX25ldF94c2tfd2FrZXVwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jOjIzNDI6XHQubmRvX2JyaWRnZV9nZXRsaW5rICAgICA9IG5mcF9uZXRfYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM0My1cdC5uZG9fYnJpZGdlX3NldGxpbmsgICAgID0gbmZwX25ldF9icmlkZ2Vfc2V0bGluayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmM9MjM0Nj1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmZwX25mZGtfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM3MS1cdC5uZG9fYnBmXHRcdD0gbmZwX25ldF94ZHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmM6MjM3MjpcdC5uZG9fYnJpZGdlX2dldGxpbmsgICAgID0gbmZwX25ldF9icmlkZ2VfZ2V0bGluayxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYy0yMzczLVx0Lm5kb19icmlkZ2Vfc2V0bGluayAgICAgPSBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rLFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9MTA0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFldGhfbDJfaXFkX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0xMDY1LVx0Lm5kb19zZXRfZmVhdHVyZXNcdD0gcWV0aF9zZXRfZmVhdHVyZXMsXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjEwNjY6XHQubmRvX2JyaWRnZV9nZXRsaW5rXHQ9IHFldGhfbDJfYnJpZGdlX2dldGxpbmssXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTEwNjctXHQubmRvX2JyaWRnZV9zZXRsaW5rXHQ9IHFldGhfbDJfYnJpZGdlX3NldGxpbmssXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTEzNjAtICpcdFx0XHQgICAgIHUxNiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMzYxOiAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM2Mi0gKlx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY1Ny1cdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNjU4Olx0aW50XHRcdFx0KCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE2NTktXHRcdFx0XHRcdFx0ICAgICAgdTMyIHBpZCwgdTMyIHNlcSxcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NjgtXHQubmRvX21kYl9nZXRcdFx0ID0gYnJfbWRiX2dldCxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NDY5Olx0Lm5kb19icmlkZ2VfZ2V0bGlua1x0ID0gYnJfZ2V0bGluayxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDcwLVx0Lm5kb19icmlkZ2Vfc2V0bGlua1x0ID0gYnJfc2V0bGluayxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz01NTUzPXN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU3My1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjU1NzQ6XHRcdGlmIChicl9kZXYgXHUwMDI2XHUwMDI2IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluaykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU3NS1cdFx0XHRpZiAoaWR4IFx1MDAzZT0gY2ItXHUwMDNlYXJnc1swXSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU3NjpcdFx0XHRcdGVyciA9IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1NzctXHRcdFx0XHRcdFx0c2tiLCBwb3J0aWQsIHNlcSwgZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1ODktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NTkwOlx0XHRpZiAob3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluaykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU5MS1cdFx0XHRpZiAoaWR4IFx1MDAzZT0gY2ItXHUwMDNlYXJnc1swXSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU5MjpcdFx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCBwb3J0aWQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NTkzLVx0XHRcdFx0XHRcdFx0ICAgICAgc2VxLCBkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTYzMD1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTU2MzYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NjM3Olx0aWYgKCFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmspXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjM4LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjQ1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTY0NjpcdGVyciA9IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCwgZXh0YWNrKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU2NDctXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZMQU4gSW5mb3JtYXRpb24gT3ZlcmZsb3cgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7dmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgYWxsIHRoZSBpbXBsZW1lbnRhdGlvbnMgYW5kIGNhbGxlcnMgd2l0aCBgZXh0YWNrYCwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYWN0dWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZSB3aXRoIFZMQU4gaW5mb3JtYXRpb24uIEZyb20gd2hhdCBJIHNlZSwgaXQgaW50cm9kdWNlcyBhIGNydWNpYWwgb3ZlcmZsb3cgY2hlY2s6IGBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmICZndDsgVTE2X01BWGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBwcmV2aW91c2x5LCBpZiB0aGUgVkxBTiBkYXRhIG5lc3RlZCB3aXRoaW4gdGhlIGBhZmAgYXR0cmlidXRlIGV4Y2VlZGVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHNpemUgZm9yIGBubGFfbGVuYCksIHRoZSBgbmxhX25lc3RfZW5kYCBmdW5jdGlvbiB3b3VsZCBzaW1wbHkgdHJ1bmNhdGUgdGhlIGxlbmd0aCB0byBhIGB1MTZgLgoKVGhpcyBuZXcgY2hlY2sgYWRkcmVzc2VzIHRoYXQgYnkgY2FuY2VsbGluZyB0aGUgTmV0bGluayBtZXNzYWdlIGFuZCByZXR1cm5pbmcgYC1FMkJJR2AgaWYgdGhlIG92ZXJmbG93IGlzIGRldGVjdGVkLiBDcml0aWNhbGx5LCBpdCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGBleHRhY2tgIHN0cnVjdHVyZSBzbyBhIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgY2FuIGJlIHNldCB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYC4gVGhhdCBhbGxvd3MgdXMgdG8gcHJvdmlkZSBhIG11Y2ggbW9yZSB1c2VmdWwgZXJyb3IgbWVzc2FnZS4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCiogICBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCwgc28gbm8gY29uY2VybnMgdGhlcmUuCiogICBgTkxfU0VUX0VSUl9NU0dfTU9EYCBjb3JyZWN0bHkgc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBwb2ludGVyIHRvIGEgc3RyaW5nIGxpdGVyYWwsIHdoaWNoIGlzIHNhZmUuCiogICBJbiB0aGUgZXJyb3IgcGF0aCAoYC1FMkJJR2AgcmV0dXJuKSwgYG5sbXNnX2NhbmNlbChza2IsIG5saClgIGNvcnJlY3RseSB0cmltcyB0aGUgYHNrYmAgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCiogICBUaGUgYHNrYmAgYnVmZmVyIGl0c2VsZiBpcyBhbiBleGlzdGluZyBgc2tiYCBhbGxvY2F0ZWQgYnkgdGhlIE5ldGxpbmsgZHVtcC9ub3RpZnkgcm91dGluZXMsIGl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc2tiIGJ1ZmZlci4KKiAgIEkgY2FuIHNlZSB0aGF0IHRoZSBjcml0aWNhbCBjYWxjdWxhdGlvbiwgYHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWZgLCBpcyB1c2luZyB2YWxpZCBwb2ludGVycyBpbnRvIHRoZSBgc2tiYCBidWZmZXIuCiogICBUaGlzIGFsc28gbWVhbnMgdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZTsgaW4gZmFjdCwgaXQgKnByZXZlbnRzKiBzZW5kaW5nIGEgY29ycnVwdGVkIG1lc3NhZ2UuCiogICBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhOyBgYWZgIGFuZCBgc2tiYCBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGV4dGFja2Agc3RydWN0dXJlIGlzIHBhc3NlZCBpbi4KKiAgIEFsbCBkcml2ZXJzIGFyZSBjb3JyZWN0bHkgcGFzc2luZyB0aGUgYGV4dGFja2Agc3RydWN0IHRocm91Z2ggdG8gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYC4KCkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZXh0YWNrYCBpcyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXJzLCBlc3BlY2lhbGx5IGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYHJ0bmxfYnJpZGdlX3NldGxpbmtgLCBhbmQgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLgoKSSBrbm93IGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYGNiLSZndDtleHRhY2tgIGNvbWVzIGZyb20gdGhlIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3QsIHdoaWNoIGlzIG1hbmFnZWQgYnkgdGhlIE5ldGxpbmsgY29yZSBpdHNlbGYgKGluaXRpYWxpemVkIGFuZCB6ZXJvZWQgYnkgdGhlIGNvcmUpLiBUaGF0JiMzOTtzIGdvb2QuCgpJbiBgcnRubF9icmlkZ2Vfc2V0bGlua2AgYW5kIGBydG5sX2JyaWRnZV9kZWxsaW5rYCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBydG5sX2JyaWRnZV9ub3RpZnlgIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkgdG8gZW5zdXJlIHRoZSBgZXh0YWNrYCBwb2ludGVyIGlzIGJlaW5nIGhhbmRsZWQgc2FmZWx5LiBMZXQgbWUgcmV2aWV3IHRoYXQgY29kZSBhZ2FpbiB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzIwOlx0XG41NzIxOlx0XHRcdGZsYWdzIFx1MDAyNj0gfkJSSURHRV9GTEFHU19NQVNURVI7XG41NzIyOlx0XHR9XG41NzIzOlx0XG41NzI0Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUklER0VfRkxBR1NfU0VMRikpIHtcbjU3MjU6XHRcdFx0aWYgKCFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX3NldGxpbmspXG41NzI2Olx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG41NzI3Olx0XHRcdGVsc2VcbjU3Mjg6XHRcdFx0XHRlcnIgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX3NldGxpbmsoZGV2LCBubGgsXG41NzI5Olx0XHRcdFx0XHRcdFx0XHRcdCAgZmxhZ3MsXG41NzMwOlx0XHRcdFx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjU3MzE6XHRcdFx0aWYgKCFlcnIpIHtcbjU3MzI6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5CUklER0VfRkxBR1NfU0VMRjtcbjU3MzM6XHRcbjU3MzQ6XHRcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG41NzM1Olx0XHRcdFx0ICogY2hhbmdlXG41NzM2Olx0XHRcdFx0ICovXG41NzM3Olx0XHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbjU3Mzg6XHRcdFx0fVxuNTczOTpcdFx0fVxuNTc0MDpcdFxuNTc0MTpcdFx0aWYgKGJyX2ZsYWdzX2F0dHIpXG41NzQyOlx0XHRcdG1lbWNweShubGFfZGF0YShicl9mbGFnc19hdHRyKSwgXHUwMDI2ZmxhZ3MsIHNpemVvZihmbGFncykpO1xuNTc0MzpcdG91dDpcbjU3NDQ6XHRcdHJldHVybiBlcnI7XG41NzQ1Olx0fVxuNTc0NjpcdFxuNTc0NzpcdHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjU3NDg6XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuNTc0OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczODcKCQkJCQkJCW91dHB1dDogMjE1CgkJCQkJCQl0aG91Z2h0czogNTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gTmV0bGluayBCcmlkZ2UgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgZXh0YWNrYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0bGluayBicmlkZ2UgY29kZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBydG5sX2JyaWRnZV9zZXRsaW5rYCwgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLCBhbmQgYGJyX2luZm9fbm90aWZ5YC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZXh0YWNrYCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBhcyBgTlVMTGAgaW4gY2VydGFpbiBzaXR1YXRpb25zLCBvcmlnaW5hdGluZyBmcm9tIGBuZXRsaW5rX3Jjdl9za2JgIHdpdGhpbiB0aGUgbmV0bGluayBkaXNwYXRjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLgoKTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHdoZXRoZXIgdGhpcyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IsIHdvcnNlLCB3cml0dGVuIHRvLiBXZSBjYW4gc2VlIHRoYXQgYE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIC4uLilgIGlzIHRoZSBrZXkgbWFjcm8gaGVyZS4gVGhhdCBleHBhbmRzIHRvIGBOTF9TRVRfRVJSX01TRygpYCB3aGljaCBpbmNsdWRlcyBhIGNoZWNrIGBpZiAoZXh0YWNrKWAgd2l0aGluIGl0cyBzdHJ1Y3R1cmUuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgYGV4dGFjayA9PSBOVUxMYCBjYXNlLCBwcmV2ZW50aW5nIGFueSBkaXJlY3QgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyBuZXcgbWVtb3J5IGFsbG9jYXRlZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbmQgY2VydGFpbmx5IG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBhbHNvIHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgZm9yIG1hbGZvcm1lZCBtZXNzYWdlcy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNhcmVmdWxseSBhbmQgZGV0ZXJtaW5lZCB0aGF0IHRoZXJlJiMzOTtzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBpbiB0aGlzIGNvbnRleHQuIFRoZSBjb2RlIG5vdyBhbHNvIGluY2x1ZGVzIGVycm9yIGNoZWNrcyBmb3IgYnVmZmVyIHNpemUgZXhjZWVkaW5nIGBVMTZfTUFYYCwgY2FuY2VsbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIHdoZW4gdGhlIGJ1ZmZlciBpcyB0b28gbGFyZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaW4gc2NlbmFyaW9zIHdpdGggZGVlcCBuZXN0aW5nLCB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93aW5nIGRhdGEgYW5kIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4KCkkmIzM5O3ZlIGNvbmZpcm1lZCBteSBhbmFseXNpcyBieSBjaGVja2luZyBhbGwgZm91ciBjcml0ZXJpYSBmb3IgYE5lZWRzS01TQU5gLgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgLSB0aGUgcGF0Y2ggYWN0dWFsbHkgY2FuY2VscyB0aGUgbWVzc2FnZSBpZiBpdCYjMzk7cyB0b28gbGFyZ2UgaW5zdGVhZCBvZiB3cml0aW5nIGEgdHJ1bmNhdGVkIGxlbmd0aC4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAtIG5vIHN1Y2ggZGVwZW5kZW5jZS4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgLSBubyBhbGxvY2F0aW9ucyBhZGRlZC4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIC0gdGhlIG5lc3Qgc2l6ZSBpcyBub3cgcmVzdHJpY3RlZCB0byBgJmx0Oz0gVTE2X01BWGAuCgpHaXZlbiBhbGwgb2YgdGhpcywgdGhlcmUmIzM5O3Mgbm8gcG9zc2liaWxpdHkgb2YgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gdGhpcyBjb2RlLiBUaGUgcGF0Y2ggaXMgY2xlYW4gYW5kIHNhZmUgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGluIHRoaXMgaW5zdGFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IGEgMTYtYml0IGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIG5lc3RlZCBhdHRyaWJ1dGUgbGVuZ3RoIChJRkxBX0FGX1NQRUMpIHdoZW4gZHVtcGluZyBicmlkZ2UgcG9ydCBWTEFOIGluZm9ybWF0aW9uLCBjYW5jZWxpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIC1FMkJJRyBpZiB0aGUgbmVzdGVkIGRhdGEgZXhjZWVkcyBVMTZfTUFYLiBUbyBzdXBwb3J0IHNldHRpbmcgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgKE5MX1NFVF9FUlJfTVNHX01PRCksIGl0IHRocmVhZHMgdGhlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlciB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgIGFjcm9zcyBuZXQgY29yZSBhbmQgdmFyaW91cyBldGhlcm5ldCBkcml2ZXJzLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgYSAxNi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBsZW5ndGggKElGTEFfQUZfU1BFQykgd2hlbiBkdW1waW5nIGJyaWRnZSBwb3J0IFZMQU4gaW5mb3JtYXRpb24sIGNhbmNlbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIGFuZCByZXR1cm5pbmcgLUUyQklHIGlmIHRoZSBuZXN0ZWQgZGF0YSBleGNlZWRzIFUxNl9NQVguIFRvIHN1cHBvcnQgc2V0dGluZyBhbiBleHRlbmRlZCBhY2sgbWVzc2FnZSAoTkxfU0VUX0VSUl9NU0dfTU9EKSwgaXQgdGhyZWFkcyB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgcGFyYW1ldGVyIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AgYWNyb3NzIG5ldCBjb3JlIGFuZCB2YXJpb3VzIGV0aGVybmV0IGRyaXZlcnMuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIHBvaW50ZXIgYXJpdGhtZXRpYyByZWxpZXMgb24gdmFsaWQgYnVmZmVyIHBvaW50ZXJzIChgc2tiX3RhaWxfcG9pbnRlcihza2IpYCBhbmQgYGFmYCksIGFuZCBOTF9TRVRfRVJSX01TR19NT0Qgc2FmZWx5IGhhbmRsZXMgYm90aCB2YWxpZCBhbmQgTlVMTCBleHRhY2sgcG9pbnRlcnMuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50OyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjQwLjQ5MTIyMTg4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDk4MTQwNTA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2ZpbGxfaWZpbmZvXCIsXG4gICAgXCJicl9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2JyaWRnZV9nZXRsaW5rXCIsXG4gICAgXCJuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua1wiLFxuICAgIFwicnRubF9icmlkZ2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIChuZXQvYnJpZGdlIGFuZCBuZXQvY29yZS9ydG5ldGxpbmspLCBhZGRpbmcgYSBzaXplIGJvdW5kYXJ5IGNoZWNrIGluIGJyX2ZpbGxfaWZpbmZvKCkgdG8gcHJldmVudCB1MTYgbmxhX2xlbiBvdmVyZmxvdyB3aGVuIHNlcmlhbGl6aW5nIGJyaWRnZSBWTEFOIGluZm9ybWF0aW9uIGludG8gSUZMQV9BRl9TUEVDLCBhbmQgcGx1bWJzIG5ldGxpbmtfZXh0X2FjayB0aHJvdWdoIG5kb19icmlkZ2VfZ2V0bGluayBhY3Jvc3MgbmV0X2RldmljZV9vcHMgYW5kIHJ0bmV0bGluayBjYWxsZXJzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIHJlcXVlc3RzIG9uIGJyaWRnZSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo0MC40OTEyMjcwMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTM3OTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVhMDI4MDc1NWZlZTFmOTk4M2U3OWNhYzg4NjdmNDU4ZTVjZjNlNGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbmluZGV4IGNhOTlmNGIxYTYzYzMuLmE3NTJlNjZiZjYzNjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbkBAIC0xNjE1NCwxMiArMTYxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZHBfdHVubmVsX25pY19pbmZvIGJueHRfdWRwX3R1bm5lbHMgPSB7XFxuIFxcbiBzdGF0aWMgaW50IGJueHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcXG4tXFx0XFx0XFx0ICAgICAgIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHQgICAgICAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgYm54dCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgYnAtXFx1MDAzZWJyX21vZGUsIDAsIDAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xcbmluZGV4IGVkMzAyZjVlYzQ3NjguLmNjOWM4NzUzOWE0MjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcXG5AQCAtNTAxMSw3ICs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcbiBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgaW50IG5sZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdCBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0aW50IHN0YXR1cyA9IDA7XFxuQEAgLTUwMzcsNyArNTAzNyw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBoc3dfbW9kZSA9PSBQT1JUX0ZXRF9UWVBFX1ZFUEEgP1xcbiBcXHRcXHRcXHRcXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbmluZGV4IGFiYmM3MWU4MTVhZTMuLjUyYzJiMzkzYWFjZDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG5AQCAtMTMxNTEsNiArMTMxNTEsNyBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICAqIEBkZXY6IHRoZSBuZXRkZXYgYmVpbmcgY29uZmlndXJlZFxcbiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZFxcbiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW5cXG4rICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2tcXG4gICpcXG4gICogUmV0dXJuIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBoYXJkd2FyZSBicmlkZ2UgaXMgb3BlcmF0aW5nIGluXFxuICAqIGkuZSBWRUIgb3IgVkVQQS5cXG5AQCAtMTMxNTgsNyArMTMxNTksOCBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgaW50IG5sZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdCAgIGludCBubGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGk0MGVfbmV0ZGV2X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IGk0MGVfdnNpICp2c2kgPSBucC1cXHUwMDNldnNpO1xcbkBAIC0xMzE3NSw3ICsxMzE3Nyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCB2ZWItXFx1MDAzZWJyaWRnZV9tb2RlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuaW5kZXggZmU0N2VjMGJhODA5NC4uMDM4Y2UxZmU1YmZlNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuQEAgLTgwODYsMTIgKzgwODYsMTQgQEAgaW50IGljZV9zZXRfcnNzX2hmdW5jKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IGhmdW5jKVxcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcXG4gICogQGZpbHRlcl9tYXNrOiBmaWx0ZXIgbWFzayBwYXNzZWQgaW5cXG4gICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluXFxuKyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXFxuICAqXFxuICAqIFJldHVybiB0aGUgYnJpZGdlIG1vZGUgKFZFQi9WRVBBKVxcbiAgKi9cXG4gc3RhdGljIGludFxcbiBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4tXFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncylcXG4rXFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyxcXG4rXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihkZXYpO1xcbiBcXHR1MTYgYm1vZGU7XFxuQEAgLTgwOTksNyArODEwMSw3IEBAIGljZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHRibW9kZSA9IHBmLVxcdTAwM2VmaXJzdF9zdy1cXHUwMDNlYnJpZGdlX21vZGU7XFxuIFxcbiBcXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXFxuaW5kZXggZjkxODU2NDk4ZWIyZC4uNzdkZmQ4MGE2ZTM2OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcXG5AQCAtMTA3MjYsNyArMTA3MjYsOCBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XFxuIFxcbkBAIC0xMDczNSw3ICsxMDczNiw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcbiBcXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYWRhcHRlci1cXHUwMDNlYnJpZGdlX21vZGUsIDAsIDAsIG5sZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xcbmluZGV4IGZjMTEwYTdkMTZlOGQuLjUzYmY3OWRiZTA4ZGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5AQCAtNTI3Nyw3ICs1Mjc3LDcgQEAgc3RhdGljIGludCBtbHg1ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcXG4gI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXFxuLVxcdFxcdFxcdFxcdGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHRpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbkBAIC01Mjg4LDcgKzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdG1vZGUgPSBzZXR0aW5nID8gQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcXG4gXFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG1vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jXFxuaW5kZXggNzkyOGU3NmRhNzIzZS4uY2I3NTFkZGRiNjg4NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcXG5AQCAtMjI1Nyw3ICsyMjU3LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKVxcbiBcXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IG5mcF9uZXQgKm5uID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0dTE2IG1vZGU7XFxuQEAgLTIyNjksNyArMjI2OSw3IEBAIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbiBcXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcXG4gXFxuIFxcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xcbmluZGV4IDI5MzVjMmVjYzMxNGIuLmY5NjBjZjVhOTdhMjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xcbisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcXG5AQCAtOTM1LDcgKzkzNSw3IEBAIHN0YXRpYyB2b2lkIHFldGhfbDJfYnIyZGV2X3B1dCh2b2lkKVxcbiBcXG4gc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgIGludCBubGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IHFldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtXFx1MDAzZW1sX3ByaXY7XFxuQEAgLTk0OSw3ICs5NDksNyBAQCBzdGF0aWMgaW50IHFldGhfbDJfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG1vZGUsIHByaXYtXFx1MDAzZWJycG9ydF9mZWF0dXJlcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZWJycG9ydF9od19mZWF0dXJlcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcWV0aF9icnBvcnRfcG9saWN5W0lGTEFfQlJQT1JUX01BWCArIDFdID0ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDcwN2IyZTUxYzJiOTcuLjE4YTAzZjBmNmYxMTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMTM2MCw3ICsxMzYwLDcgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbiAgKlxcdFxcdFxcdCAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gICpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcXG4tICpcXHRcXHRcXHQgICAgIGludCBubGZsYWdzKVxcbisgKlxcdFxcdFxcdCAgICAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gICpcXHRcXHRcXHQgICAgIHUxNiBmbGFncyk7XFxuICAqXFxuQEAgLTE2NTksNyArMTY1OSw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBmaWx0ZXJfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG5sZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgbmxmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFx0aW50XFx0XFx0XFx0KCpuZG9fYnJpZGdlX2RlbGxpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MTYgZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxcbmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcXG5AQCAtMjIyLDcgKzIyMiw4IEBAIGV4dGVybiBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0XFx0ICAgdTMyIGZpbHRlcl9tYXNrLFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZpbHRlcl9tYXNrKSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB1MzIgZmlsdGVyX21hc2spLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBcXG4gZXh0ZXJuIHZvaWQgcnRubF9vZmZsb2FkX3hzdGF0c19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXFxuaW5kZXggYWU3NmRmMGRlMDVhMC4uNTM2NzZkZjllNGQxMSAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXFxuQEAgLTQ1OSw3ICs0NTksNyBAQCBzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4gXFx0XFx0XFx0ICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncyxcXG4gXFx0XFx0XFx0ICB1MzIgZmlsdGVyX21hc2ssIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdCAgYm9vbCBnZXRsaW5rKVxcbitcXHRcXHRcXHQgIGJvb2wgZ2V0bGluaywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IFJFQURfT05DRShkZXYtXFx1MDAzZW9wZXJzdGF0ZSkgOlxcbiBcXHRcXHRcXHRcXHRcXHQgICAgSUZfT1BFUl9ET1dOO1xcbkBAIC02MTMsNiArNjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIGRvbmU6XFxuIFxcdGlmIChhZikge1xcbitcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcXHUwMDNlIFUxNl9NQVgpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlZMQU4gaW5mb3JtYXRpb24gZG9lcyBub3QgZml0IGluIG9uZSBtZXNzYWdlLCB1c2UgUlRNX0dFVFZMQU5cXFwiKTtcXG4rXFx0XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXFxuIFxcdFxcdFxcdG5sYV9uZXN0X2VuZChza2IsIGFmKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC02NTQsNyArNjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0aWYgKHNrYiA9PSBOVUxMKVxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuLVxcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSk7XFxuK1xcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSxcXG4rXFx0XFx0XFx0ICAgICBOVUxMKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGJyX25sbXNnX3NpemUoKSAqL1xcbiBcXHRcXHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xcbkBAIC02ODAsNyArNjg3LDggQEAgdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiAgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOS1xcbiAgKi9cXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4tXFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXFxuK1xcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxcbitcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7XFxuIFxcbkBAIC02OTIsNyArNzAwLDcgQEAgaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRyZXR1cm4gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCBwaWQsIHNlcSwgUlRNX05FV0xJTkssIG5sZmxhZ3MsXFxuLVxcdFxcdFxcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUpO1xcbitcXHRcXHRcXHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCAwOWMzOTdlMzAzMzA3Li5lZGJlN2ExZjU3MzYzIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5AQCAtMjE3OSw3ICsyMTc5LDcgQEAgaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzLFxcbiBcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzKTtcXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpO1xcbitcXHQgICAgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gaW50IGJyX3Byb2Nlc3Nfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0XFx0XFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqdmluZm9fY3VycixcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IGJlOWQxNjI1YmFjMzEuLjk2N2I1ODdlZjY2NDggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC01Mzk4LDcgKzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBmaWx0ZXJfbWFzayxcXG4gXFx0XFx0XFx0ICAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBmaWx0ZXJfbWFzaykpXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGZpbHRlcl9tYXNrKSxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4gXFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xcbkBAIC01NTc0LDcgKzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IGJyX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRza2IsIHBvcnRpZCwgc2VxLCBkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Y2ItXFx1MDAzZWV4dGFjayk7XFxuIFxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTU1OTAsNyArNTU5Miw4IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzZXEsIGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmlsdGVyX21hc2ssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE5MTV9GX01VTFRJKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTkxNX0ZfTVVMVEksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNiLVxcdTAwM2VleHRhY2spO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWxlbikpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC01NjI0LDcgKzU2MjcsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBicmlkZ2Vfbmxtc2dfc2l6ZSh2b2lkKVxcbiBcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTtcXHQvKiBJRkxBX0JSSURHRV9NT0RFICovXFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuQEAgLTU2MzksNyArNTY0Myw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCk7XFxuK1xcdGVyciA9IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcbkBAIC01NzMwLDcgKzU3MzQsNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX3NldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdFxcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcXG4gXFx0XFx0XFx0ICogY2hhbmdlXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcXG4rXFx0XFx0XFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC01ODA1LDcgKzU4MDksNyBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2RlbGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdFxcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcXG4gXFx0XFx0XFx0ICogY2hhbmdlXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcXG4rXFx0XFx0XFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo0MS4yNjMxNzU3MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY2NDIxMzgwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfZmlsbF9pZmluZm9cIixcbiAgICBcImJyX2dldGxpbmtcIixcbiAgICBcInJ0bmxfYnJpZGdlX2dldGxpbmtcIixcbiAgICBcIm5kb19kZmx0X2JyaWRnZV9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2JyaWRnZV9ub3RpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YTAyODA3NTVmZWUxZjk5ODNlNzljYWM4ODY3ZjQ1OGU1Y2YzZTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5pbmRleCBjYTk5ZjRiMWE2M2MzLi5hNzUyZTY2YmY2MzY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5AQCAtMTYxNTQsMTIgKzE2MTU0LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdWRwX3R1bm5lbF9uaWNfaW5mbyBibnh0X3VkcF90dW5uZWxzID0ge1xuIFxuIHN0YXRpYyBpbnQgYm54dF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0ICAgICAgIGludCBubGZsYWdzKVxuK1x0XHRcdCAgICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBibnh0ICpicCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBicC1cdTAwM2Vicl9tb2RlLCAwLCAwLFxuLVx0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jXG5pbmRleCBlZDMwMmY1ZWM0NzY4Li5jYzljODc1MzlhNDI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uY1xuQEAgLTUwMTEsNyArNTAxMSw3IEBAIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFxuIHN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLVx0XHRcdFx0IGludCBubGZsYWdzKVxuK1x0XHRcdFx0IGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHN0YXR1cyA9IDA7XG5AQCAtNTAzNyw3ICs1MDM3LDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXG4gXHRcdFx0XHQgICAgICAgaHN3X21vZGUgPT0gUE9SVF9GV0RfVFlQRV9WRVBBID9cbiBcdFx0XHRcdCAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCLFxuLVx0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBiZV9jbWRfd29yayAqYmVfYWxsb2Nfd29yayhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuaW5kZXggYWJiYzcxZTgxNWFlMy4uNTJjMmIzOTNhYWNkMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbkBAIC0xMzE1MSw2ICsxMzE1MSw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcbiAgKiBAZmlsdGVyX21hc2s6IHVudXNlZFxuICAqIEBubGZsYWdzOiBuZXRsaW5rIGZsYWdzIHBhc3NlZCBpblxuKyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXG4gICpcbiAgKiBSZXR1cm4gdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGhhcmR3YXJlIGJyaWRnZSBpcyBvcGVyYXRpbmcgaW5cbiAgKiBpLmUgVkVCIG9yIFZFUEEuXG5AQCAtMTMxNTgsNyArMTMxNTksOCBAQCBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHUzMiBfX2Fsd2F5c191bnVzZWQgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgICBpbnQgbmxmbGFncylcbitcdFx0XHRcdCAgIGludCBubGZsYWdzLFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBpNDBlX25ldGRldl9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaTQwZV92c2kgKnZzaSA9IG5wLVx1MDAzZXZzaTtcbkBAIC0xMzE3NSw3ICsxMzE3Nyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCB2ZWItXHUwMDNlYnJpZGdlX21vZGUsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBmZTQ3ZWMwYmE4MDk0Li4wMzhjZTFmZTViZmU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtODA4NiwxMiArODA4NiwxNCBAQCBpbnQgaWNlX3NldF9yc3NfaGZ1bmMoc3RydWN0IGljZV92c2kgKnZzaSwgdTggaGZ1bmMpXG4gICogQGRldjogdGhlIG5ldGRldiBiZWluZyBjb25maWd1cmVkXG4gICogQGZpbHRlcl9tYXNrOiBmaWx0ZXIgbWFzayBwYXNzZWQgaW5cbiAgKiBAbmxmbGFnczogbmV0bGluayBmbGFncyBwYXNzZWQgaW5cbisgKiBAZXh0YWNrOiBuZXRsaW5rIGV4dGVuZGVkIGFja1xuICAqXG4gICogUmV0dXJuIHRoZSBicmlkZ2UgbW9kZSAoVkVCL1ZFUEEpXG4gICovXG4gc3RhdGljIGludFxuIGljZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuLVx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuK1x0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuK1x0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBpY2VfbmV0ZGV2X3RvX3BmKGRldik7XG4gXHR1MTYgYm1vZGU7XG5AQCAtODA5OSw3ICs4MTAxLDcgQEAgaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRibW9kZSA9IHBmLVx1MDAzZWZpcnN0X3N3LVx1MDAzZWJyaWRnZV9tb2RlO1xuIFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgYm1vZGUsIDAsIDAsIG5sZmxhZ3MsXG4tXHRcdFx0XHQgICAgICAgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbmluZGV4IGY5MTg1NjQ5OGViMmQuLjc3ZGZkODBhNmUzNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuQEAgLTEwNzI2LDcgKzEwNzI2LDggQEAgc3RhdGljIGludCBpeGdiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncylcbitcdFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGl4Z2JlX2Zyb21fbmV0ZGV2KGRldik7XG4gXG5AQCAtMTA3MzUsNyArMTA3MzYsNyBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBhZGFwdGVyLVx1MDAzZWJyaWRnZV9tb2RlLCAwLCAwLCBubGZsYWdzLFxuLVx0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKml4Z2JlX2Z3ZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5pbmRleCBmYzExMGE3ZDE2ZThkLi41M2JmNzlkYmUwOGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTUyNzcsNyArNTI3Nyw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXG4gI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcbiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRpbnQgbmxmbGFncylcbitcdFx0XHRcdGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG5AQCAtNTI4OCw3ICs1Mjg4LDcgQEAgc3RhdGljIGludCBtbHg1ZV9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0bW9kZSA9IHNldHRpbmcgPyBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCO1xuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBtb2RlLFxuLVx0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMKTtcbitcdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCwgZXh0YWNrKTtcbiB9XG4gXG4gc3RhdGljIGludCBtbHg1ZV9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbmluZGV4IDc5MjhlNzZkYTcyM2UuLmNiNzUxZGRkYjY4ODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuQEAgLTIyNTcsNyArMjI1Nyw3IEBAIHN0YXRpYyBpbnQgbmZwX25ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqYWRkcilcbiBcbiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLFxuLVx0XHRcdFx0ICBpbnQgbmxmbGFncylcbitcdFx0XHRcdCAgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmZwX25ldCAqbm4gPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dTE2IG1vZGU7XG5AQCAtMjI2OSw3ICsyMjY5LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHQgICAgICAgQlJJREdFX01PREVfVkVQQSA6IEJSSURHRV9NT0RFX1ZFQjtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIG1vZGUsIDAsIDAsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcbmluZGV4IDI5MzVjMmVjYzMxNGIuLmY5NjBjZjVhOTdhMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jXG4rKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jXG5AQCAtOTM1LDcgKzkzNSw3IEBAIHN0YXRpYyB2b2lkIHFldGhfbDJfYnIyZGV2X3B1dCh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBxZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi1cdTAwM2VtbF9wcml2O1xuQEAgLTk0OSw3ICs5NDksNyBAQCBzdGF0aWMgaW50IHFldGhfbDJfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsXG4gXHRcdFx0XHQgICAgICAgbW9kZSwgcHJpdi1cdTAwM2VicnBvcnRfZmVhdHVyZXMsXG4gXHRcdFx0XHQgICAgICAgcHJpdi1cdTAwM2VicnBvcnRfaHdfZmVhdHVyZXMsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcWV0aF9icnBvcnRfcG9saWN5W0lGTEFfQlJQT1JUX01BWCArIDFdID0ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA3MDdiMmU1MWMyYjk3Li4xOGEwM2YwZjZmMTEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbiAgKlx0XHRcdCAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gICogaW50ICgqbmRvX2JyaWRnZV9nZXRsaW5rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuICAqXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tICpcdFx0XHQgICAgIGludCBubGZsYWdzKVxuKyAqXHRcdFx0ICAgICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuICAqIGludCAoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gICpcdFx0XHQgICAgIHUxNiBmbGFncyk7XG4gICpcbkBAIC0xNjU5LDcgKzE2NTksOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuIFx0XHRcdFx0XHRcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0XHQgICAgICB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0ICAgICAgaW50IG5sZmxhZ3MpO1xuK1x0XHRcdFx0XHRcdCAgICAgIGludCBubGZsYWdzLFxuK1x0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXHRpbnRcdFx0XHQoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRcdFx0XHQgICAgICB1MTYgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5pbmRleCA5NTcyOTMzOWU3YTU0Li5hNDA4YzM2YTdiNTU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTIyMiw3ICsyMjIsOCBAQCBleHRlcm4gaW50IG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICB1MzIgZmlsdGVyX21hc2ssXG4gXHRcdFx0XHQgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaykpO1xuK1x0XHRcdFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2spLFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcbiBleHRlcm4gdm9pZCBydG5sX29mZmxvYWRfeHN0YXRzX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXG5pbmRleCBhZTc2ZGYwZGUwNWEwLi41MzY3NmRmOWU0ZDExIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jXG5AQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4gXHRcdFx0ICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBmbGFncyxcbiBcdFx0XHQgIHUzMiBmaWx0ZXJfbWFzaywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHQgIGJvb2wgZ2V0bGluaylcbitcdFx0XHQgIGJvb2wgZ2V0bGluaywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IFJFQURfT05DRShkZXYtXHUwMDNlb3BlcnN0YXRlKSA6XG4gXHRcdFx0XHRcdCAgICBJRl9PUEVSX0RPV047XG5AQCAtNjEzLDYgKzYxMywxMiBAQCBzdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gZG9uZTpcbiBcdGlmIChhZikge1xuK1x0XHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcdTAwM2UgVTE2X01BWCkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlwiKTtcbitcdFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuK1x0XHRcdHJldHVybiAtRTJCSUc7XG4rXHRcdH1cbiBcdFx0aWYgKG5sbXNnX2dldF9wb3Moc2tiKSAtICh2b2lkICopYWYgXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXG4gXHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgYWYpO1xuIFx0XHRlbHNlXG5AQCAtNjU0LDcgKzY2MCw4IEBAIHZvaWQgYnJfaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRpZiAoc2tiID09IE5VTEwpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuLVx0ZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlKTtcbitcdGVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDAsIGZpbHRlciwgZGV2LCBmYWxzZSxcbitcdFx0XHQgICAgIE5VTEwpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gYnJfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5AQCAtNjgwLDcgKzY4Nyw4IEBAIHZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiAgKiBEdW1wIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwb3J0cywgaW4gcmVzcG9uc2UgdG8gR0VUTElOS1xuICAqL1xuIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZpbHRlcl9tYXNrLCBpbnQgbmxmbGFncylcbitcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxuK1x0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcnRubChkZXYpO1xuIFxuQEAgLTY5Miw3ICs3MDAsNyBAQCBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIHBpZCwgc2VxLCBSVE1fTkVXTElOSywgbmxmbGFncyxcbi1cdFx0XHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlKTtcbitcdFx0XHQgICAgICBmaWx0ZXJfbWFzaywgZGV2LCB0cnVlLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggMDljMzk3ZTMwMzMwNy4uZWRiZTdhMWY1NzM2MyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuQEAgLTIxNzksNyArMjE3OSw3IEBAIGludCBicl9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyxcbiBcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGludCBicl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7XG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdCAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKTtcbitcdCAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGludCBicl9wcm9jZXNzX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsXG4gXHRcdFx0IHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICp2aW5mb19jdXJyLFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IGJlOWQxNjI1YmFjMzEuLjk2N2I1ODdlZjY2NDggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC01Mzk4LDcgKzUzOTgsOCBAQCBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrLFxuIFx0XHRcdCAgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0ICAgICB1MzIgZmlsdGVyX21hc2spKVxuK1x0XHRcdFx0XHQgICAgIHUzMiBmaWx0ZXJfbWFzayksXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbiBcdHN0cnVjdCBpZmluZm9tc2cgKmlmbTtcbkBAIC01NTc0LDcgKzU1NzUsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdGlmIChpZHggXHUwMDNlPSBjYi1cdTAwM2VhcmdzWzBdKSB7XG4gXHRcdFx0XHRlcnIgPSBicl9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoXG4gXHRcdFx0XHRcdFx0c2tiLCBwb3J0aWQsIHNlcSwgZGV2LFxuLVx0XHRcdFx0XHRcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSk7XG4rXHRcdFx0XHRcdFx0ZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJLFxuK1x0XHRcdFx0XHRcdGNiLVx1MDAzZWV4dGFjayk7XG4gXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcbiBcdFx0XHRcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlbGVuKSlcbiBcdFx0XHRcdFx0XHRicmVhaztcbkBAIC01NTkwLDcgKzU1OTIsOCBAQCBzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHNlcSwgZGV2LFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHRcdFx0XHQgICAgICBOTE1fRl9NVUxUSSk7XG4rXHRcdFx0XHRcdFx0XHQgICAgICBOTE1fRl9NVUxUSSxcbitcdFx0XHRcdFx0XHRcdCAgICAgIGNiLVx1MDAzZWV4dGFjayk7XG4gXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApIHtcbiBcdFx0XHRcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlbGVuKSlcbiBcdFx0XHRcdFx0XHRicmVhaztcbkBAIC01NjI0LDcgKzU2MjcsOCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBicmlkZ2Vfbmxtc2dfc2l6ZSh2b2lkKVxuIFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTtcdC8qIElGTEFfQlJJREdFX01PREUgKi9cbiB9XG4gXG4tc3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTU2MzksNyArNTY0Myw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFx0fVxuIFxuLVx0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwKTtcbitcdGVyciA9IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIDAsIDAsIGRldiwgMCwgMCwgZXh0YWNrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuQEAgLTU3MzAsNyArNTczNCw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG4gXHRcdFx0ICogY2hhbmdlXG4gXHRcdFx0ICovXG4tXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7XG4rXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU4MDUsNyArNTgwOSw3IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXG4gXHRcdFx0ICogY2hhbmdlXG4gXHRcdFx0ICovXG4tXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7XG4rXHRcdFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcbiBcdFx0fVxuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6NDEuMjYzMTc3MzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDgzNjQ4NzczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCBJIG5lZWQgdG8gZXZhbHVhdGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3Mgc2VlIHdoYXQgaXQgdG91Y2hlcy4gQWgsIHJpZ2h0LCBhIHdob2xlIHN3YXRoIG9mIG5ldHdvcmsgZHJpdmVyczogQnJvYWRjb20sIEVtdWxleCwgSW50ZWwgKGk0MGUsIGljZSwgaXhnYmUpLCBNZWxsYW5veCwgTmV0cm9ub21lLCBhbmQgZXZlbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEludGVyZXN0aW5nLiBQbHVzLCBjaGFuZ2VzIHRvIGBuZXRkZXZpY2UuaGAsIGBydG5ldGxpbmsuaGAsIGFuZCBzb21lIGtleSBicmlkZ2UgY29kZSAoYGJyX25ldGxpbmsuY2AsIGBicl9wcml2YXRlLmhgKSwgYW5kIGBydG5ldGxpbmsuY2AgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhcmVhLiBUaGF0J3MgYSBwcmV0dHkgd2lkZSBzY29wZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBjaGFuZ2VzIGluIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AgYXJlIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhleSd2ZSBhZGRlZCBhIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIGFyZ3VtZW50IHRvIGBicl9maWxsX2lmaW5mb2AgYW5kIGEgZmV3IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBBbmQgdGhlcmUncyB0aGlzIG5ldyBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYKWAuIElmIHRoYXQgY29uZGl0aW9uIGlzIHRydWUsIGl0IHJldHVybnMgYC1FMkJJR2AuIEFoYSEgU28sIHRoZXkncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBidWZmZXIgb3ZlcmZsb3dzIG9yIHNpemUgbGltaXRhdGlvbnMgd2l0aGluIHRoZSBOZXRsaW5rIG1lc3NhZ2VzIHdoZW4gaGFuZGxpbmcgVkxBTiBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBicmlkZ2UgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgdGhlIFZMQU4gaW5mb3JtYXRpb24gbWlnaHQgYmUgZ2V0dGluZyB0b28gbGFyZ2UgdG8gZml0IGluIGEgc2luZ2xlIG5ldGxpbmsgbWVzc2FnZSBpbiBzb21lIGNhc2VzLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGllY2UgaXMgdGhlIGAtRTJCSUdgIGVycm9yIGNvZGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgVkxBTiBpbmZvcm1hdGlvbiBpcyBub3QgZml0dGluZyB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLCBhbmQgdGhhdCBzdWdnZXN0cyBzb21lIGxpbWl0IHRvIHRoZSBtZXNzYWdlIHNpemUgaW4gdGhlIGtlcm5lbC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqV2h5KiB3YXMgdGhpcyBjaGVjayBhZGRlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBXYXMgdGhpcyBhIGtub3duIGlzc3VlLCBhIG5ld2x5IGRpc2NvdmVyZWQgb25lLCBvciBhIHJlc3BvbnNlIHRvIHNvbWUgc3BlY2lmaWMgdXNlciByZXBvcnRzIG9yIHNjZW5hcmlvcz8gSSBuZWVkIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBpZiB0aGUgYXBwcm9hY2ggaXMgY29ycmVjdC4gVGltZSB0byBkaWcgaW50byB0aGUgZ2l0IGxvZyBhbmQgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMgdGVsbCBtZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTEyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6NDYuMDk5NjY4MDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTYzMzE4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTYxNy1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjYxODpcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTYxOS1cXHRcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo0OC42OTYwMTAyODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzE2ODcyNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tbWl0J3MgSW50ZW50KipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgY3VycmVudCBgSEVBRGAgY29tbWl0LiBUaGUgaWRlYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gZGl2ZSBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSwgYnV0IHRoZSBncmVwcGVyIHRvb2wgaXNuJ3QgZGlzcGxheWluZyBgZ2l0IGxvZ2Agb3V0cHV0LiBIbW0sIHRoYXQncyBhIGxpbWl0YXRpb24uIEkgbmVlZCB0byBhZGFwdC4gSXMgdGhlcmUgYSB3YXkgdG8gaW5kaXJlY3RseSBhY2Nlc3MgdGhlIGNvbW1pdCBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBvdGhlciB0b29scz8gQ2FuIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBjb2Rlc2VhcmNoYCBvciBgcmVhZC1maWxlYCB0byBnbGVhbiBpbnNpZ2h0cyBmcm9tIHJlbGF0ZWQgZmlsZXM/IE5vLCBJJ20gbGltaXRlZCB0byBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoYCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgLiBMb29rcyBsaWtlIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYSBgZ2l0IGxvZ2AgdG9vbCBkaXJlY3RseSwgd2hpY2ggbWFrZXMgdGhpcyB0cmlja2llci5cblxuQWxyaWdodCwgYSBtb3JlIGRpcmVjdCBhcHByb2FjaCBpcyBvZmYgdGhlIHRhYmxlLiBMZXQncyBzaGlmdCBnZWFycyBhbmQgbG9vayBmb3IgY2x1ZXMgd2l0aGluIHRoZSBjb2RlYmFzZSBpdHNlbGYuIExldCdzIGV4YW1pbmUgYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhcm91bmQgbGluZSA2MTAuIE1heWJlIHNvbWV0aGluZyBpbiB0aGF0IHNwZWNpZmljIGFyZWEgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBjb21taXQncyBwdXJwb3NlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIGNvZGUgYXJvdW5kIHRoYXQgbGluZSB0byBzZWUgaWYgaXQgc2hlZHMgYW55IGxpZ2h0IG9uIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6NTIuMDEyODg1OTc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4NTpcXHRcXHRcXHRcXHRlcnIgPSBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhza2IsIGJyLCBnZXRsaW5rKTtcXG4gNTg2OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA1ODc6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4gNTg4OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA1ODk6XFx0XFx0XFx0fVxcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBjZm1fbmVzdCk7XFxuIDU5MjpcXHRcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdFxcdGlmICgoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfTVNUKSBcXHUwMDI2XFx1MDAyNlxcbiA1OTU6XFx0XFx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBwb3J0KSB7XFxuIDU5NjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHBvcnQpO1xcbiA1OTc6XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqbXN0X25lc3Q7XFxuIDU5ODpcXHRcXHRcXHRpbnQgZXJyO1xcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHRcXHRpZiAoIXZnIHx8ICF2Zy1cXHUwMDNlbnVtX3ZsYW5zKVxcbiA2MDE6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiA2MDI6XFx0XFxuIDYwMzpcXHRcXHRcXHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcXG4gNjA0OlxcdFxcdFxcdGlmICghbXN0X25lc3QpXFxuIDYwNTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0XFx0XFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcXG4gNjA4OlxcdFxcdFxcdGlmIChlcnIpXFxuIDYwOTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjEwOlxcdFxcbiA2MTE6XFx0XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xcbiA2MTI6XFx0XFx0fVxcbiA2MTM6XFx0XFxuIDYxNDpcXHRkb25lOlxcbiA2MTU6XFx0XFx0aWYgKGFmKSB7XFxuIDYxNjpcXHRcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcXHUwMDNlIFUxNl9NQVgpIHtcXG4gNjE3OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuIDYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlxcXCIpO1xcbiA2MTk6XFx0XFx0XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjIwOlxcdFxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDYyMTpcXHRcXHRcXHR9XFxuIDYyMjpcXHRcXHRcXHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXFxuIDYyMzpcXHRcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBhZik7XFxuIDYyNDpcXHRcXHRcXHRlbHNlXFxuIDYyNTpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBhZik7XFxuIDYyNjpcXHRcXHR9XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdG5sbXNnX2VuZChza2IsIG5saCk7XFxuIDYyOTpcXHRcXHRyZXR1cm4gMDtcXG4gNjMwOlxcdFxcbiA2MzE6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbiA2MzI6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjMzOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDYzNDpcXHR9XFxuIDYzNTpcXHRcXG4gNjM2OlxcdHZvaWQgYnJfaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIDYzNzpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTMyIGZpbHRlcilcXG4gNjM4OlxcdHtcXG4gNjM5OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDY0MDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2NDE6XFx0XFx0aW50IGVyciA9IC1FTk9CVUZTO1xcbiA2NDI6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbiA2NDM6XFx0XFx0dTE2IHBvcnRfbm8gPSAwO1xcbiA2NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjUyLjAxMzA1MTQzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDY3MjQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBicl9maWxsX2lmaW5mb2AgYW5kIGl0cyBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgZG93biB0aGlzIGBhZmAgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIGFzIGFuIGBubGF0dHJgLCBhbmQgaXQncyBpbml0aWFsaXplZCBzb21ld2hlcmUgZWFybGllciBpbiB0aGUgYGJyX2ZpbGxfaWZpbmZvYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGhlcmUgaXMgdG8gZ28gYmFjayBhbmQgcmUtcmVhZCB0aGUgcmVsZXZhbnQgcGFydCBvZiBgYnJfZmlsbF9pZmluZm9gIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBgYWZgIGlzIGVzdGFibGlzaGVkLCBiZWZvcmUgSSBjYW4gZmlndXJlIG91dCBpdHMgcHVycG9zZS4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo1NC4yNTk3Nzg0OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcdFxcdFxcdCAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuIDQ2MTpcXHRcXHRcXHRcXHQgIHUzMiBmaWx0ZXJfbWFzaywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNDYyOlxcdFxcdFxcdFxcdCAgYm9vbCBnZXRsaW5rLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDQ2MzpcXHR7XFxuIDQ2NDpcXHRcXHR1OCBvcGVyc3RhdGUgPSBuZXRpZl9ydW5uaW5nKGRldikgPyBSRUFEX09OQ0UoZGV2LVxcdTAwM2VvcGVyc3RhdGUpIDpcXG4gNDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBJRl9PUEVSX0RPV047XFxuIDQ2NjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphZiA9IE5VTEw7XFxuIDQ2NzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuIDQ2ODpcXHRcXHRzdHJ1Y3QgaWZpbmZvbXNnICpoZHI7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0aWYgKHBvcnQpXFxuIDQ3MjpcXHRcXHRcXHRiciA9IHBvcnQtXFx1MDAzZWJyO1xcbiA0NzM6XFx0XFx0ZWxzZVxcbiA0NzQ6XFx0XFx0XFx0YnIgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRicl9kZWJ1ZyhiciwgXFxcImJyX2ZpbGxfaWZpbmZvIGV2ZW50ICVkIHBvcnQgJXMgbWFzdGVyICVzXFxcXG5cXFwiLFxcbiA0Nzc6XFx0XFx0XFx0ICAgICBldmVudCwgZGV2LVxcdTAwM2VuYW1lLCBici1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lKTtcXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKmhkciksIGZsYWdzKTtcXG4gNDgwOlxcdFxcdGlmIChubGggPT0gTlVMTClcXG4gNDgxOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdGhkciA9IG5sbXNnX2RhdGEobmxoKTtcXG4gNDg0OlxcdFxcdGhkci1cXHUwMDNlaWZpX2ZhbWlseSA9IEFGX0JSSURHRTtcXG4gNDg1OlxcdFxcdGhkci1cXHUwMDNlX19pZmlfcGFkID0gMDtcXG4gNDg2OlxcdFxcdGhkci1cXHUwMDNlaWZpX3R5cGUgPSBkZXYtXFx1MDAzZXR5cGU7XFxuIDQ4NzpcXHRcXHRoZHItXFx1MDAzZWlmaV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gNDg4OlxcdFxcdGhkci1cXHUwMDNlaWZpX2ZsYWdzID0gbmV0aWZfZ2V0X2ZsYWdzKGRldik7XFxuIDQ4OTpcXHRcXHRoZHItXFx1MDAzZWlmaV9jaGFuZ2UgPSAwO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBJRkxBX0lGTkFNRSwgZGV2LVxcdTAwM2VuYW1lKSB8fFxcbiA0OTI6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9NQVNURVIsIGJyLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgpIHx8XFxuIDQ5MzpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX01UVSwgZGV2LVxcdTAwM2VtdHUpIHx8XFxuIDQ5NDpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfT1BFUlNUQVRFLCBvcGVyc3RhdGUpIHx8XFxuIDQ5NTpcXHRcXHQgICAgKGRldi1cXHUwMDNlYWRkcl9sZW4gXFx1MDAyNlxcdTAwMjZcXG4gNDk2OlxcdFxcdCAgICAgbmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LVxcdTAwM2VhZGRyX2xlbiwgZGV2LVxcdTAwM2VkZXZfYWRkcikpIHx8XFxuIDQ5NzpcXHRcXHQgICAgKGRldi1cXHUwMDNlaWZpbmRleCAhPSBkZXZfZ2V0X2lmbGluayhkZXYpIFxcdTAwMjZcXHUwMDI2XFxuIDQ5ODpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9MSU5LLCBkZXZfZ2V0X2lmbGluayhkZXYpKSkpXFxuIDQ5OTpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0aWYgKGV2ZW50ID09IFJUTV9ORVdMSU5LIFxcdTAwMjZcXHUwMDI2IHBvcnQpIHtcXG4gNTAyOlxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuIDUwMzpcXHRcXG4gNTA0OlxcdFxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIElGTEFfUFJPVElORk8pO1xcbiA1MDU6XFx0XFx0XFx0aWYgKG5lc3QgPT0gTlVMTCB8fCBicl9wb3J0X2ZpbGxfYXR0cnMoc2tiLCBwb3J0KSBcXHUwMDNjIDApXFxuIDUwNjpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNTA3OlxcdFxcdFxcdG5sYV9uZXN0X2VuZChza2IsIG5lc3QpO1xcbiA1MDg6XFx0XFx0fVxcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHRpZiAoZmlsdGVyX21hc2sgXFx1MDAyNiAoUlRFWFRfRklMVEVSX0JSVkxBTiB8XFxuIDUxMTpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgfFxcbiA1MTI6XFx0XFx0XFx0XFx0ICAgUlRFWFRfRklMVEVSX01SUCB8XFxuIDUxMzpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfQ0ZNX0NPTkZJRyB8XFxuIDUxNDpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfQ0ZNX1NUQVRVUyB8XFxuIDUxNTpcXHRcXHRcXHRcXHQgICBSVEVYVF9GSUxURVJfTVNUKSkge1xcbiA1MTY6XFx0XFx0XFx0YWYgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0FGX1NQRUMpO1xcbiA1MTc6XFx0XFx0XFx0aWYgKCFhZilcXG4gNTE4OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiA1MTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTo1NC4yNjAwMzcwOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3Njk1OTYwNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgYWZgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgY3JlYXRlZCB1c2luZyBgbmxhX25lc3Rfc3RhcnRfbm9mbGFnYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGFmLVx1MDAzZW5sYV9sZW5gIGlzIGEgYHUxNmAsIHdoaWNoIG1lYW5zIGl0J3MgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlci4gIFRoaXMgaXMgYSBjcml0aWNhbCBvYnNlcnZhdGlvbi5cblxuVGhlIGNvZGUgaXMgY2hlY2tpbmcgZm9yIGEgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGNhbGN1bGF0ZXMgaWYgdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgYGFmYCBleGNlZWRzIHRoZSBtYXhpbXVtIHZhbHVlIGEgYHUxNmAgY2FuIGhvbGQgKGBVMTZfTUFYYCkuIEl0J3MgdXNpbmcgYHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWZgLiBJZiB0aGlzIGRpZmZlcmVuY2UgKmlzKiBncmVhdGVyIHRoYW4gYFUxNl9NQVhgLCB0aGVuIHRoZSBgbmxhX2xlbmAgZmllbGQgd2l0aGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIHdpbGwgd3JhcCBhcm91bmQgd2hlbiBgbmxhX25lc3RfZW5kKHNrYiwgYWYpYCBpcyBjYWxsZWQuIFRoaXMgaXMgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgc2l0dWF0aW9uLlxuXG5UaGUgY29kZSBzbmlwcGV0IGFkZHJlc3NlcyB0aGlzIG92ZXJmbG93LiBJZiBpdCBkZXRlY3RzIHRoZSBvdmVyZmxvdywgaXQgc2V0cyBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIGBOTF9TRVRfRVJSX01TR19NT0RgIGFuZCByZXR1cm5zIGFuIGVycm9yIChgLUUyQklHYCksIGNhbmNlbGxpbmcgdGhlIG1lc3NhZ2Ugd2l0aCBgbmxtc2dfY2FuY2VsYC4gIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUgaGFzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgLiBJIHNlZSB0aGF0IHRoZSBmaXggaW52b2x2ZWQgdXBkYXRpbmcgZHJpdmVycyB3aGljaCBpbXBsZW1lbnQgYG5kb19icmlkZ2VfZ2V0bGlua2AsIGxpa2UgYGJueHRgLCBgYmVuZXRgLCBgaTQwZWAsIGBpY2VgLCBgaXhnYmVgLCBgbWx4NWAsIGBuZnBgLCBgcWV0aGAsIGFuZCBgYnJfbmV0bGlua2AgKGBicl9nZXRsaW5rYCkuIEFsc28gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCBhbmQgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIGFyZSBwYXRjaGVkIGFzIHdlbGwuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gQWJzb2x1dGVseS4gYG5ldC9icmlkZ2VgIGlzIGEgY29yZSBuZXR3b3JraW5nIG1vZHVsZSBlbmFibGVkIGJ5IGBDT05GSUdfQlJJREdFYC4gYGJyX2dldGxpbmtgIGlzIHBhcnQgb2YgaXQgYWxvbmcgd2l0aCBgYnJfZmlsbF9pZmluZm9gLCBgcnRubF9icmlkZ2VfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9ub3RpZnlgLCBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGFuZCBgcnRubF9icmlkZ2VfZGVsbGlua2AuIFRoaXMgbWVhbnMgYnJpZGdlIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQsIG1hbmlwdWxhdGVkLCBhbmQgcXVlcmllZCB2aWEgcnRuZXRsaW5rLCBldmVuIGJ5IG5vbi1wcml2aWxlZ2VkIHVzZXJzIGluIG5ldHdvcmsgbmFtZXNwYWNlcyAob3IgcHJpdmlsZWdlZCB1c2VycyB3aXRoIG5ldHdvcmsgYWRtaW5pc3RyYXRpb24gcmlnaHRzKS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBjb250YWluZXJpemVkIGVudmlyb25tZW50cy5cblxuU3l6a2FsbGVyLCBpbiBwYXJ0aWN1bGFyLCBmcmVxdWVudGx5IGNyZWF0ZXMgYnJpZGdlIGRldmljZXMsIGNvbmZpZ3VyZXMgVkxBTnMgb24gYnJpZGdlIHBvcnRzLCBhbmQgcXVlcmllcyBicmlkZ2UgaW5mb3JtYXRpb24gdXNpbmcgYFJUTV9HRVRMSU5LYCwgYFJUTV9TRVRMSU5LYCwgYW5kIGBSVE1fREVMTElOS2AgcmVxdWVzdHMuIFRoYXQgbWFrZXMgdGhpcyBhIHZlcnkgcGxhdXNpYmxlIHRhcmdldCBmb3IgZXhwbG9pdGF0aW9uISAgSSBuZWVkIHRvIGdvIGRlZXBlciBub3cgYW5kIHNlZSBob3cgYGJyX2dldGxpbmtgIGlzIGFjdHVhbGx5IHVzZWQuIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIGNhbGxzIHRvIGBuZG9fYnJpZGdlX2dldGxpbmtgIG9yIHRvIGBicl9nZXRsaW5rYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowMS45NTYwMDA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3NzUyMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX2dldGxpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9kZXZpY2UuYz00Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NjgtXFx0Lm5kb19tZGJfZ2V0XFx0XFx0ID0gYnJfbWRiX2dldCxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ2OTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0ID0gYnJfZ2V0bGluayxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ3MC1cXHQubmRvX2JyaWRnZV9zZXRsaW5rXFx0ID0gYnJfc2V0bGluayxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTY3OD12b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02ODgtICovXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6Njg5OmludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjkwLVxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjE4MD1pbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIxODE6aW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTgyLVxcdCAgICAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowMy42MzM3NjIyNTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI5NDk5NzY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgTmV0bGluayBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIGJyaWRnZSBuZXRsaW5rIG9wZXJhdGlvbnMgd29yaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgUlRNX0dFVExJTktgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSdtIHNlZWluZyB0aGF0IHRoZSBgYnJfbmV0ZGV2X29wc2Agc3RydWN0IGhhcyBgLm5kb19icmlkZ2VfZ2V0bGlua2AgZGVmaW5lZCBhcyBgYnJfZ2V0bGlua2AuIFRoaXMgaXMga2V5IGJlY2F1c2Ugd2hlbiBhIHVzZXIgc2VuZHMgYW4gYFJUTV9HRVRMSU5LYCBtZXNzYWdlIHdpdGggYEFGX0JSSURHRWAgdmlhIGEgbmV0bGluayBzb2NrZXQg4oCTIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgdHJpZ2dlcnMgdGhlIGR1bXAgcmVxdWVzdCBgcnRubF9icmlkZ2VfZ2V0bGlua2AgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCDigJMgdGhlIHN5c3RlbSB1bHRpbWF0ZWx5IGNhbGxzIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoLi4uLCBjYi1cdTAwM2VleHRhY2spYC5cblxuSSdtIGFsc28gbm90aW5nIHRoYXQgYm90aCBgcnRubF9icmlkZ2Vfc2V0bGlua2AgYW5kIGBydG5sX2JyaWRnZV9kZWxsaW5rYCBjYWxsIGBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rYCBhZ2FpbiwgYnV0IHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIGFyZ3VtZW50cyAoaW5jbHVkaW5nIGBza2JgKS5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCBpcyBpbiBgYnJfZmlsbF9pZmluZm9gLiBUaGV5J3ZlIGludHJvZHVjZWQgYSBuZXcgY2hlY2sgaGVyZSB0aGF0J3MgY2F0Y2hpbmcgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0aGV5IGFyZSBjaGVja2luZyBpZiB0aGUgVkxBTiBpbmZvcm1hdGlvbiB3aWxsIGZpdCB3aXRoaW4gYSBzaW5nbGUgbmV0bGluayBtZXNzYWdlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGxvb2tzIGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBwb2ludGVyIG9mIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSBzdGFydCBvZiB0aGUgYWRkcmVzcyBmYW1pbHkgaW5mb3JtYXRpb24uIElmIHRoaXMgZGlmZmVyZW5jZSBleGNlZWRzIGBVMTZfTUFYYCwgbWVhbmluZyBpdCdzIHRvbyBsYXJnZSB0byBmaXQsIHRoZW4gaXQgc2V0cyBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIGBOTF9TRVRfRVJSX01TR19NT0RgIG9uIHRoZSBgZXh0YWNrYCAoZXh0ZW5kZWQgYWNrKSBidWZmZXIuIFRoZSBtZXNzYWdlIGNsZWFybHkgc3RhdGVzLCBcIlZMQU4gaW5mb3JtYXRpb24gZG9lcyBub3QgZml0IGluIG9uZSBtZXNzYWdlLCB1c2UgUlRNX0dFVFZMQU4uXCIgVGhlIGNvZGUgdGhlbiBjYW5jZWxzIHRoZSBtZXNzYWdlIGFuZCByZXR1cm5zIGAtRTJCSUdgLCB3aGljaCBpcyB0aGUgXCJtZXNzYWdlIHRvbyBsb25nXCIgZXJyb3IgY29kZS5cblxuTm93IEknbSBjdXJpb3VzIGFzIHRvIGhvdyB0aGUgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdCBgLUUyQklHYCBlcnJvciwgc2luY2UgaXQncyB0aGUgb25lIHRoYXQncyBnZXR0aW5nIGNhbGxlZCBpbiBhbGwgdGhlc2Ugc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiB0aGF0IGVycm9yIGJ1YmJsZXMgdXAuIEknbSBnb2luZyB0byBsb29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgYXJvdW5kIGxpbmUgNTU3NS4gTGV0J3Mgc2VlIGhvdyB0aGUgZXJyb3IgaXMgcHJvY2Vzc2VkIGFuZCBpZiBpdCBpcyBwcm9wZXJseSBoYW5kbGVkIHRvIHJldHVybiB0aGUgY29ycmVjdCBlcnJvciBiYWNrIHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowNy45Mjg3NjQwNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1NjUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU1NjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNiLVxcdTAwM2VleHRhY2spO1xcbjU1NjY6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgY2ItXFx1MDAzZXN0cmljdF9jaGVjaylcXG41NTY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNTU2ODpcXHRcXG41NTY5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG41NTcwOlxcdFxcdGZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpIHtcXG41NTcxOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbjU1NzI6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpO1xcbjU1NzM6XFx0XFxuNTU3NDpcXHRcXHRcXHRpZiAoYnJfZGV2IFxcdTAwMjZcXHUwMDI2IGJyX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XFxuNTU3NTpcXHRcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxuNTU3NjpcXHRcXHRcXHRcXHRcXHRlcnIgPSBicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcXG41NTc3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYiwgcG9ydGlkLCBzZXEsIGRldixcXG41NTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tYXNrLCBOTE1fRl9NVUxUSSxcXG41NTc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNiLVxcdTAwM2VleHRhY2spO1xcbjU1ODA6XFx0XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKSB7XFxuNTU4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG41NTgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjU1ODM6XFx0XFxuNTU4NDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNTU4NTpcXHRcXHRcXHRcXHRcXHR9XFxuNTU4NjpcXHRcXHRcXHRcXHR9XFxuNTU4NzpcXHRcXHRcXHRcXHRpZHgrKztcXG41NTg4OlxcdFxcdFxcdH1cXG41NTg5OlxcdFxcbjU1OTA6XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XFxuNTU5MTpcXHRcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxuNTU5MjpcXHRcXHRcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhza2IsIHBvcnRpZCxcXG41NTkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNlcSwgZGV2LFxcbjU1OTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmlsdGVyX21hc2ssXFxuNTU5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBOTE1fRl9NVUxUSSxcXG41NTk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNiLVxcdTAwM2VleHRhY2spO1xcbjU1OTc6XFx0XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKSB7XFxuNTU5ODpcXHRcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG41NTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjU2MDA6XFx0XFxuNTYwMTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNTYwMjpcXHRcXHRcXHRcXHRcXHR9XFxuNTYwMzpcXHRcXHRcXHRcXHR9XFxuNTYwNDpcXHRcXHRcXHRcXHRpZHgrKztcXG41NjA1OlxcdFxcdFxcdH1cXG41NjA2OlxcdFxcdH1cXG41NjA3OlxcdFxcdGVyciA9IHNrYi1cXHUwMDNlbGVuO1xcbjU2MDg6XFx0b3V0X2VycjpcXG41NjA5OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowNy45MjkwMjA5MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA0MzIzMzI0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEJyaWRnZSBWTEFOIEluZm8gT3ZlcmZsb3cqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFydHMgd2l0aCBub3RpY2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGFuZCBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZXMuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgYHJ0bmxfYnJpZGdlX25vdGlmeWAgZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGhpbiBgcnRubF9icmlkZ2Vfc2V0bGlua2AgdG8gaGFuZGxlIGJyaWRnZSBjaGFuZ2VzLCBhbmQgYHJ0bmxfYnJpZGdlX2dldGxpbmtgIG1pZ2h0IGJlIHN1c2NlcHRpYmxlIHRvIGFuIG92ZXJmbG93LiBJZiBhIGJyaWRnZSBwb3J0IGhhcyBhbiBleHRyZW1lbHkgbGFyZ2UgbnVtYmVyIG9mIFZMQU5zIChzYXksIDQwOTQpLCBhbmQgaWYgd2UncmUgZHVtcGluZyB0aGUgYnJpZGdlIGxpbmsgaW5mb3JtYXRpb24gd2l0aCBWTEFOIGZpbHRlcmluZyBlbmFibGVkLCB0aGUgZGF0YSBwYWNrZWQgaW50byB0aGUgYElGTEFfQUZfU1BFQ2AgYXR0cmlidXRlIGNvdWxkIGV4Y2VlZCB0aGUgNjRLQiBsaW1pdCAoYFUxNl9NQVhgKS4gSSBvYnNlcnZlZCB0aGF0IHRoZSBgYWYtXHUwMDNlbmxhX2xlbmAgZmllbGQsIHdoaWNoIHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uLCB3YXMgdXNpbmcgYSAxNi1iaXQgZmllbGQgYW5kIHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93LiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopYWYgXHUwMDNlIFUxNl9NQVgpYCwgdHJpZ2dlcmluZyBhbiBgLUUyQklHYCBlcnJvciBhbmQgc2V0dGluZyBgZXh0YWNrYCB3aGVuIHRoZSBwYWNrZXQgc2l6ZSBsaW1pdHMuXG5cblRoaXMgaXMgYSBnb29kIHBvaW50IHRvIHN0YXJ0OiBJIHRoaW5rIHRoYXQgbWVhbnMgdGhlIGNvZGUncyBub3cgaGFuZGxpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIFZMQU4gZHVtcGluZyBwcm9jZXNzLiBHb29kIGNhdGNoLlxuXG5JIHNlZSB0aGF0IGBydG5sX2JyaWRnZV9ub3RpZnlgIGNhbGxzIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmtgLiBUaGF0J3MgaW1wb3J0YW50LiBJZiB0aGF0IHJldHVybnMgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiBoYW5kbGVzIGl0LiBUaGlzIGluZGljYXRlcyBhIHdlbGwtZGVmaW5lZCBlcnJvciBwYXRoLCBjcnVjaWFsIGZvciBmdXp6aW5nIVxuXG5UaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgc3RhcnQgdG8gdGhpbmsgdGhhdCBtYXliZSBgbmRvX2JyaWRnZV9nZXRsaW5rYCBpcyBjYWxsZWQgZnJvbSBgcnRubF9icmlkZ2Vfbm90aWZ5YCwgc28gaXRzIHJldHVybiBjb2RlIG1hdHRlcnMuIFRoaXMgaXMgYWxsIGNvbm5lY3RlZCB0byBuZXRsaW5rIG1lc3NhZ2luZyB3aGljaCBpcyBhIGdyZWF0IHRhcmdldC5cblxuSSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBpcyBpbmRlZWQgd29ydGggZnV6emluZy4gSSBjb25maXJtZWQgdGhhdCBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIHByZXNlbnQgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgYnJpZGdlIHN1YnN5c3RlbSAoYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCwgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMpIGluY2x1ZGluZyB0aGUgY3JpdGljYWwgYWRkaXRpb24gb2YgdGhlIGRlZmVuc2l2ZSBjaGVjayBhbmQgZXJyb3IgaGFuZGxpbmcgKHJldHVybmluZyAtRTJCSUcgYW5kIGNhbmNlbGluZyB0aGUgTkwgbWVzc2FnZSkgdmlhIGBleHRhY2tgLiBUaGlzIGFsbCBoYXMgYSBnb29kIGF0dGFjayBzdXJmYWNlLiBJbXBvcnRhbnRseSwgSSBjYW4gYWNjZXNzIHRoaXMgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHN0YW5kYXJkIG5ldGxpbmsgc29ja2V0cywgc28gSSBjYW4gdGVzdCB0aGlzIGVhc2lseSBpbiBRRU1VIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIGhhcmR3YXJlLlxuXG5UbyBkZXRlcm1pbmUgKndoaWNoKiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcsIEkgbmVlZCBhIGxpc3Qgb2YgdGhlICprZXkqIGVudHJ5IHBvaW50cyBhbmQgbW9kaWZpZWQgbG9naWMuIEkgZm9jdXNlZCBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGluIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AsIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIGZ1bmN0aW9ucyBgYnJfZmlsbF9pZmluZm9gLCBgYnJfZ2V0bGlua2AsIGBicl9pbmZvX25vdGlmeWAsIGBicl9pZmluZm9fbm90aWZ5YCwgYHJ0bmxfYnJpZGdlX2dldGxpbmtgLCBgcnRubF9icmlkZ2Vfbm90aWZ5YCwgYHJ0bmxfYnJpZGdlX3NldGxpbmtgLCBgcnRubF9icmlkZ2VfZGVsbGlua2AsIGFuZCBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmtgIGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSBpbnZvbHZlZC4gSSBjb25zaWRlcmVkIGlmIHN0YXRpYyBmdW5jdGlvbnMgYXJlIE9LLiBZZXMhIFN0YXRpYyBmdW5jdGlvbnMsIGFzIGxvbmcgYXMgdGhleSBhcmVuJ3QgaW5saW5lZCwgYXJlIGdvb2QuXG5cbkNydWNpYWxseSwgdGhvc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB1YmlxdWl0b3VzIFwiaG90IHBhdGhzXCIsIHdoaWNoIHdvdWxkIGJlIHVzZWxlc3MsIHNvIEkga25vdyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUhIFRoZSBuZXRsaW5rIGZ1bmN0aW9uYWxpdHkgbWFrZXMgdGhlbSB2ZXJ5IHNwZWNpZmljIHRvIHRoZXNlIGJyaWRnZSBWTEFOIG9wZXJhdGlvbnMsIHBlcmZlY3QuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBrbm93IHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgdGhlIGNvZGUgYW5kIG1ha2UgaXQgcmVhY2hhYmxlLiBgQ09ORklHX0JSSURHRWAgaXMgYSBtdXN0LCBhbmQgSSBzaG91bGQgYWxzbyBjaGVjayBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzAwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjE4LjM2MTM1NTgzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzQwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbmV0bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9OD1icmlkZ2UteVxcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxcXFxubmV0L2JyaWRnZS9NYWtlZmlsZS05LVxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxubmV0L2JyaWRnZS9NYWtlZmlsZToxMDpcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTE6XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMTItXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDI1PXN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00NjAtXFxubmV0L2JyaWRnZS9ici5jOjQ2MTpcXHRlcnIgPSBicl9uZXRsaW5rX2luaXQoKTtcXG5uZXQvYnJpZGdlL2JyLmMtNDYyLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDkyPXN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00OTQtXFx0c3RwX3Byb3RvX3VucmVnaXN0ZXIoXFx1MDAyNmJyX3N0cF9wcm90byk7XFxubmV0L2JyaWRnZS9ici5jOjQ5NTpcXHRicl9uZXRsaW5rX2ZpbmkoKTtcXG5uZXQvYnJpZGdlL2JyLmMtNDk2LVxcdHVucmVnaXN0ZXJfc3dpdGNoZGV2X2Jsb2NraW5nX25vdGlmaWVyKFxcdTAwMjZicl9zd2l0Y2hkZXZfYmxvY2tpbmdfbm90aWZpZXIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTk1Nj1zdHJ1Y3QgcnRubF9saW5rX29wcyBicl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk3Ny1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxOTc4OmludCBfX2luaXQgYnJfbmV0bGlua19pbml0KHZvaWQpXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk3OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0yMDAzLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjIwMDQ6dm9pZCBicl9uZXRsaW5rX2Zpbmkodm9pZClcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0yMDA1LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxNjM9c3RhdGljIGlubGluZSBpbnQgYnJfY2ZtX3BlZXJfbWVwX2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTMyICpjb3VudClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxNjktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3MDovKiBicl9uZXRsaW5rLmMgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTcxLWV4dGVybiBzdHJ1Y3QgcnRubF9saW5rX29wcyBicl9saW5rX29wcztcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTcyOmludCBicl9uZXRsaW5rX2luaXQodm9pZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjE3Mzp2b2lkIGJyX25ldGxpbmtfZmluaSh2b2lkKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTc0LXZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD0xMj1zdHJ1Y3QgdnR1bm5lbF9pbmZvIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC0xNy1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6MTg6LyogYnJfbmV0bGlua190dW5uZWwuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC0xOS1pbnQgYnJfcGFyc2Vfdmxhbl90dW5uZWxfaW5mbyhzdHJ1Y3QgbmxhdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoxOC40MTAxOTQ1NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4NTUxNzAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYnJpZGdpbmcsIHNwZWNpZmljYWxseSB0aGUgVkxBTiBmaWx0ZXJpbmcgYXNwZWN0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSB0byBmaW5kIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJyaWRnZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyB0aGUgcHJlc2VuY2UgYW5kIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCAtIGEgYmFzaWMgY2hlY2sgdG8gZW5zdXJlIGJyaWRnaW5nIGl0c2VsZiBpcyBlbmFibGVkLiBBZnRlciB0aGF0LCBJJ2xsIHNjYW4gdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgbG9va2luZyBmb3IgYW55IGFzc29jaWF0ZWQgb3B0aW9ucyByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nIHdpdGhpbiB0aGUgYnJpZGdlIGNvbnRleHQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbnRyb2xsZWQgYXQgY29tcGlsZS10aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjIxLjA5NTcxNDk2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcbiAgMTY6XFx0XFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxcbiAgMTc6XFx0XFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSdsbCBuZWVkIHRoZSBicmlkZ2VcXG4gIDIwOlxcdFxcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFx1MDAzZVxcbiAgMjE6XFx0XFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxcbiAgMjI6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcXG4gIDI1OlxcdFxcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXFxuICAyNjpcXHRcXHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cXG4gIDI3OlxcdFxcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cXG4gIDI4OlxcdFxcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXFxuICAyOTpcXHRcXHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzMjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJyaWRnZS5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG4gIDM3OlxcdFxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA0MzpcXHRcXHQgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUC9NTEQgdHJhZmZpYyByZWNlaXZlZCBmcm9tXFxuICA0NDpcXHRcXHQgIGVhY2ggcG9ydC5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxuICA1MTpcXHRcXHRib29sIFxcXCJWTEFOIGZpbHRlcmluZ1xcXCJcXG4gIDUyOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG4gIDU0OlxcdFxcdGRlZmF1bHQgblxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNTc6XFx0XFx0ICByZWNlaXZlIGFuZCBmb3J3YXJkIHRyYWZmaWMgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFja2V0XFxuICA1ODpcXHRcXHQgIGFueSBWTEFOIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIGJyaWRnZSBwb3J0IG9yIGJyaWRnZSBkZXZpY2UuXFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0Y29uZmlnIEJSSURHRV9NUlBcXG4gIDY1OlxcdFxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4gIDY2OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA2NzpcXHRcXHRkZWZhdWx0IG5cXG4gIDY4OlxcdFxcdGhlbHBcXG4gIDY5OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIE1SUFxcbiAgNzA6XFx0XFx0ICBwcm90b2NvbCB0byBkZXRlY3QgbG9vcHNcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgQlJJREdFX0NGTVxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDc5OlxcdFxcdGhlbHBcXG4gIDgwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIENGTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyMS4wOTU4MDMzODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxODg1NjgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVkxBTiBGaWx0ZXJpbmcgaW4gQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgVkxBTiBwb3B1bGF0aW9uIGxvZ2ljIGluIGBicl9maWxsX2lmaW5mb2AgaXMgY29udGluZ2VudCBvbiB0aGlzIGNvbmZpZyBvcHRpb24uIEl0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGRlcGVuZGVuY3ksIGJ1dCBhc3N1bXB0aW9ucyBhcmUgdGhlIGJhbmUgb2YgbXkgZXhpc3RlbmNlLlxuXG5UaGUgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ2xsIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJyX2ZpbGxfaWZpbmZvYCBpdHNlbGYuIEknbSBnb2luZyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRob3NlIFZMQU4gZmllbGRzIGFyZSBwb3B1bGF0ZWQuIFRoZW4sIEkgY2FuIGNvcnJlbGF0ZSB0aGF0IHNlY3Rpb24gd2l0aCBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCAob3IgYSBzaW1pbGFyIG1hY3JvKS4gVGhhdCB3aWxsIHRlbGwgbWUgZGVmaW5pdGl2ZWx5IHdoZXRoZXIgaXQncyBvcHRpb25hbCBvciBtYW5kYXRvcnkgdG8gaGF2ZSB0aGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgYW5kIHdoYXQgdGhlIGNvbnNlcXVlbmNlcyBhcmUgaWYgdGhhdCBmZWF0dXJlIGlzIGRpc2FibGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgYnJpZGdlIGhhbmRsZXMgdGhlc2Ugc2l0dWF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjIzLjYxNDY2MjY0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDM3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRFWFRfRklMVEVSX0JSVkxBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTIzPXN0YXRpYyBpbnQgX19nZXRfbnVtX3ZsYW5faW5mb3Moc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0zMC1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzozMTpcXHRpZiAoIShmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkpXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMzItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz03NT1zdGF0aWMgaW50IGJyX2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTgyLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjgzOlxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU4pXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODQtXFx0XFx0cmV0dXJuIFJFQURfT05DRSh2Zy1cXHUwMDNlbnVtX3ZsYW5zKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MDktXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTEwOlxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IChSVEVYVF9GSUxURVJfQlJWTEFOIHxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1MTE6XFx0XFx0XFx0ICAgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEIHxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MTItXFx0XFx0XFx0ICAgUlRFWFRfRklMVEVSX01SUCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MjEtXFx0LyogQ2hlY2sgaWYgIHRoZSBWSUQgaW5mb3JtYXRpb24gaXMgcmVxdWVzdGVkICovXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTIyOlxcdGlmICgoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjUyMzpcXHQgICAgKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEKSkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyNC1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUzNy1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTM4OlxcdFxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRClcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01MzktXFx0XFx0XFx0ZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvX2NvbXByZXNzZWQoc2tiLCB2Zyk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz02Nzg9dm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjgwLXtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo2ODE6XFx0dTMyIGZpbHRlciA9IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRDtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02ODItXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz02ODk9aW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTY5NC1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo2OTU6XFx0aWYgKCFwb3J0IFxcdTAwMjZcXHUwMDI2ICEoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjY5NjpcXHQgICAgIShmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02OTctXFx0ICAgICEoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfTVJQKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyMy42NjEzNzEzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjk1MTYwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicl9maWxsX2lmdmxhbmluZm9gIGFuZCBWTEFOIEluZm9ybWF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgYnJfZmlsbF9pZnZsYW5pbmZvYCBmdW5jdGlvbiB3b3JrcyBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBgdmdgIHZhcmlhYmxlIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiBpdC4gVGhpcyBzdWdnZXN0cyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBWTEFOIGluZm9ybWF0aW9uIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBzZWdtZW50YXRpb24gYW5kIHRyYWZmaWMgbWFuYWdlbWVudC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBvcHVsYXRlcyBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBWTEFOIGNvbmZpZ3VyYXRpb24gYW5kIG1hcHBpbmcuIEkgc3VzcGVjdCBgdmdgIGlzIGVpdGhlciBhIHBvaW50ZXIgdG8gb3IgYSBzdHJ1Y3R1cmUgaG9sZGluZyBWTEFOIGdyb3VwLXJlbGF0ZWQgZGF0YS5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvYnJpZGdlL2JyX25ldGxpbmsuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDUyMCB0aHJvdWdoIDU1MC4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBCeSBleGFtaW5pbmcgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUsIEkgYW50aWNpcGF0ZSB0aGF0IEknbGwgZmluZCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gVkxBTiBjb25maWd1cmF0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGl0c2VsZiwgd2hpY2ggd2lsbCBob3BlZnVsbHkgb2ZmZXIgc29tZSBhbnN3ZXJzLiBJJ20gaG9waW5nIHRoaXMgc2VjdGlvbiBoYW5kbGVzIHRoZSBuZXRsaW5rIGludGVyYWN0aW9ucyBpbiB0aGUgVkxBTiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjI2LjM1NjUzNTc4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcbiA1MjE6XFx0XFx0LyogQ2hlY2sgaWYgIHRoZSBWSUQgaW5mb3JtYXRpb24gaXMgcmVxdWVzdGVkICovXFxuIDUyMjpcXHRcXHRpZiAoKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX0JSVkxBTikgfHxcXG4gNTIzOlxcdFxcdCAgICAoZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpKSB7XFxuIDUyNDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gNTI1OlxcdFxcdFxcdGludCBlcnI7XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdFxcdC8qIFJDVSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgVkxBTiBsb2NraW5nIHJ1bGVzIChyY3UgfHwgcnRubCkgKi9cXG4gNTI4OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNTI5OlxcdFxcdFxcdGlmIChwb3J0KVxcbiA1MzA6XFx0XFx0XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocG9ydCk7XFxuIDUzMTpcXHRcXHRcXHRlbHNlXFxuIDUzMjpcXHRcXHRcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0XFx0aWYgKCF2ZyB8fCAhUkVBRF9PTkNFKHZnLVxcdTAwM2VudW1fdmxhbnMpKSB7XFxuIDUzNTpcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTM2OlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNTM3OlxcdFxcdFxcdH1cXG4gNTM4OlxcdFxcdFxcdGlmIChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRClcXG4gNTM5OlxcdFxcdFxcdFxcdGVyciA9IGJyX2ZpbGxfaWZ2bGFuaW5mb19jb21wcmVzc2VkKHNrYiwgdmcpO1xcbiA1NDA6XFx0XFx0XFx0ZWxzZVxcbiA1NDE6XFx0XFx0XFx0XFx0ZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvKHNrYiwgdmcpO1xcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRcXHRpZiAocG9ydCBcXHUwMDI2XFx1MDAyNiB0ZXN0X2JpdChCUl9WTEFOX1RVTk5FTF9CSVQsIFxcdTAwMjZwb3J0LVxcdTAwM2VmbGFncykpXFxuIDU0NDpcXHRcXHRcXHRcXHRlcnIgPSBicl9maWxsX3ZsYW5fdHVubmVsX2luZm8oc2tiLCB2Zyk7XFxuIDU0NTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTQ2OlxcdFxcdFxcdGlmIChlcnIpXFxuIDU0NzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNTQ4OlxcdFxcdH1cXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0aWYgKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX01SUCkge1xcbiA1NTE6XFx0XFx0XFx0aW50IGVycjtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0XFx0aWYgKCFicl9tcnBfZW5hYmxlZChicikgfHwgcG9ydClcXG4gNTU0OlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MjYuMzU2NzE5NzM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTc1MzU0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBWTEFOIEdyb3VwIFJDVSBGdW5jdGlvbnMgd2l0aCBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcgRGlzYWJsZWQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgYG5icF92bGFuX2dyb3VwX3JjdWAgYW5kIGBicl92bGFuX2dyb3VwX3JjdWAgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgb2ZmLiBTcGVjaWZpY2FsbHksIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Q/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLCBidXQgYSBxdWljayBncmVwIGlzIHByb2JhYmx5IHRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzIGV5ZSB2aWV3IG9mIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiAqY2FsbGVkKiB3aGVuIHRoZSBmaWx0ZXJpbmcgaXMgZGlzYWJsZWQuIFNvLCBsZXQncyBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgbmJwX3ZsYW5fZ3JvdXBfcmN1YC4gVGltZSB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIFwibm8gZmlsdGVyaW5nXCIgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyOC41NzQyNTgwNTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDg2NTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYnBfdmxhbl9ncm91cF9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTQzPXN0YXRpYyB2b2lkIGJyX2FycF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNjgtXFx0aWYgKHApXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo2OTpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTcwLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MjU0PXN0YXRpYyB2b2lkIGJyX25kX3NlbmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0zNjEtXFx0aWYgKHApXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzozNjI6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0zNjMtXFx0ZWxzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz01MTI9Ym9vbCBicl9pc19uZWlnaF9zdXBwcmVzc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiB2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTUxNy1cXHRpZiAodmlkIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KEJSX05FSUdIX1ZMQU5fU1VQUFJFU1NfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpKSB7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo1MTg6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MTktXFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NTMwPWJvb2wgYnJfaXNfbmVpZ2hfZm9yd2FyZF9ncmF0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTMyLVxcdGlmICh2aWQgXFx1MDAyNlxcdTAwMjYgdGVzdF9iaXQoQlJfTkVJR0hfVkxBTl9TVVBQUkVTU19CSVQsIFxcdTAwMjZwLVxcdTAwM2VmbGFncykpIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjUzMzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTUzNC1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9MjE9c3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI1LVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjI2OlxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI3LVxcdHJldHVybiAodGVzdF9iaXQoQlJfSEFJUlBJTl9NT0RFX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSB8fCBza2ItXFx1MDAzZWRldiAhPSBwLVxcdTAwM2VkZXYpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz03Mz1zdGF0aWMgdm9pZCBfX2JyX2ZvcndhcmQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04NS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4NjpcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdSh0byk7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODctXFx0c2tiID0gYnJfaGFuZGxlX3ZsYW4odG8tXFx1MDAzZWJyLCB0bywgdmcsIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NzY9aW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTA5LVxcdHBtY3R4ID0gXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHg7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjExMDpcXHRpZiAoIWJyX2FsbG93ZWRfaW5ncmVzcyhwLVxcdTAwM2ViciwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApLCBza2IsIFxcdTAwMjZ2aWQsXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTExMS1cXHRcXHRcXHRcXHRcXHUwMDI2c3RhdGUsIFxcdTAwMjZ2bGFuKSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zNDc9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzAtXFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzcxOlxcdFxcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzcyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz05NT1pbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTExMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2JyaWRnZS9icl9tc3QuYzoxMTE6XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0xMTItXFx0aWYgKCF2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEwPWJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjI4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyOTpcXHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwZy1cXHUwMDNla2V5LnBvcnQpLCBwZy1cXHUwMDNla2V5LmFkZHIudmlkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMC1cXHRpZiAodmxhbiBcXHUwMDI2XFx1MDAyNiAhYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjQwPWJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNDktXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyNTA6XFx0dmxhbiA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cF9yY3UocG9ydCksIHZpZCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNTEtXFx0aWYgKHZsYW4pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMzM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyNDAtXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjI0MTpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwb3J0KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyNDItXFx0XFx0aWYgKCF2Zykge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Njc0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zdGFydF9xdWVyaWVyKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2OTYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njk3OlxcdFxcdFxcdHZsYW4gPSBicl92bGFuX2ZpbmQobmJwX3ZsYW5fZ3JvdXBfcmN1KHBvcnQpLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cXHRcXHRcXHRcXHRcXHQgICAgYnJtY3R4LVxcdTAwM2V2bGFuLVxcdTAwM2V2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9OTM9c3RhdGljIHNpemVfdCBicl9nZXRfbGlua19hZl9zaXplX2ZpbHRlcmVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMDctXFx0XFx0aWYgKHApXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTA4OlxcdFxcdFxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEwOS1cXHR9IGVsc2UgaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9NDU4PXN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTUyOS1cXHRcXHRpZiAocG9ydClcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1MzA6XFx0XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocG9ydCk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTMxLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE2NTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NjQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTY2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwX3JjdShcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjY2LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODMzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODM4LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cF9yY3UoXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg0MC1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9Njg3PWJvb2wgYnJfc2hvdWxkX2xlYXJuKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNjk2LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjY5NzpcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy02OTgtXFx0aWYgKCF2ZyB8fCAhUkVBRF9PTkNFKHZnLVxcdTAwM2VudW1fdmxhbnMpKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTQzNT1pbnQgYnJfdmxhbl9nZXRfcHZpZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2ICpwX3B2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNDQxLVxcdGlmIChwKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE0NDI6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ0My1cXHRlbHNlIGlmIChuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGRldikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNDgwPWludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ4OS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNDkwOlxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KGRzdCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ5MS1cXHR2ID0gYnJfdmxhbl9maW5kKHZnLCBwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9pZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNTM2PWludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTU0NC1cXHRpZiAocClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNTQ1OlxcdFxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1NDYtXFx0ZWxzZSBpZiAobmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTk5NT1zdGF0aWMgaW50IGJyX3ZsYW5fZHVtcF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMjYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjAyNzpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDI4LVxcdFxcdGJyID0gcC1cXHUwMDNlYnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjI4Ljg3NTEyOTM2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4Mjc2MTcxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCcmlkZ2UgYW5kIFZMQU4gRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBOb3csIHRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVwZW5kZW50IG9uIGJvdGggYENPTkZJR19CUklER0VgIGFuZCBgQ09ORklHX1ZMQU5fODAyMVFgLiBNYWtlcyBzZW5zZSwgYXMgVkxBTiBmaWx0ZXJpbmcgaXMgYW4gZXh0ZW5zaW9uIG9mIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCBhbmQgY2hlY2sgbGluZSAxODMzIGZvciB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGdldCB0aGUgcmVhbCBjb250ZXh0IG9uIHRoaXMgI2lmZGVmIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA4NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjM3LjE1MTMwMzY5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgzMDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODMxOlxcdH1cXG4xODMyOlxcdFxcbjE4MzM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG4xODM0OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4xODM1OlxcdHtcXG4xODM2OlxcdFxcdHJldHVybiBOVUxMO1xcbjE4Mzc6XFx0fVxcbjE4Mzg6XFx0XFxuMTgzOTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwX3JjdShcXG4xODQwOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuMTg0MTpcXHR7XFxuMTg0MjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODQzOlxcdH1cXG4xODQ0OlxcdFxcbjE4NDU6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fZ2V0X3N0YXRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXFxuMTg0NjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0cylcXG4xODQ3OlxcdHtcXG4xODQ4OlxcdH1cXG4xODQ5OlxcdFxcbjE4NTA6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fcG9ydF9ldmVudChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbjE4NTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBldmVudClcXG4xODUyOlxcdHtcXG4xODUzOlxcdH1cXG4xODU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozNy4xNTE0MjU5MjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA0NjIwNjk1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgbXkgdGhpbmtpbmcuIFdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQsIGFuZCB3ZSdyZSBkZWFsaW5nIHdpdGggVkxBTnMgb24gYnJpZGdlIHBvcnRzLCB0aGUgYFJUTV9HRVRMSU5LYCByZXF1ZXN0IHdpdGggYFJURVhUX0ZJTFRFUl9CUlZMQU5gIHRyaWdnZXJzIGBicl9maWxsX2lmdmxhbmluZm9gIHdoaWNoIHBvcHVsYXRlcyBgSUZMQV9BRl9TUEVDYC4gSWYgYSBwb3J0IGhhcyBhIGJvYXRsb2FkIG9mIFZMQU5zLCB0aGUgYGFmYCBhdHRyaWJ1dGUgc2l6ZSBjb3VsZCBibG93IHBhc3QgNjRLQiwgZXhjZWVkaW5nIGBVMTZfTUFYYC4gVGhpcyBpcyB3aGVyZSB0aGUgbmV3IGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgY29tZXMgaW50byBwbGF5LiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUgbWFpbiBgQ09ORklHX0JSSURHRWAgZnVuY3Rpb25hbGl0eSBhbmQgYWxzbyBgQ09ORklHX1ZMQU5fODAyMVFgLlxuXG5MZXQgbWUgc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWdzIGFyZSBpbiBwbGF5OiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGFuZCBgVkxBTl84MDIxUWAg4oCTIHN0YW5kYXJkIHN0dWZmLiBgTkVUYCBpcyBzdGFuZGFyZCB0b28uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIG91ciBmb2N1cyBzeW1ib2xzLiBXZSBuZWVkIHRvIGJlIHplcm9lZCBpbiBvbjpcbiogICBgYnJfZ2V0bGlua2A6IEltcGxlbWVudGF0aW9uIGZvciBicmlkZ2UgZGV2aWNlcy5cbiogICBgYnJfZmlsbF9pZmluZm9gOiB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgbmV3IG92ZXJmbG93IGNoZWNrLlxuKiAgIGBydG5sX2JyaWRnZV9nZXRsaW5rYDogcnRuZXRsaW5rIGhhbmRsZXIuXG4qICAgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYDogdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4qICAgYHJ0bmxfYnJpZGdlX25vdGlmeWA6IHVwZGF0ZWQgaGVscGVyIGZvciBleHRhY2suXG4qICAgYHJ0bmxfYnJpZGdlX3NldGxpbmtgOiBjYWxsZXIgb2YgYHJ0bmxfYnJpZGdlX25vdGlmeWAuXG4qICAgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgOiBjYWxsZXIgb2YgYHJ0bmxfYnJpZGdlX25vdGlmeWAuXG5cbkFyZSB0aG9zZSBnb29kPyBMZXQncyBjb25maXJtIHRoZXkncmUgaW4gdGhlIHJpZ2h0IHBsYWNlczogYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCBhbmQgYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gWWVzIVxuXG5BbmQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgYnJfZmlsbF9pZmluZm9gIGlubGluZWQ/IE5vLCBpdCdzIG5vdC4gSXQncyBzdGF0aWMsIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgYW5kIGl0J3Mgc3Vic3RhbnRpYWwgaW4gc2l6ZS4gYGJyX2dldGxpbmtgIGlzIG5vbi1zdGF0aWMuIGBydG5sX2JyaWRnZV9nZXRsaW5rYCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC4gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgYWxzbyBpbiBgcnRuZXRsaW5rLmNgLiBgcnRubF9icmlkZ2Vfbm90aWZ5YCBpcyBzdGF0aWMgaW4gYHJ0bmV0bGluay5jYC5cblxuT2theSwgdGltZSB0byByZXZpZXcgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuXG5cbldlIG5lZWQ6XG4qICAgYFdvcnRoRnV6emluZ2A6IGJvb2xlYW4gKHRydWUpLlxuKiAgIGBSZWFzb25pbmdgOiBhIGNvbmNpc2UgZXhwbGFuYXRpb24uXG4qICAgYEZvY3VzU3ltYm9sc2A6IGFuIGFycmF5IG9mIHN0cmluZyBzeW1ib2xzLlxuKiAgIGBFbmFibGVDb25maWdzYDogYW4gYXJyYXkgb2Ygc3RyaW5nIGNvbmZpZ3MgKG5vIGBDT05GSUdfYCBwcmVmaXgpLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrOlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoZSBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiBgbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNgIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBzaXplIGNoZWNrIGluIGBicl9maWxsX2lmaW5mb2AgdG8gcHJldmVudCBpbnRlZ2VyIHRydW5jYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYElGTEFfQUZfU1BFQ2AsIHdoaWNoIG1lYW5zIGl0IGNhbiByZXR1cm4gLUUyQklHIGFuZCBzZXQgYW4gZXh0ZW5kZWQgQUNLIG1lc3NhZ2UuIEl0IGFsc28gcHVzaGVzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCB0aHJvdWdoIGBuZG9fYnJpZGdlX2dldGxpbmtgLCBgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoKWAsIGFuZCB0aGUgYHJ0bmxfYnJpZGdlXypgIGNhbGxlcnMgaW4gYHJ0bmV0bGluay5jYC4gVGhpcyBpcyBhbGwgY29yZSwgYW5kIGVhc2lseSB0cmlnZ2VyZWQgdGhyb3VnaCBOZXRsaW5rL2JyaWRnZSBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIHN5emthbGxlciBjYW4gY3JlYXRlIGJyaWRnZXMsIGFzc2lnbiBWTEFOcywgYW5kIHF1ZXJ5IGdldGxpbmsuXG5cbjIuICBgRW5hYmxlQ29uZmlnc2A6IFdlJ3JlIGVuYWJsaW5nIGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBWTEFOXzgwMjFRYC5cblxuMy4gIGBGb2N1c1N5bWJvbHNgOiBXZSdyZSBmb2N1c2luZyBvbiBgYnJfZmlsbF9pZmluZm9gLCBgYnJfZ2V0bGlua2AsIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCwgYW5kIGBydG5sX2JyaWRnZV9ub3RpZnlgLlxuXG5BbHJpZ2h0LCBpdCdzIGFsbCByb2NrLXNvbGlkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjcwLCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0Ny42MTM0OTc4NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA1NDEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9maWxsX2lmaW5mb1wiLFxuICAgIFwiYnJfZ2V0bGlua1wiLFxuICAgIFwicnRubF9icmlkZ2VfZ2V0bGlua1wiLFxuICAgIFwibmRvX2RmbHRfYnJpZGdlX2dldGxpbmtcIixcbiAgICBcInJ0bmxfYnJpZGdlX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIChuZXQvYnJpZGdlIGFuZCBuZXQvY29yZS9ydG5ldGxpbmspLCBhZGRpbmcgYSBzaXplIGJvdW5kYXJ5IGNoZWNrIGluIGJyX2ZpbGxfaWZpbmZvKCkgdG8gcHJldmVudCB1MTYgbmxhX2xlbiBvdmVyZmxvdyB3aGVuIHNlcmlhbGl6aW5nIGJyaWRnZSBWTEFOIGluZm9ybWF0aW9uIGludG8gSUZMQV9BRl9TUEVDLCBhbmQgcGx1bWJzIG5ldGxpbmtfZXh0X2FjayB0aHJvdWdoIG5kb19icmlkZ2VfZ2V0bGluayBhY3Jvc3MgbmV0X2RldmljZV9vcHMgYW5kIHJ0bmV0bGluayBjYWxsZXJzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIHJlcXVlc3RzIG9uIGJyaWRnZSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfZmlsbF9pZmluZm9cIixcbiAgICBcImJyX2dldGxpbmtcIixcbiAgICBcInJ0bmxfYnJpZGdlX2dldGxpbmtcIixcbiAgICBcIm5kb19kZmx0X2JyaWRnZV9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2JyaWRnZV9ub3RpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSAobmV0L2JyaWRnZSBhbmQgbmV0L2NvcmUvcnRuZXRsaW5rKSwgYWRkaW5nIGEgc2l6ZSBib3VuZGFyeSBjaGVjayBpbiBicl9maWxsX2lmaW5mbygpIHRvIHByZXZlbnQgdTE2IG5sYV9sZW4gb3ZlcmZsb3cgd2hlbiBzZXJpYWxpemluZyBicmlkZ2UgVkxBTiBpbmZvcm1hdGlvbiBpbnRvIElGTEFfQUZfU1BFQywgYW5kIHBsdW1icyBuZXRsaW5rX2V4dF9hY2sgdGhyb3VnaCBuZG9fYnJpZGdlX2dldGxpbmsgYWNyb3NzIG5ldF9kZXZpY2Vfb3BzIGFuZCBydG5ldGxpbmsgY2FsbGVycy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayByZXF1ZXN0cyBvbiBicmlkZ2UgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NDcuNjg0NTU5OTg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc4ODA1MzM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQ3LjY4NTAxMjQ2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg3Nzg3NTk0NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVhMDI4MDc1NWZlZTFmOTk4M2U3OWNhYzg4NjdmNDU4ZTVjZjNlNGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo1NTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbmluZGV4IGNhOTlmNGIxYTYzYzMuLmE3NTJlNjZiZjYzNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbkBAIC0xNjE1NCwxMiArMTYxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZHBfdHVubmVsX25pY19pbmZvIGJueHRfdWRwX3R1bm5lbHMgPSB7XG4gXG4gc3RhdGljIGludCBibnh0X2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHQgICAgICAgaW50IG5sZmxhZ3MpXG4rXHRcdFx0ICAgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIGJwLVx1MDAzZWJyX21vZGUsIDAsIDAsXG4tXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJueHRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmNcbmluZGV4IGVkMzAyZjVlYzQ3NjguLmNjOWM4NzUzOWE0MjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jXG5AQCAtNTAxMSw3ICs1MDExLDcgQEAgc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXG4gc3RhdGljIGludCBiZV9uZG9fYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgaW50IG5sZmxhZ3MpXG4rXHRcdFx0XHQgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7XG4gXHRpbnQgc3RhdHVzID0gMDtcbkBAIC01MDM3LDcgKzUwMzcsNyBAQCBzdGF0aWMgaW50IGJlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBoc3dfbW9kZSA9PSBQT1JUX0ZXRF9UWVBFX1ZFUEEgP1xuIFx0XHRcdFx0ICAgICAgIEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUIsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJlX2NtZF93b3JrICpiZV9hbGxvY193b3JrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5pbmRleCBhYmJjNzFlODE1YWUzLi41MmMyYjM5M2FhY2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuQEAgLTEzMTUxLDYgKzEzMTUxLDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICAqIEBkZXY6IHRoZSBuZXRkZXYgYmVpbmcgY29uZmlndXJlZFxuICAqIEBmaWx0ZXJfbWFzazogdW51c2VkXG4gICogQG5sZmxhZ3M6IG5ldGxpbmsgZmxhZ3MgcGFzc2VkIGluXG4rICogQGV4dGFjazogbmV0bGluayBleHRlbmRlZCBhY2tcbiAgKlxuICAqIFJldHVybiB0aGUgbW9kZSBpbiB3aGljaCB0aGUgaGFyZHdhcmUgYnJpZGdlIGlzIG9wZXJhdGluZyBpblxuICAqIGkuZSBWRUIgb3IgVkVQQS5cbkBAIC0xMzE1OCw3ICsxMzE1OSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIF9fYWx3YXlzX3VudXNlZCBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICAgaW50IG5sZmxhZ3MsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGk0MGVfbmV0ZGV2X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gbnAtXHUwMDNldnNpO1xuQEAgLTEzMTc1LDcgKzEzMTc3LDcgQEAgc3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhza2IsIHBpZCwgc2VxLCBkZXYsIHZlYi1cdTAwM2VicmlkZ2VfbW9kZSxcbi1cdFx0XHRcdCAgICAgICAwLCAwLCBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGZlNDdlYzBiYTgwOTQuLjAzOGNlMWZlNWJmZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC04MDg2LDEyICs4MDg2LDE0IEBAIGludCBpY2Vfc2V0X3Jzc19oZnVuYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBoZnVuYylcbiAgKiBAZGV2OiB0aGUgbmV0ZGV2IGJlaW5nIGNvbmZpZ3VyZWRcbiAgKiBAZmlsdGVyX21hc2s6IGZpbHRlciBtYXNrIHBhc3NlZCBpblxuICAqIEBubGZsYWdzOiBuZXRsaW5rIGZsYWdzIHBhc3NlZCBpblxuKyAqIEBleHRhY2s6IG5ldGxpbmsgZXh0ZW5kZWQgYWNrXG4gICpcbiAgKiBSZXR1cm4gdGhlIGJyaWRnZSBtb2RlIChWRUIvVkVQQSlcbiAgKi9cbiBzdGF0aWMgaW50XG4gaWNlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4tXHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpXG4rXHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4rXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGljZV9uZXRkZXZfdG9fcGYoZGV2KTtcbiBcdHUxNiBibW9kZTtcbkBAIC04MDk5LDcgKzgxMDEsNyBAQCBpY2VfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdGJtb2RlID0gcGYtXHUwMDNlZmlyc3Rfc3ctXHUwMDNlYnJpZGdlX21vZGU7XG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LCBibW9kZSwgMCwgMCwgbmxmbGFncyxcbi1cdFx0XHRcdCAgICAgICBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuaW5kZXggZjkxODU2NDk4ZWIyZC4uNzdkZmQ4MGE2ZTM2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jXG5AQCAtMTA3MjYsNyArMTA3MjYsOCBAQCBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaXhnYmVfZnJvbV9uZXRkZXYoZGV2KTtcbiBcbkBAIC0xMDczNSw3ICsxMDczNiw3IEBAIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIGFkYXB0ZXItXHUwMDNlYnJpZGdlX21vZGUsIDAsIDAsIG5sZmxhZ3MsXG4tXHRcdFx0XHQgICAgICAgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaXhnYmVfZndkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcbmluZGV4IGZjMTEwYTdkMTZlOGQuLjUzYmY3OWRiZTA4ZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5AQCAtNTI3Nyw3ICs1Mjc3LDcgQEAgc3RhdGljIGludCBtbHg1ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcbiAjaWZkZWYgQ09ORklHX01MWDVfRVNXSVRDSFxuIHN0YXRpYyBpbnQgbWx4NWVfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdGludCBubGZsYWdzKVxuK1x0XHRcdFx0aW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbkBAIC01Mjg4LDcgKzUyODgsNyBAQCBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRtb2RlID0gc2V0dGluZyA/IEJSSURHRV9NT0RFX1ZFUEEgOiBCUklER0VfTU9ERV9WRUI7XG4gXHRyZXR1cm4gbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc2tiLCBwaWQsIHNlcSwgZGV2LFxuIFx0XHRcdFx0ICAgICAgIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgMCwgMCwgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAgIDAsIDAsIG5sZmxhZ3MsIGZpbHRlcl9tYXNrLCBOVUxMLCBleHRhY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVlX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuaW5kZXggNzkyOGU3NmRhNzIzZS4uY2I3NTFkZGRiNjg4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jXG5AQCAtMjI1Nyw3ICsyMjU3LDcgQEAgc3RhdGljIGludCBuZnBfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKVxuIFxuIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXG4tXHRcdFx0XHQgIGludCBubGZsYWdzKVxuK1x0XHRcdFx0ICBpbnQgbmxmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZnBfbmV0ICpubiA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1MTYgbW9kZTtcbkBAIC0yMjY5LDcgKzIyNjksNyBAQCBzdGF0aWMgaW50IG5mcF9uZXRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdCAgICAgICBCUklER0VfTU9ERV9WRVBBIDogQlJJREdFX01PREVfVkVCO1xuIFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldiwgbW9kZSwgMCwgMCxcbi1cdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZwX25ldF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uY1xuaW5kZXggMjkzNWMyZWNjMzE0Yi4uZjk2MGNmNWE5N2EyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcbisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmNcbkBAIC05MzUsNyArOTM1LDcgQEAgc3RhdGljIHZvaWQgcWV0aF9sMl9icjJkZXZfcHV0KHZvaWQpXG4gXG4gc3RhdGljIGludCBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdCAgaW50IG5sZmxhZ3MpXG4rXHRcdFx0XHQgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHFldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LVx1MDAzZW1sX3ByaXY7XG5AQCAtOTQ5LDcgKzk0OSw3IEBAIHN0YXRpYyBpbnQgcWV0aF9sMl9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0cmV0dXJuIG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rKHNrYiwgcGlkLCBzZXEsIGRldixcbiBcdFx0XHRcdCAgICAgICBtb2RlLCBwcml2LVx1MDAzZWJycG9ydF9mZWF0dXJlcyxcbiBcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZWJycG9ydF9od19mZWF0dXJlcyxcbi1cdFx0XHRcdCAgICAgICBubGZsYWdzLCBmaWx0ZXJfbWFzaywgTlVMTCk7XG4rXHRcdFx0XHQgICAgICAgbmxmbGFncywgZmlsdGVyX21hc2ssIE5VTEwsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZXRoX2JycG9ydF9wb2xpY3lbSUZMQV9CUlBPUlRfTUFYICsgMV0gPSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDcwN2IyZTUxYzJiOTcuLjE4YTAzZjBmNmYxMTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTM2MCw3ICsxMzYwLDcgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRcdFx0ICAgICB1MTYgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgKiBpbnQgKCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gICpcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcbi0gKlx0XHRcdCAgICAgaW50IG5sZmxhZ3MpXG4rICpcdFx0XHQgICAgIGludCBubGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiAgKlx0XHRcdCAgICAgdTE2IGZsYWdzKTtcbiAgKlxuQEAgLTE2NTksNyArMTY1OSw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4gXHRcdFx0XHRcdFx0ICAgICAgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIHUzMiBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdFx0XHQgICAgICBpbnQgbmxmbGFncyk7XG4rXHRcdFx0XHRcdFx0ICAgICAgaW50IG5sZmxhZ3MsXG4rXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdGludFx0XHRcdCgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdFx0XHRcdCAgICAgIHUxNiBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDk1NzI5MzM5ZTdhNTQuLmE0MDhjMzZhN2I1NTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMjIyLDcgKzIyMiw4IEBAIGV4dGVybiBpbnQgbmRvX2RmbHRfYnJpZGdlX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbiBcdFx0XHRcdCAgIHUzMiBmaWx0ZXJfbWFzayxcbiBcdFx0XHRcdCAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0XHQgICAgdTMyIGZpbHRlcl9tYXNrKSk7XG4rXHRcdFx0XHRcdFx0ICAgIHUzMiBmaWx0ZXJfbWFzayksXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIGV4dGVybiB2b2lkIHJ0bmxfb2ZmbG9hZF94c3RhdHNfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbmluZGV4IGFlNzZkZjBkZTA1YTAuLjUzNjc2ZGY5ZTRkMTEgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmNcbkBAIC00NTksNyArNDU5LDcgQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbiBcdFx0XHQgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzLFxuIFx0XHRcdCAgdTMyIGZpbHRlcl9tYXNrLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdCAgYm9vbCBnZXRsaW5rKVxuK1x0XHRcdCAgYm9vbCBnZXRsaW5rLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0dTggb3BlcnN0YXRlID0gbmV0aWZfcnVubmluZyhkZXYpID8gUkVBRF9PTkNFKGRldi1cdTAwM2VvcGVyc3RhdGUpIDpcbiBcdFx0XHRcdFx0ICAgIElGX09QRVJfRE9XTjtcbkBAIC02MTMsNiArNjEzLDEyIEBAIHN0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBkb25lOlxuIFx0aWYgKGFmKSB7XG4rXHRcdGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJWTEFOIGluZm9ybWF0aW9uIGRvZXMgbm90IGZpdCBpbiBvbmUgbWVzc2FnZSwgdXNlIFJUTV9HRVRWTEFOXCIpO1xuK1x0XHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4rXHRcdFx0cmV0dXJuIC1FMkJJRztcbitcdFx0fVxuIFx0XHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcdTAwM2UgbmxhX2F0dHJfc2l6ZSgwKSlcbiBcdFx0XHRubGFfbmVzdF9lbmQoc2tiLCBhZik7XG4gXHRcdGVsc2VcbkBAIC02NTQsNyArNjYwLDggQEAgdm9pZCBicl9pbmZvX25vdGlmeShpbnQgZXZlbnQsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdGlmIChza2IgPT0gTlVMTClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4tXHRlcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIDAsIDAsIGV2ZW50LCAwLCBmaWx0ZXIsIGRldiwgZmFsc2UpO1xuK1x0ZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwb3J0LCAwLCAwLCBldmVudCwgMCwgZmlsdGVyLCBkZXYsIGZhbHNlLFxuK1x0XHRcdCAgICAgTlVMTCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBicl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02ODAsNyArNjg3LDggQEAgdm9pZCBicl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuICAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LXG4gICovXG4gaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcbi1cdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssIGludCBubGZsYWdzKVxuK1x0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsXG4rXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7XG4gXG5AQCAtNjkyLDcgKzcwMCw3IEBAIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBubGZsYWdzLFxuLVx0XHRcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUpO1xuK1x0XHRcdCAgICAgIGZpbHRlcl9tYXNrLCBkZXYsIHRydWUsIGV4dGFjayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnJfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCAwOWMzOTdlMzAzMzA3Li5lZGJlN2ExZjU3MzYzIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtMjE3OSw3ICsyMTc5LDcgQEAgaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzLFxuIFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZywgdTE2IGZsYWdzKTtcbiBpbnQgYnJfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MpO1xuK1x0ICAgICAgIHUzMiBmaWx0ZXJfbWFzaywgaW50IG5sZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gaW50IGJyX3Byb2Nlc3Nfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0XHQgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgaW50IGNtZCxcbiBcdFx0XHQgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnZpbmZvX2N1cnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggYmU5ZDE2MjViYWMzMS4uOTY3YjU4N2VmNjY0OCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTUzOTgsNyArNTM5OCw4IEBAIGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxuIFx0XHRcdCAgICB1MzIgZmlsdGVyX21hc2ssXG4gXHRcdFx0ICAgIGludCAoKnZsYW5fZmlsbCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgIHUzMiBmaWx0ZXJfbWFzaykpXG4rXHRcdFx0XHRcdCAgICAgdTMyIGZpbHRlcl9tYXNrKSxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuIFx0c3RydWN0IGlmaW5mb21zZyAqaWZtO1xuQEAgLTU1NzQsNyArNTU3NSw4IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNiLVx1MDAzZWFyZ3NbMF0pIHtcbiBcdFx0XHRcdGVyciA9IGJyX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcbiBcdFx0XHRcdFx0XHRza2IsIHBvcnRpZCwgc2VxLCBkZXYsXG4tXHRcdFx0XHRcdFx0ZmlsdGVyX21hc2ssIE5MTV9GX01VTFRJKTtcbitcdFx0XHRcdFx0XHRmaWx0ZXJfbWFzaywgTkxNX0ZfTVVMVEksXG4rXHRcdFx0XHRcdFx0Y2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU1OTAsNyArNTU5Miw4IEBAIHN0YXRpYyBpbnQgcnRubF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdFx0XHRlcnIgPSBvcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc2VxLCBkZXYsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBmaWx0ZXJfbWFzayxcbi1cdFx0XHRcdFx0XHRcdCAgICAgIE5MTV9GX01VTFRJKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgIE5MTV9GX01VTFRJLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgY2ItXHUwMDNlZXh0YWNrKTtcbiBcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUCkge1xuIFx0XHRcdFx0XHRpZiAobGlrZWx5KHNrYi1cdTAwM2VsZW4pKVxuIFx0XHRcdFx0XHRcdGJyZWFrO1xuQEAgLTU2MjQsNyArNTYyNyw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGJyaWRnZV9ubG1zZ19zaXplKHZvaWQpXG4gXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpO1x0LyogSUZMQV9CUklER0VfTU9ERSAqL1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3N0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtNTYzOSw3ICs1NjQzLDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0Z290byBlcnJvdXQ7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDAsIDApO1xuK1x0ZXJyID0gZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG5AQCAtNTczMCw3ICs1NzM0LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcbiBcdFx0XHQgKiBjaGFuZ2VcbiBcdFx0XHQgKi9cbi1cdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcbitcdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTgwNSw3ICs1ODA5LDcgQEAgc3RhdGljIGludCBydG5sX2JyaWRnZV9kZWxsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdC8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2VcbiBcdFx0XHQgKiBjaGFuZ2VcbiBcdFx0XHQgKi9cbi1cdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTtcbitcdFx0XHRlcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2LCBleHRhY2spO1xuIFx0XHR9XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0Ny42ODUwMTU1OTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ1ODYyNjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIHNwZWNpZmljYWxseSB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBkaWZmIGlzIGFkZGluZyBhIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlciB0byB0aGUgYG5kb19icmlkZ2VfZ2V0bGlua2AgZnVuY3Rpb24gYWNyb3NzIHRoZSBib2FyZC4gVGhpcyBpbmNsdWRlcyB1cGRhdGVzIHRvIGBzdHJ1Y3QgbmV0X2RldmljZV9vcHNgLCB0aGUgaW1wbGVtZW50aW5nIGRyaXZlcnMgbGlrZSBgYm54dGAsIGBiZV9tYWluYCwgYW5kIHNvIG9uLCB0aGUgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gaW4gYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxlcnMgd2l0aGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2Agd2hpY2ggYXJlIHBhc3NpbmcgZWl0aGVyIGBjYi1cdTAwM2VleHRhY2tgIG9yIGBleHRhY2tgLlxuXG5UaGUgY29yZSBhcmVhIG9mIGludGVyZXN0LCBob3dldmVyLCBzZWVtcyB0byBiZSB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJyX2ZpbGxfaWZpbmZvYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0IHByb3ZpZGVkLCBpdCBsb29rcyBsaWtlIGBicl9maWxsX2lmaW5mb2Agbm93IGFsc28gdGFrZXMgdGhlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHBhcmFtZXRlci4gSSdtIHNlZWluZyBhIGNoZWNrIHRoYXQncyBuZXc7IGEgY29tcGFyaXNvbiBpcyBtYWRlIHRvIGVuc3VyZSB0aGF0IFZMQU4gaW5mb3JtYXRpb24gZml0cyB3aXRoaW4gYSBzaW5nbGUgbWVzc2FnZS4gSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGlzIHNldCB1c2luZyBgTkxfU0VUX0VSUl9NU0dfTU9EYCB2aWEgYGV4dGFja2AsIGFuZCB0aGUgbWVzc2FnZSBpcyBjYW5jZWxlZC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGBleHRhY2tgIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkLiBJcyBpdCBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZXNlIGZ1bmN0aW9ucz8gSWYgbm90LCB3ZSBjb3VsZCBoYXZlIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgd2hlcmUgZ2FyYmFnZSBkYXRhIG1pZ2h0IGJlIHVzZWQgaW4gdGhlIGBleHRhY2tgIHN0cnVjdHVyZS4gVGhlIFZMQU4gY2hlY2sgaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIHRoZSBpbml0aWFsaXphdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBvZiBgZXh0YWNrYCB0aGF0J3MgcmFpc2luZyBteSBmbGFncyBoZXJlLiBUaGUgY29udGV4dCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGxzIHRvIGBicl9maWxsX2lmaW5mb2AgaW4gYG5ldC9icmlkZ2UvYnJfbmV0bGluay5jYCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHJpc2suIEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBjaGFuZ2UgdG8gc2VlIGhvdyBhbmQgd2hlcmUgYGV4dGFja2AgaXMgaW5pdGlhbGl6ZWQsIGFuZCBpZiBhbnkgY29kZSBwYXRocyBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gdGhlc2UgaW1wb3J0YW50IGZ1bmN0aW9ucy4gVGhpcyB3YXJyYW50cyBkZWVwZXIgaW52ZXN0aWdhdGlvbiBhbmQgdmVyeSB3ZWxsIG1pZ2h0IG5lZWQgYSBLTVNBTiBmdXp6aW5nIHJ1biB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NTQuMTQzNjQ0NDQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTU6XFx0XFx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBwb3J0KSB7XFxuIDU5NjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHBvcnQpO1xcbiA1OTc6XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqbXN0X25lc3Q7XFxuIDU5ODpcXHRcXHRcXHRpbnQgZXJyO1xcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHRcXHRpZiAoIXZnIHx8ICF2Zy1cXHUwMDNlbnVtX3ZsYW5zKVxcbiA2MDE6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiA2MDI6XFx0XFxuIDYwMzpcXHRcXHRcXHRtc3RfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CUklER0VfTVNUKTtcXG4gNjA0OlxcdFxcdFxcdGlmICghbXN0X25lc3QpXFxuIDYwNTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0XFx0XFx0ZXJyID0gYnJfbXN0X2ZpbGxfaW5mbyhza2IsIHZnKTtcXG4gNjA4OlxcdFxcdFxcdGlmIChlcnIpXFxuIDYwOTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjEwOlxcdFxcbiA2MTE6XFx0XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgbXN0X25lc3QpO1xcbiA2MTI6XFx0XFx0fVxcbiA2MTM6XFx0XFxuIDYxNDpcXHRkb25lOlxcbiA2MTU6XFx0XFx0aWYgKGFmKSB7XFxuIDYxNjpcXHRcXHRcXHRpZiAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZiBcXHUwMDNlIFUxNl9NQVgpIHtcXG4gNjE3OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuIDYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBpbmZvcm1hdGlvbiBkb2VzIG5vdCBmaXQgaW4gb25lIG1lc3NhZ2UsIHVzZSBSVE1fR0VUVkxBTlxcXCIpO1xcbiA2MTk6XFx0XFx0XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjIwOlxcdFxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDYyMTpcXHRcXHRcXHR9XFxuIDYyMjpcXHRcXHRcXHRpZiAobmxtc2dfZ2V0X3Bvcyhza2IpIC0gKHZvaWQgKilhZiBcXHUwMDNlIG5sYV9hdHRyX3NpemUoMCkpXFxuIDYyMzpcXHRcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBhZik7XFxuIDYyNDpcXHRcXHRcXHRlbHNlXFxuIDYyNTpcXHRcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBhZik7XFxuIDYyNjpcXHRcXHR9XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdG5sbXNnX2VuZChza2IsIG5saCk7XFxuIDYyOTpcXHRcXHRyZXR1cm4gMDtcXG4gNjMwOlxcdFxcbiA2MzE6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbiA2MzI6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4gNjMzOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDYzNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjU0LjE0MzgzMDk3M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDE3Njg2MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIE5ldGxpbmsgQXR0cmlidXRlIE92ZXJmbG93KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGlzIGBhZmAgdmFyaWFibGUgaXMgYSBgc3RydWN0IG5sYXR0ciAqYCwgc3BlY2lmaWNhbGx5IGNyZWF0ZWQgdXNpbmcgYG5sYV9uZXN0X3N0YXJ0X25vZmxhZ2Agd2l0aGluIHRoZSBuZXRsaW5rIGNvbnRleHQuIFJpZ2h0LCBpbiBuZXRsaW5rLCBgbmxhX2xlbmAgaXMgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciAoYF9fdTE2YCksIG1lYW5pbmcgaXQgaGFzIGEgbWF4aW11bSB2YWx1ZSBvZiA2NTUzNS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgYG5sYV9uZXN0X2VuZGAgY2FsY3VsYXRlcyBgbmxhX2xlbmAuIEl0IGFzc2lnbnMgYGFmLVx1MDAzZW5sYV9sZW5gIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGFpbCBvZiB0aGUgc2tiIChgc2tiX3RhaWxfcG9pbnRlcmApIGFuZCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXR0cmlidXRlIChgKHVuc2lnbmVkIGNoYXIgKilhZmApLlxuXG5UaGUgcG90ZW50aWFsIGlzc3VlIGltbWVkaWF0ZWx5IGp1bXBzIG91dDogSWYgdGhlIGRhdGEgYmVpbmcgbmVzdGVkICp3aXRoaW4qIHRoZSBhdHRyaWJ1dGUgaXMgdG9vIGxhcmdlIOKAkyBpZiwgZm9yIGluc3RhbmNlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBodWdlIG51bWJlciBvZiBWTEFOcyDigJMgdGhpcyBsZW5ndGggY2FsY3VsYXRpb24gY291bGQgZXhjZWVkIHRoZSBgVTE2X01BWGAgbGltaXQuIFRoYXQncyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyEgYGFmLVx1MDAzZW5sYV9sZW5gIHdvdWxkIHdyYXAgYXJvdW5kLCBiZWNvbWluZyBhIHNtYWxsLCBpbmNvcnJlY3QgbnVtYmVyLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBlaXRoZXIgdGhlIGtlcm5lbCBvciB1c2Vyc3BhY2UgcGFyc2luZyB0aGUgYXR0cmlidXRlIGFzIG11Y2ggc21hbGxlciB0aGFuIGl0IGFjdHVhbGx5IGlzLCByZXN1bHRpbmcgaW4gYSBjb3JydXB0ZWQgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIG9yIHRydW5jYXRlZCBhdHRyaWJ1dGUuXG5cbkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBleGFjdGx5IHRoYXQhIEl0IGFkZHMgYSBjaGVjazogYGlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYKWAuIElmIHRoZSBsZW5ndGggaXMgdG9vIGxhcmdlLCBpdCBzZXRzIGFuIGV4dGVuZGVkIEFDSyBlcnJvciBtZXNzYWdlLCBjYW5jZWxzIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCByZXR1cm5zIGAtRTJCSUdgLiBTbWFydCEgVGhleSd2ZSBtYW5hZ2VkIHRvIGNhdGNoIHRoZSBvdmVyZmxvdyBiZWZvcmUgaXQgY2F1c2VzIHJlYWwgZGFtYWdlLlxuXG5UaGUgY29kZSdzIHRocmVhZGluZyBhIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tgIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AgZG93biB0byBgYnJfZmlsbF9pZmluZm9gIHRvIGVuYWJsZSB0aGUgc2V0dGluZyBvZiBgZXh0YWNrYCBpbiB0aGUgZmlyc3QgcGxhY2UsIGdvb2QgZGVzaWduLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgaW4gdGhlIGV4dGVuZGVkIEFDSy5cblxuTm93LCBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgdGhpcyBwYXRjaCBoYXMgYW55IG90aGVyIGNoYW5nZXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5kb19kZmx0X2JyaWRnZV9nZXRsaW5rYCB0byBjb25maXJtIHRoYXQgYW55IHNpbWlsYXIgY29kZSBpcyBjb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NTguNTYxNTE5NjIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1Mzk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1Mzk1OlxcdGludCBuZG9fZGZsdF9icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbjUzOTY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtb2RlLFxcbjUzOTc6XFx0XFx0XFx0XFx0ICAgIHUzMiBmbGFncywgdTMyIG1hc2ssIGludCBubGZsYWdzLFxcbjUzOTg6XFx0XFx0XFx0XFx0ICAgIHUzMiBmaWx0ZXJfbWFzayxcXG41Mzk5OlxcdFxcdFxcdFxcdCAgICBpbnQgKCp2bGFuX2ZpbGwpKHN0cnVjdCBza19idWZmICpza2IsXFxuNTQwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuNTQwMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBmaWx0ZXJfbWFzayksXFxuNTQwMjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjU0MDM6XFx0e1xcbjU0MDQ6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuNTQwNTpcXHRcXHRzdHJ1Y3QgaWZpbmZvbXNnICppZm07XFxuNTQwNjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpicl9hZnNwZWM7XFxuNTQwNzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpwcm90aW5mbztcXG41NDA4OlxcdFxcdHU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IGRldi1cXHUwMDNlb3BlcnN0YXRlIDogSUZfT1BFUl9ET1dOO1xcbjU0MDk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpO1xcbjU0MTA6XFx0XFx0aW50IGVyciA9IDA7XFxuNTQxMTpcXHRcXG41NDEyOlxcdFxcdG5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCBSVE1fTkVXTElOSywgc2l6ZW9mKCppZm0pLCBubGZsYWdzKTtcXG41NDEzOlxcdFxcdGlmIChubGggPT0gTlVMTClcXG41NDE0OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuNTQxNTpcXHRcXG41NDE2OlxcdFxcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcXG41NDE3OlxcdFxcdGlmbS1cXHUwMDNlaWZpX2ZhbWlseSA9IEFGX0JSSURHRTtcXG41NDE4OlxcdFxcdGlmbS1cXHUwMDNlX19pZmlfcGFkID0gMDtcXG41NDE5OlxcdFxcdGlmbS1cXHUwMDNlaWZpX3R5cGUgPSBkZXYtXFx1MDAzZXR5cGU7XFxuNTQyMDpcXHRcXHRpZm0tXFx1MDAzZWlmaV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG41NDIxOlxcdFxcdGlmbS1cXHUwMDNlaWZpX2ZsYWdzID0gbmV0aWZfZ2V0X2ZsYWdzKGRldik7XFxuNTQyMjpcXHRcXHRpZm0tXFx1MDAzZWlmaV9jaGFuZ2UgPSAwO1xcbjU0MjM6XFx0XFxuNTQyNDpcXHRcXG41NDI1OlxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhza2IsIElGTEFfSUZOQU1FLCBkZXYtXFx1MDAzZW5hbWUpIHx8XFxuNTQyNjpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX01UVSwgZGV2LVxcdTAwM2VtdHUpIHx8XFxuNTQyNzpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfT1BFUlNUQVRFLCBvcGVyc3RhdGUpIHx8XFxuNTQyODpcXHRcXHQgICAgKGJyX2RldiBcXHUwMDI2XFx1MDAyNlxcbjU0Mjk6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTUFTVEVSLCBicl9kZXYtXFx1MDAzZWlmaW5kZXgpKSB8fFxcbjU0MzA6XFx0XFx0ICAgIChkZXYtXFx1MDAzZWFkZHJfbGVuIFxcdTAwMjZcXHUwMDI2XFxuNTQzMTpcXHRcXHQgICAgIG5sYV9wdXQoc2tiLCBJRkxBX0FERFJFU1MsIGRldi1cXHUwMDNlYWRkcl9sZW4sIGRldi1cXHUwMDNlZGV2X2FkZHIpKSB8fFxcbjU0MzI6XFx0XFx0ICAgIChkZXYtXFx1MDAzZWlmaW5kZXggIT0gZGV2X2dldF9pZmxpbmsoZGV2KSBcXHUwMDI2XFx1MDAyNlxcbjU0MzM6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTElOSywgZGV2X2dldF9pZmxpbmsoZGV2KSkpKVxcbjU0MzQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjU4LjU2MTkzMDU0NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjI1MzE0NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQnJpZGdlIE5ldGxpbmsgSW50ZXJmYWNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIGJyaWRnZSBuZXRsaW5rIGludGVyZmFjZSBoYW5kbGVzIGdldHRpbmcgbGluayBpbmZvcm1hdGlvbi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AgdGFrZXMgYW4gYGV4dGFja2AgYXJndW1lbnQsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSB1c2luZyBpdCByaWdodCBub3cuIEl0J3MgcHJvYmFibHkgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBvciBmb3IgcG90ZW50aWFsIGZ1dHVyZSB1c2UgZnVydGhlciBkb3duIHRoZSBsaW5lLiBJIGp1c3Qgd2FudCB0byB2ZXJpZnk7IG5vLCBgdmxhbl9maWxsYCBkb2Vzbid0IGdldCBgZXh0YWNrYCBwYXNzZWQgdG8gaXQuXG5cbkFscmlnaHQsIG1vdmluZyBvbiwgbGV0J3MgbG9vayBhdCBgcnRubF9icmlkZ2VfZ2V0bGlua2AuIE9rYXksIEkgc2VlIHRoYXQgd2l0aGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgdGhlIGRyaXZlcidzIGBuZG9fYnJpZGdlX2dldGxpbmtgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2l0aCBgY2ItXHUwMDNlZXh0YWNrYCBwYXNzZWQgaW4uIFRoYXQgbWFrZXMgc2Vuc2UuIEkgc2VlIGEgc2ltaWxhciBwYXR0ZXJuIHdpdGggYHJ0bmxfYnJpZGdlX25vdGlmeWAsIHdoZXJlIGBleHRhY2tgIGlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyJ3MgYG5kb19icmlkZ2VfZ2V0bGlua2AuXG5cbk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSdtIGdvaW5nIHRvIHJ1biBhIHF1aWNrIGdyZXAgZm9yIGAubmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgdGhlIHJlbGV2YW50IGNvZGViYXNlLiBJIHdhbnQgdG8gY2hlY2sgdGhhdCBhbGwgZHJpdmVycyB0aGF0IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFyZSBjb25zaXN0ZW50bHkgdXBkYXRlZCB0byB0aGUgY3VycmVudCBzaWduYXR1cmUgd2l0aCBgZXh0YWNrYCBhbmQgZXZlcnl0aGluZyBlbHNlLiBJdCB3b3VsZCBiZSBlYXN5IHRvIG1pc3MgYW4gaW5zdGFuY2UgYW5kIGludHJvZHVjZSBhIHN1YnRsZSBidWcuIEknbGwgbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgZHJpdmVycyBzbGlwIHVuZGVyIHRoZSByYWRhci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowMS43ODcyNDg5MTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDAyOTA5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX2JyaWRnZV9nZXRsaW5rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2MjEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm54dF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYyNDAtXFx0Lm5kb194ZHBfeG1pdFxcdFxcdD0gYm54dF94ZHBfeG1pdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjI0MTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBibnh0X2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2MjQyLVxcdC5uZG9fYnJpZGdlX3NldGxpbmtcXHQ9IGJueHRfYnJpZGdlX3NldGxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTQ5Njg9c3RhdGljIGludCBiZV9uZG9fYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTUwMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo1MDEyOnN0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy01MDEzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmlsdGVyX21hc2ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTUxNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy01MTczLVxcdC5uZG9fYnJpZGdlX3NldGxpbmtcXHQ9IGJlX25kb19icmlkZ2Vfc2V0bGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjUxNzQ6XFx0Lm5kb19icmlkZ2VfZ2V0bGlua1xcdD0gYmVfbmRvX2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNTE3NS1cXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBiZV9mZWF0dXJlc19jaGVjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTMwODg9c3RhdGljIGludCBpNDBlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xMzE0Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEzMTQ3OiAqIGk0MGVfbmRvX2JyaWRnZV9nZXRsaW5rIC0gR2V0IHRoZSBoYXJkd2FyZSBicmlkZ2UgbW9kZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNDgtICogQHNrYjogc2tiIGJ1ZmZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNTgtICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTMxNTk6c3RhdGljIGludCBpNDBlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTMxNjAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9MTM2Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTEzNjY2LVxcdC5uZG9fZmVhdHVyZXNfY2hlY2tcXHQ9IGk0MGVfZmVhdHVyZXNfY2hlY2ssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxMzY2NzpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBpNDBlX25kb19icmlkZ2VfZ2V0bGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTEzNjY4LVxcdC5uZG9fYnJpZGdlX3NldGxpbmtcXHQ9IGk0MGVfbmRvX2JyaWRnZV9zZXRsaW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9OTc4OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGljZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtOTgxMy1cXHQubmRvX3NldF9mZWF0dXJlcyA9IGljZV9zZXRfZmVhdHVyZXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgxNDpcXHQubmRvX2JyaWRnZV9nZXRsaW5rID0gaWNlX2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTk4MTUtXFx0Lm5kb19icmlkZ2Vfc2V0bGluayA9IGljZV9icmlkZ2Vfc2V0bGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYz0xMDY5OT1zdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTEwNzI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYzoxMDcyNzpzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2VfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0xMDcyOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYz0xMTA3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4Z2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTExMTAtXFx0Lm5kb19icmlkZ2Vfc2V0bGlua1xcdD0gaXhnYmVfbmRvX2JyaWRnZV9zZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYzoxMTExMTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTExMTEyLVxcdC5uZG9fZGZ3ZF9hZGRfc3RhdGlvblxcdD0gaXhnYmVfZndkX2FkZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTMyND1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NWVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTM1MC1cXHQubmRvX2JyaWRnZV9zZXRsaW5rICAgICAgPSBtbHg1ZV9icmlkZ2Vfc2V0bGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jOjUzNTE6XFx0Lm5kb19icmlkZ2VfZ2V0bGluayAgICAgID0gbWx4NWVfYnJpZGdlX2dldGxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jPTIzMTU9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5mcF9uZmQzX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM0MS1cXHQubmRvX3hza193YWtldXBcXHRcXHQ9IG5mcF9uZXRfeHNrX3dha2V1cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmM6MjM0MjpcXHQubmRvX2JyaWRnZV9nZXRsaW5rICAgICA9IG5mcF9uZXRfYnJpZGdlX2dldGxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jLTIzNDMtXFx0Lm5kb19icmlkZ2Vfc2V0bGluayAgICAgPSBuZnBfbmV0X2JyaWRnZV9zZXRsaW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jPTIzNDY9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5mcF9uZmRrX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfY29tbW9uLmMtMjM3MS1cXHQubmRvX2JwZlxcdFxcdD0gbmZwX25ldF94ZHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2NvbW1vbi5jOjIzNzI6XFx0Lm5kb19icmlkZ2VfZ2V0bGluayAgICAgPSBuZnBfbmV0X2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9jb21tb24uYy0yMzczLVxcdC5uZG9fYnJpZGdlX3NldGxpbmsgICAgID0gbmZwX25ldF9icmlkZ2Vfc2V0bGluayxcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9MTA0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFldGhfbDJfaXFkX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTEwNjUtXFx0Lm5kb19zZXRfZmVhdHVyZXNcXHQ9IHFldGhfc2V0X2ZlYXR1cmVzLFxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM6MTA2NjpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0PSBxZXRoX2wyX2JyaWRnZV9nZXRsaW5rLFxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMTA2Ny1cXHQubmRvX2JyaWRnZV9zZXRsaW5rXFx0PSBxZXRoX2wyX2JyaWRnZV9zZXRsaW5rLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM2MC0gKlxcdFxcdFxcdCAgICAgdTE2IGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMzYxOiAqIGludCAoKm5kb19icmlkZ2VfZ2V0bGluaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTEzNjItICpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNjU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNjU4OlxcdGludFxcdFxcdFxcdCgqbmRvX2JyaWRnZV9nZXRsaW5rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY1OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1MzIgc2VxLFxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz00Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NjgtXFx0Lm5kb19tZGJfZ2V0XFx0XFx0ID0gYnJfbWRiX2dldCxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ2OTpcXHQubmRvX2JyaWRnZV9nZXRsaW5rXFx0ID0gYnJfZ2V0bGluayxcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTQ3MC1cXHQubmRvX2JyaWRnZV9zZXRsaW5rXFx0ID0gYnJfc2V0bGluayxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTU1NTM9c3RhdGljIGludCBydG5sX2JyaWRnZV9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1NzMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU3NDpcXHRcXHRpZiAoYnJfZGV2IFxcdTAwMjZcXHUwMDI2IGJyX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTU3NS1cXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IGNiLVxcdTAwM2VhcmdzWzBdKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU3NjpcXHRcXHRcXHRcXHRlcnIgPSBicl9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluayhcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NTc3LVxcdFxcdFxcdFxcdFxcdFxcdHNrYiwgcG9ydGlkLCBzZXEsIGRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1ODktXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTU5MDpcXHRcXHRpZiAob3BzLVxcdTAwM2VuZG9fYnJpZGdlX2dldGxpbmspIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NTkxLVxcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gY2ItXFx1MDAzZWFyZ3NbMF0pIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NTkyOlxcdFxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgcG9ydGlkLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU1OTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2VxLCBkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz01NjMwPXN0YXRpYyBpbnQgcnRubF9icmlkZ2Vfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjM2LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjU2Mzc6XFx0aWYgKCFkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2VfZ2V0bGluaylcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01NjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTY0NS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1NjQ2OlxcdGVyciA9IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwLCAwLCBleHRhY2spO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTU2NDctXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjAzLjYyNzU0NTgwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTQ5NTI0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBJbmZvcm1hdGlvbiBPdmVyZmxvdyBDaGVjayoqXG5cbk9rYXksIHNvIEkndmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgYWxsIHRoZSBpbXBsZW1lbnRhdGlvbnMgYW5kIGNhbGxlcnMgd2l0aCBgZXh0YWNrYCwgdGhhdCdzIGEgZ29vZCBzdGFydC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGNvZGUuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZSB3aXRoIFZMQU4gaW5mb3JtYXRpb24uIEZyb20gd2hhdCBJIHNlZSwgaXQgaW50cm9kdWNlcyBhIGNydWNpYWwgb3ZlcmZsb3cgY2hlY2s6IGBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKWFmIFx1MDAzZSBVMTZfTUFYYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIHByZXZpb3VzbHksIGlmIHRoZSBWTEFOIGRhdGEgbmVzdGVkIHdpdGhpbiB0aGUgYGFmYCBhdHRyaWJ1dGUgZXhjZWVkZWQgNjU1MzUgYnl0ZXMgKHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgc2l6ZSBmb3IgYG5sYV9sZW5gKSwgdGhlIGBubGFfbmVzdF9lbmRgIGZ1bmN0aW9uIHdvdWxkIHNpbXBseSB0cnVuY2F0ZSB0aGUgbGVuZ3RoIHRvIGEgYHUxNmAuXG5cblRoaXMgbmV3IGNoZWNrIGFkZHJlc3NlcyB0aGF0IGJ5IGNhbmNlbGxpbmcgdGhlIE5ldGxpbmsgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIGAtRTJCSUdgIGlmIHRoZSBvdmVyZmxvdyBpcyBkZXRlY3RlZC4gQ3JpdGljYWxseSwgaXQgYWxzbyBwcm9wYWdhdGVzIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUgc28gYSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIGNhbiBiZSBzZXQgdXNpbmcgYE5MX1NFVF9FUlJfTVNHX01PRGAuIFRoYXQgYWxsb3dzIHVzIHRvIHByb3ZpZGUgYSBtdWNoIG1vcmUgdXNlZnVsIGVycm9yIG1lc3NhZ2UuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG4qICAgTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIHNvIG5vIGNvbmNlcm5zIHRoZXJlLlxuKiAgIGBOTF9TRVRfRVJSX01TR19NT0RgIGNvcnJlY3RseSBzZXRzIHRoZSBlcnJvciBtZXNzYWdlIHBvaW50ZXIgdG8gYSBzdHJpbmcgbGl0ZXJhbCwgd2hpY2ggaXMgc2FmZS5cbiogICBJbiB0aGUgZXJyb3IgcGF0aCAoYC1FMkJJR2AgcmV0dXJuKSwgYG5sbXNnX2NhbmNlbChza2IsIG5saClgIGNvcnJlY3RseSB0cmltcyB0aGUgYHNrYmAgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4qICAgVGhlIGBza2JgIGJ1ZmZlciBpdHNlbGYgaXMgYW4gZXhpc3RpbmcgYHNrYmAgYWxsb2NhdGVkIGJ5IHRoZSBOZXRsaW5rIGR1bXAvbm90aWZ5IHJvdXRpbmVzLCBpdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHNrYiBidWZmZXIuXG4qICAgSSBjYW4gc2VlIHRoYXQgdGhlIGNyaXRpY2FsIGNhbGN1bGF0aW9uLCBgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHVuc2lnbmVkIGNoYXIgKilhZmAsIGlzIHVzaW5nIHZhbGlkIHBvaW50ZXJzIGludG8gdGhlIGBza2JgIGJ1ZmZlci5cbiogICBUaGlzIGFsc28gbWVhbnMgdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgY29waWVkIHRvIHVzZXJzcGFjZTsgaW4gZmFjdCwgaXQgKnByZXZlbnRzKiBzZW5kaW5nIGEgY29ycnVwdGVkIG1lc3NhZ2UuXG4qICAgVGhlcmUncyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhOyBgYWZgIGFuZCBgc2tiYCBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGV4dGFja2Agc3RydWN0dXJlIGlzIHBhc3NlZCBpbi5cbiogICBBbGwgZHJpdmVycyBhcmUgY29ycmVjdGx5IHBhc3NpbmcgdGhlIGBleHRhY2tgIHN0cnVjdCB0aHJvdWdoIHRvIGBuZG9fZGZsdF9icmlkZ2VfZ2V0bGlua2AuXG5cbkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZXh0YWNrYCBpcyBiZWluZyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXJzLCBlc3BlY2lhbGx5IGluIGBydG5sX2JyaWRnZV9nZXRsaW5rYCwgYHJ0bmxfYnJpZGdlX3NldGxpbmtgLCBhbmQgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLlxuXG5JIGtub3cgaW4gYHJ0bmxfYnJpZGdlX2dldGxpbmtgLCBgY2ItXHUwMDNlZXh0YWNrYCBjb21lcyBmcm9tIHRoZSBgbmV0bGlua19jYWxsYmFja2Agc3RydWN0LCB3aGljaCBpcyBtYW5hZ2VkIGJ5IHRoZSBOZXRsaW5rIGNvcmUgaXRzZWxmIChpbml0aWFsaXplZCBhbmQgemVyb2VkIGJ5IHRoZSBjb3JlKS4gVGhhdCdzIGdvb2QuXG5cbkluIGBydG5sX2JyaWRnZV9zZXRsaW5rYCBhbmQgYHJ0bmxfYnJpZGdlX2RlbGxpbmtgLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHJ0bmxfYnJpZGdlX25vdGlmeWAgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseSB0byBlbnN1cmUgdGhlIGBleHRhY2tgIHBvaW50ZXIgaXMgYmVpbmcgaGFuZGxlZCBzYWZlbHkuIExldCBtZSByZXZpZXcgdGhhdCBjb2RlIGFnYWluIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjA5Ljc3NzA3NDY1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTcyMDpcXHRcXG41NzIxOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5CUklER0VfRkxBR1NfTUFTVEVSO1xcbjU3MjI6XFx0XFx0fVxcbjU3MjM6XFx0XFxuNTcyNDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlJJREdFX0ZMQUdTX1NFTEYpKSB7XFxuNTcyNTpcXHRcXHRcXHRpZiAoIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2JyaWRnZV9zZXRsaW5rKVxcbjU3MjY6XFx0XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuNTcyNzpcXHRcXHRcXHRlbHNlXFxuNTcyODpcXHRcXHRcXHRcXHRlcnIgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icmlkZ2Vfc2V0bGluayhkZXYsIG5saCxcXG41NzI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZmxhZ3MsXFxuNTczMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGV4dGFjayk7XFxuNTczMTpcXHRcXHRcXHRpZiAoIWVycikge1xcbjU3MzI6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfkJSSURHRV9GTEFHU19TRUxGO1xcbjU3MzM6XFx0XFxuNTczNDpcXHRcXHRcXHRcXHQvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlXFxuNTczNTpcXHRcXHRcXHRcXHQgKiBjaGFuZ2VcXG41NzM2OlxcdFxcdFxcdFxcdCAqL1xcbjU3Mzc6XFx0XFx0XFx0XFx0ZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgZXh0YWNrKTtcXG41NzM4OlxcdFxcdFxcdH1cXG41NzM5OlxcdFxcdH1cXG41NzQwOlxcdFxcbjU3NDE6XFx0XFx0aWYgKGJyX2ZsYWdzX2F0dHIpXFxuNTc0MjpcXHRcXHRcXHRtZW1jcHkobmxhX2RhdGEoYnJfZmxhZ3NfYXR0ciksIFxcdTAwMjZmbGFncywgc2l6ZW9mKGZsYWdzKSk7XFxuNTc0MzpcXHRvdXQ6XFxuNTc0NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjU3NDU6XFx0fVxcbjU3NDY6XFx0XFxuNTc0NzpcXHRzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX2RlbGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuNTc0ODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjU3NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowOS43NzczMTQ5N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTY5NTI2NDM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQb3RlbnRpYWwgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIE5ldGxpbmsgQnJpZGdlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgYGV4dGFja2AgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIG5ldGxpbmsgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcnRubF9icmlkZ2Vfc2V0bGlua2AsIGBydG5sX2JyaWRnZV9kZWxsaW5rYCwgYW5kIGBicl9pbmZvX25vdGlmeWAuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgYGV4dGFja2AgY2FuIGJlIHBhc3NlZCBhcm91bmQgYXMgYE5VTExgIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgb3JpZ2luYXRpbmcgZnJvbSBgbmV0bGlua19yY3Zfc2tiYCB3aXRoaW4gdGhlIG5ldGxpbmsgZGlzcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLlxuXG5NeSBjb25jZXJuIGluaXRpYWxseSB3YXMgd2hldGhlciB0aGlzIGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciwgd29yc2UsIHdyaXR0ZW4gdG8uIFdlIGNhbiBzZWUgdGhhdCBgTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgLi4uKWAgaXMgdGhlIGtleSBtYWNybyBoZXJlLiBUaGF0IGV4cGFuZHMgdG8gYE5MX1NFVF9FUlJfTVNHKClgIHdoaWNoIGluY2x1ZGVzIGEgY2hlY2sgYGlmIChleHRhY2spYCB3aXRoaW4gaXRzIHN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCB0aGUgY29kZSBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIGBleHRhY2sgPT0gTlVMTGAgY2FzZSwgcHJldmVudGluZyBhbnkgZGlyZWN0IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUncyBubyBuZXcgbWVtb3J5IGFsbG9jYXRlZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbmQgY2VydGFpbmx5IG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBhbHNvIHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgZm9yIG1hbGZvcm1lZCBtZXNzYWdlcy5cblxuSSd2ZSBleGFtaW5lZCB0aGUgY29kZSBjYXJlZnVsbHkgYW5kIGRldGVybWluZWQgdGhhdCB0aGVyZSdzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBpbiB0aGlzIGNvbnRleHQuIFRoZSBjb2RlIG5vdyBhbHNvIGluY2x1ZGVzIGVycm9yIGNoZWNrcyBmb3IgYnVmZmVyIHNpemUgZXhjZWVkaW5nIGBVMTZfTUFYYCwgY2FuY2VsbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIHdoZW4gdGhlIGJ1ZmZlciBpcyB0b28gbGFyZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaW4gc2NlbmFyaW9zIHdpdGggZGVlcCBuZXN0aW5nLCB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93aW5nIGRhdGEgYW5kIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cblxuSSd2ZSBjb25maXJtZWQgbXkgYW5hbHlzaXMgYnkgY2hlY2tpbmcgYWxsIGZvdXIgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOYC5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSAtIHRoZSBwYXRjaCBhY3R1YWxseSBjYW5jZWxzIHRoZSBtZXNzYWdlIGlmIGl0J3MgdG9vIGxhcmdlIGluc3RlYWQgb2Ygd3JpdGluZyBhIHRydW5jYXRlZCBsZW5ndGguXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIC0gbm8gc3VjaCBkZXBlbmRlbmNlLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgLSBubyBhbGxvY2F0aW9ucyBhZGRlZC5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyAtIHRoZSBuZXN0IHNpemUgaXMgbm93IHJlc3RyaWN0ZWQgdG8gYFx1MDAzYz0gVTE2X01BWGAuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGVyZSdzIG5vIHBvc3NpYmlsaXR5IG9mIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGluIHRoaXMgY29kZS4gVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGluIHRoaXMgaW5zdGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzg3LCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU4OjE1LjQ3MjU4MjUzNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgYSAxNi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBsZW5ndGggKElGTEFfQUZfU1BFQykgd2hlbiBkdW1waW5nIGJyaWRnZSBwb3J0IFZMQU4gaW5mb3JtYXRpb24sIGNhbmNlbGluZyB0aGUgbmV0bGluayBtZXNzYWdlIGFuZCByZXR1cm5pbmcgLUUyQklHIGlmIHRoZSBuZXN0ZWQgZGF0YSBleGNlZWRzIFUxNl9NQVguIFRvIHN1cHBvcnQgc2V0dGluZyBhbiBleHRlbmRlZCBhY2sgbWVzc2FnZSAoTkxfU0VUX0VSUl9NU0dfTU9EKSwgaXQgdGhyZWFkcyB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja2AgcGFyYW1ldGVyIHRocm91Z2ggYG5kb19icmlkZ2VfZ2V0bGlua2AgYWNyb3NzIG5ldCBjb3JlIGFuZCB2YXJpb3VzIGV0aGVybmV0IGRyaXZlcnMuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgcG9pbnRlciBhcml0aG1ldGljIHJlbGllcyBvbiB2YWxpZCBidWZmZXIgcG9pbnRlcnMgKGBza2JfdGFpbF9wb2ludGVyKHNrYilgIGFuZCBgYWZgKSwgYW5kIE5MX1NFVF9FUlJfTVNHX01PRCBzYWZlbHkgaGFuZGxlcyBib3RoIHZhbGlkIGFuZCBOVUxMIGV4dGFjayBwb2ludGVycy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQ7IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCBhIDE2LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGxlbmd0aCAoSUZMQV9BRl9TUEVDKSB3aGVuIGR1bXBpbmcgYnJpZGdlIHBvcnQgVkxBTiBpbmZvcm1hdGlvbiwgY2FuY2VsaW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UgYW5kIHJldHVybmluZyAtRTJCSUcgaWYgdGhlIG5lc3RlZCBkYXRhIGV4Y2VlZHMgVTE2X01BWC4gVG8gc3VwcG9ydCBzZXR0aW5nIGFuIGV4dGVuZGVkIGFjayBtZXNzYWdlIChOTF9TRVRfRVJSX01TR19NT0QpLCBpdCB0aHJlYWRzIHRoZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrYCBwYXJhbWV0ZXIgdGhyb3VnaCBgbmRvX2JyaWRnZV9nZXRsaW5rYCBhY3Jvc3MgbmV0IGNvcmUgYW5kIHZhcmlvdXMgZXRoZXJuZXQgZHJpdmVycy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBwb2ludGVyIGFyaXRobWV0aWMgcmVsaWVzIG9uIHZhbGlkIGJ1ZmZlciBwb2ludGVycyAoYHNrYl90YWlsX3BvaW50ZXIoc2tiKWAgYW5kIGBhZmApLCBhbmQgTkxfU0VUX0VSUl9NU0dfTU9EIHNhZmVseSBoYW5kbGVzIGJvdGggdmFsaWQgYW5kIE5VTEwgZXh0YWNrIHBvaW50ZXJzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[1] Phase: Succeeded StartedAt: 2026-09-12 13:58:48 +0000 UTC FinishedAt: 2026-09-12 13:58:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 13:58:48 +0000 UTC FinishedAt: 2026-09-12 13:58:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2] Phase: Succeeded StartedAt: 2026-09-12 13:58:48 +0000 UTC FinishedAt: 2026-09-12 17:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 13:58:48 +0000 UTC FinishedAt: 2026-09-12 17:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 13:58:48 +0000 UTC FinishedAt: 2026-09-12 13:58:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 13:58:48 +0000 UTC FinishedAt: 2026-09-12 13:58:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pwsl/series-workflow2pwsl-convert-artifact-3022569018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 13:58:58 +0000 UTC FinishedAt: 2026-09-12 14:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 13:58:58 +0000 UTC FinishedAt: 2026-09-12 14:19:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e2a1bc80-ffbc-47da-8f50-e021dcb42ac3,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-workflow2pwsl/series-workflow2pwsl-convert-artifact-3022569018/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": "fdecc4d3-9ec8-4dec-bdd6-494bf2fbcc48", "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-workflow2pwsl/series-workflow2pwsl-build-action-3999658984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 13:58:58 +0000 UTC FinishedAt: 2026-09-12 14:18:38 +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:*e2a1bc80-ffbc-47da-8f50-e021dcb42ac3,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-workflow2pwsl/series-workflow2pwsl-convert-artifact-3022569018/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": "fdecc4d3-9ec8-4dec-bdd6-494bf2fbcc48", "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-workflow2pwsl/series-workflow2pwsl-build-action-3999658984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 14:19:00 +0000 UTC FinishedAt: 2026-09-12 14:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 14:19:00 +0000 UTC FinishedAt: 2026-09-12 14:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 14:19:00 +0000 UTC FinishedAt: 2026-09-12 14:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 14:19:00 +0000 UTC FinishedAt: 2026-09-12 14:19:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pwsl/series-workflow2pwsl-convert-artifact-3994246293/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 14:19:10 +0000 UTC FinishedAt: 2026-09-12 14:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 14:19:10 +0000 UTC FinishedAt: 2026-09-12 14:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fdecc4d3-9ec8-4dec-bdd6-494bf2fbcc48,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-workflow2pwsl/series-workflow2pwsl-build-action-3999658984/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-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 14:20:59 +0000 UTC FinishedAt: 2026-09-12 14:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 14:20:59 +0000 UTC FinishedAt: 2026-09-12 14:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 14:20:59 +0000 UTC FinishedAt: 2026-09-12 14:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 14:20:59 +0000 UTC FinishedAt: 2026-09-12 14:41:16 +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:*e2a1bc80-ffbc-47da-8f50-e021dcb42ac3,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-workflow2pwsl/series-workflow2pwsl-convert-artifact-3994246293/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": "0825c45b-096b-4dc3-bf80-80b414c7c061", "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-workflow2pwsl/series-workflow2pwsl-build-action-4108452641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 14:20:59 +0000 UTC FinishedAt: 2026-09-12 14:41:06 +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:*e2a1bc80-ffbc-47da-8f50-e021dcb42ac3,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-workflow2pwsl/series-workflow2pwsl-convert-artifact-3994246293/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": "0825c45b-096b-4dc3-bf80-80b414c7c061", "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-workflow2pwsl/series-workflow2pwsl-build-action-4108452641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 14:41:16 +0000 UTC FinishedAt: 2026-09-12 14:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 14:41:16 +0000 UTC FinishedAt: 2026-09-12 14:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 14:41:16 +0000 UTC FinishedAt: 2026-09-12 14:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 14:41:16 +0000 UTC FinishedAt: 2026-09-12 14:42:59 +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:*0825c45b-096b-4dc3-bf80-80b414c7c061,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-workflow2pwsl/series-workflow2pwsl-build-action-4108452641/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-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 17:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 17:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"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:*fdecc4d3-9ec8-4dec-bdd6-494bf2fbcc48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0825c45b-096b-4dc3-bf80-80b414c7c061,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-workflow2pwsl/series-workflow2pwsl-build-action-3999658984/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-workflow2pwsl/series-workflow2pwsl-build-action-4108452641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 14:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 14:43:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"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-workflow2pwsl/series-workflow2pwsl-convert-artifact-3733219194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 14:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 14:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 14:43:09 +0000 UTC FinishedAt: 2026-09-12 14:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 14:43:19 +0000 UTC FinishedAt: 2026-09-12 17:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pwsl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fill_ifinfo","br_getlink","rtnl_bridge_getlink","ndo_dflt_bridge_getlink","rtnl_bridge_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"966b795d-2cd2-4228-8cf2-7d670f9480fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 14:43:19 +0000 UTC FinishedAt: 2026-09-12 17:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fdecc4d3-9ec8-4dec-bdd6-494bf2fbcc48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0825c45b-096b-4dc3-bf80-80b414c7c061,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-workflow2pwsl/series-workflow2pwsl-build-action-3999658984/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-workflow2pwsl/series-workflow2pwsl-build-action-4108452641/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-workflow2pwsl/series-workflow2pwsl-convert-artifact-3733219194/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,}