Name: series-workflowb4488 Phase: Succeeded StartedAt: 2026-08-13 15:40:25 +0000 UTC FinishedAt: 2026-08-13 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[0] Phase: Succeeded StartedAt: 2026-08-13 15:40:25 +0000 UTC FinishedAt: 2026-08-13 16:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 15:40:25 +0000 UTC FinishedAt: 2026-08-13 16:29:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ICE" ], "series_id": "267d7a43-85c8-4a67-a8e2-f03f55792d5b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dpll_pin_register", "dpll_nl_pin_get_doit", "dpll_nl_pin_get_dumpit", "dpll_nl_pin_set_doit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O0lDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfcGluX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kb2l0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kdW1waXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fc2V0X2RvaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGNoZWNrcyBpbiB0aGUgRFBMTCBzdWJzeXN0ZW0uIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGBkcGxsX2RldmljZV9vcHMoKWAgYW5kIGBkcGxsX3ByaXYoKWAgY291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIERQTEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBsaXN0IHdhcyBlbXB0eSwgbGVhZGluZyB0byBhIGtlcm5lbCBjcmFzaC4gVGhlIHBhdGNoIGFkZHMgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgY2hlY2tzIHRvIGVuc3VyZSB0aGUgZGV2aWNlIGlzIGZ1bGx5IHJlZ2lzdGVyZWQgYmVmb3JlIGFjY2Vzc2luZyBpdHMgb3BlcmF0aW9ucyBvciBwcm9wZXJ0aWVzIHZpYSBuZXRsaW5rIG9yIHBpbiByZWdpc3RyYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmODc2MmFjNDczMTMwZjQ5MmM2NjVhMTJiNDBlODJiYmNmZmZlZTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTY6MjY6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jIGIvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXG5pbmRleCA0M2Q1MWQ5NDJlYWRkLi5hMzIwZWViODI5YWQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcbkBAIC04NzYsMTkgJiM0Mzs4NzYsMjUgQEAgaW50XG4gZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRldl9vcHM7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKFdBUk5fT04oIW9wcykgfHxcbiBcdCAgICBXQVJOX09OKCFvcHMtXHUwMDNlc3RhdGVfb25fZHBsbF9nZXQpIHx8XG4gXHQgICAgV0FSTl9PTighb3BzLVx1MDAzZWRpcmVjdGlvbl9nZXQpIHx8XG4tXHQgICAgV0FSTl9PTihvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3JfZ2V0IHx8XG4tXHRcdCAgICAgIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkgfHxcbiBcdCAgICBXQVJOX09OKG9wcy1cdTAwM2VzdXBwb3J0ZWRfZmZvIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWZmb19nZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbiBcbiYjNDM7XHRkZXZfb3BzID0gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO1xuJiM0MztcdGlmIChXQVJOX09OKG9wcy1cdTAwM2VtZWFzdXJlZF9mcmVxX2dldCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoIWRldl9vcHMgfHwgIWRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxuJiM0MztcdFx0ICAgICAhZGV2X29wcy1cdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBGb3IgcGlucyBpZGVudGlmaWVkIHZpYSBmaXJtd2FyZSAocGluLVx1MDAzZWZ3bm9kZSksIGFsbG93IHJlZ2lzdHJhdGlvblxuIFx0ICogZXZlbiBpZiB0aGUgcGluJiMzOTtzIChtb2R1bGUsIGNsb2NrX2lkKSBkaWZmZXJzIGZyb20gdGhlIHRhcmdldCBEUExMLlxuQEAgLTEwODEsMTIgJiM0MzsxMDg3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fcmVmX3N5bmNfcGFpcl9hZGQpO1xuIHN0YXRpYyBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpcbiBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuIHtcbi1cdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbi1cbi1cdHJlZyA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKVx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7XG4tXHRXQVJOX09OKCFyZWcpO1xuLVx0cmV0dXJuIHJlZztcbiYjNDM7XHRyZXR1cm4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKChzdHJ1Y3QgbGlzdF9oZWFkICopXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpO1xuIH1cbiBcbiB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuQEAgLTEwOTQsNiAmIzQzOzEwOTYsOCBAQCB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuIFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuIFxuIFx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpO1xuJiM0MztcdGlmICghcmVnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZXByaXY7XG4gfVxuIFxuQEAgLTExMDIsNiAmIzQzOzExMDYsOCBAQCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpkcGxsX2RldmljZV9vcHMoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuIFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuIFxuIFx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpO1xuJiM0MztcdGlmICghcmVnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZW9wcztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi45ZTU1NzQ1ZTMzZTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC02Niw2ICYjNDM7NjYsMjIgQEAgc3RhdGljIGJvb2wgZHBsbF9waW5fYXZhaWxhYmxlKHN0cnVjdCBkcGxsX3BpbiAqcGluKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYoc3RydWN0IGRwbGxfcGluICpwaW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpXG4mIzQzO1x0XHRpZiAoZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4mIzQzO1x0XHRcdHJldHVybiByZWY7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlXG4gICogQG1zZzogcG9pbnRlciB0byBza19idWZmIG1lc3NhZ2UgdG8gYXR0YWNoIGEgcGluIGhhbmRsZVxuQEAgLTY1Niw2ICYjNDM7NjcyLDggQEAgZHBsbF9tc2dfYWRkX3Bpbl9kcGxscyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGludCByZXQ7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpbmRleCwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFKTtcbiBcdFx0aWYgKCFhdHRyKVxuIFx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5AQCAtNzAwLDkgJiM0Mzs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4mIzQzO1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0cmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTtcbiBcdGlmICghcmVmKVxuLVx0XHRyZWYgPSBkcGxsX3hhX3JlZl9kcGxsX2ZpcnN0KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuLVx0QVNTRVJUX05PVF9OVUxMKHJlZik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJldCA9IGRwbGxfbXNnX2FkZF9waW5faGFuZGxlKG1zZywgcGluKTtcbiBcdGlmIChyZXQpXG5AQCAtMTA5MSw2ICYjNDM7MTExMCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0fVxuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0IHx8ICFvcHMtXHUwMDNlZnJlcXVlbmN5X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xMTAxLDcgJiM0MzsxMTIyLDcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdH1cbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbiYjNDM7XHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xMTE3LDYgJiM0MzsxMTM4LDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTEzOCw2ICYjNDM7MTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTExNjMsNiAmIzQzOzExODgsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpbnQgcmV0O1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cdTAwM2Vlc3luY19nZXQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlbW9kdWxlID09IHBpbi1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG5AQCAtMTE3Myw3ICYjNDM7MTIwMCw3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuJiM0MztcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTExOTksNiAmIzQzOzEyMjYsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbiBcdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbiBcbiYjNDM7XHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyMjQsNiAmIzQzOzEyNTMsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI2Miw3ICYjNDM7MTI5Myw3IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4mIzQzO1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTI4Myw2ICYjNDM7MTMxNCw4IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpXG4gXHRcdHJldHVybiAwO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMzA3LDYgJiM0MzsxMzQwLDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VyZWZfc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTUwMCw2ICYjNDM7MTUzNSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0fVxuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xNTA5LDcgJiM0MzsxNTQ2LDcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdH1cbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbiYjNDM7XHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xNTI2LDYgJiM0MzsxNTYzLDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTU1MCw2ICYjNDM7MTU4OSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE1ODEsNyAmIzQzOzE2MjIsNyBAQCBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGFyZW50X25lc3QsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cGRwbGxfaWR4ID0gbmxhX2dldF91MzIodGJbRFBMTF9BX1BJTl9QQVJFTlRfSURdKTtcbi1cdGRwbGwgPSB4YV9sb2FkKFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBwZHBsbF9pZHgpO1xuJiM0MztcdGRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTtcbiBcdGlmICghZHBsbCkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3BhcmVudCBkZXZpY2Ugbm90IGZvdW5kXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTg3Myw2ICYjNDM7MTkxNCwxMCBAQCBpbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKHNrYiwgcGluLCBjYi1cdTAwM2VleHRhY2spO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xuJiM0MztcdFx0XHRpZiAocmV0ID09IC1FTk9ERVYpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcGxsX3Bpbl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX3NldF9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBpbiB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIChlLmcuLCBgZHBsbF9waW5fZnJlcV9zZXRgLCBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgKSB0byBza2lwIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhbHNvIHVwZGF0ZXMgYGRwbGxfcGluX3JlZ2lzdGVyYCB0byB2YWxpZGF0ZSBgZGV2X29wc2AgYmVmb3JlIHVzZSwgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERQTEwgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4NzYyYWM0NzMxMzBmNDkyYzY2NWExMmI0MGU4MmJiY2ZmZmVlMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNjoyNjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYwppbmRleCA0M2Q1MWQ5NDJlYWRkLi5hMzIwZWViODI5YWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jCkBAIC04NzYsMTkgJiM0Mzs4NzYsMjUgQEAgaW50CiBkcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCQkgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdikKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZGV2X29wczsKIAlpbnQgcmV0OwogCiAJaWYgKFdBUk5fT04oIW9wcykgfHwKIAkgICAgV0FSTl9PTighb3BzLSZndDtzdGF0ZV9vbl9kcGxsX2dldCkgfHwKIAkgICAgV0FSTl9PTighb3BzLSZndDtkaXJlY3Rpb25fZ2V0KSB8fAotCSAgICBXQVJOX09OKG9wcy0mZ3Q7bWVhc3VyZWRfZnJlcV9nZXQgJmFtcDsmYW1wOwotCQkgICAgKCFkcGxsX2RldmljZV9vcHMoZHBsbCktJmd0O2ZyZXFfbW9uaXRvcl9nZXQgfHwKLQkJICAgICAhZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLSZndDtmcmVxX21vbml0b3Jfc2V0KSkgfHwKIAkgICAgV0FSTl9PTihvcHMtJmd0O3N1cHBvcnRlZF9mZm8gJmFtcDsmYW1wOyAhb3BzLSZndDtmZm9fZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZhbXA7ZHBsbF9sb2NrKTsKIAomIzQzOwlkZXZfb3BzID0gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpOwomIzQzOwlpZiAoV0FSTl9PTihvcHMtJmd0O21lYXN1cmVkX2ZyZXFfZ2V0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWRldl9vcHMgfHwgIWRldl9vcHMtJmd0O2ZyZXFfbW9uaXRvcl9nZXQgfHwKJiM0MzsJCSAgICAgIWRldl9vcHMtJmd0O2ZyZXFfbW9uaXRvcl9zZXQpKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogRm9yIHBpbnMgaWRlbnRpZmllZCB2aWEgZmlybXdhcmUgKHBpbi0mZ3Q7Zndub2RlKSwgYWxsb3cgcmVnaXN0cmF0aW9uCiAJICogZXZlbiBpZiB0aGUgcGluJiMzOTtzIChtb2R1bGUsIGNsb2NrX2lkKSBkaWZmZXJzIGZyb20gdGhlIHRhcmdldCBEUExMLgpAQCAtMTA4MSwxMiAmIzQzOzEwODcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWZfc3luY19wYWlyX2FkZCk7CiBzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqCiBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKQogewotCXN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZzsKLQotCXJlZyA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKSZhbXA7ZHBsbC0mZ3Q7cmVnaXN0cmF0aW9uX2xpc3QsCi0JCQkJICAgICAgIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpOwotCVdBUk5fT04oIXJlZyk7Ci0JcmV0dXJuIHJlZzsKJiM0MzsJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKSZhbXA7ZHBsbC0mZ3Q7cmVnaXN0cmF0aW9uX2xpc3QsCiYjNDM7CQkJCQlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTsKIH0KIAogdm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKQEAgLTEwOTQsNiAmIzQzOzEwOTYsOCBAQCB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKQogCXN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZzsKIAogCXJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTsKJiM0MzsJaWYgKCFyZWcpCiYjNDM7CQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gcmVnLSZndDtwcml2OwogfQogCkBAIC0xMTAyLDYgJiM0MzsxMTA2LDggQEAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZHBsbF9kZXZpY2Vfb3BzKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKIAlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7CiAKIAlyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7CiYjNDM7CWlmICghcmVnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHJlZy0mZ3Q7b3BzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKaW5kZXggYWZiMzFjMDA0MDM4Mi4uOWU1NTc0NWUzM2U0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwpAQCAtNjYsNiAmIzQzOzY2LDIyIEBAIHN0YXRpYyBib29sIGRwbGxfcGluX2F2YWlsYWJsZShzdHJ1Y3QgZHBsbF9waW4gKnBpbikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkcGxsX2RldmljZV9yZWdpc3RlcmVkKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBkcGxsX2RldmljZV9vcHMoZHBsbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZHBsbF9waW5fcmVmICpkcGxsX3Bpbl9maXJzdF9yZWdpc3RlcmVkX3JlZihzdHJ1Y3QgZHBsbF9waW4gKnBpbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpCiYjNDM7CQlpZiAoZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCXJldHVybiByZWY7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKIC8qKgogICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlCiAgKiBAbXNnOiBwb2ludGVyIHRvIHNrX2J1ZmYgbWVzc2FnZSB0byBhdHRhY2ggYSBwaW4gaGFuZGxlCkBAIC02NTYsNiAmIzQzOzY3Miw4IEBAIGRwbGxfbXNnX2FkZF9waW5fZHBsbHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sCiAJaW50IHJldDsKIAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGluZGV4LCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0UpOwogCQlpZiAoIWF0dHIpCiAJCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtNzAwLDkgJiM0Mzs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sCiAJaW50IHJldDsKIAogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJcmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTsKIAlpZiAoIXJlZikKLQkJcmVmID0gZHBsbF94YV9yZWZfZHBsbF9maXJzdCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzKTsKLQlBU1NFUlRfTk9UX05VTEwocmVmKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwogCiAJcmV0ID0gZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUobXNnLCBwaW4pOwogCWlmIChyZXQpCkBAIC0xMDkxLDYgJiM0MzsxMTEwLDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJfQogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICgoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCB8fCAhb3BzLSZndDtmcmVxdWVuY3lfZ2V0KSAmYW1wOyZhbXA7CiAJCSAgICByZWYtJmd0O2RwbGwtJmd0O21vZHVsZSA9PSBwaW4tJmd0O21vZHVsZSAmYW1wOyZhbXA7CkBAIC0xMTAxLDcgJiM0MzsxMTIyLDcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCX0KIAl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7Ci0JaWYgKCFyZWYpIHsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMTE3LDYgJiM0MzsxMTM4LDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCXJldHVybiAwOwogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtmcmVxdWVuY3lfc2V0KQogCQkJY29udGludWU7CkBAIC0xMTM4LDYgJiM0MzsxMTYxLDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtmcmVxdWVuY3lfc2V0KQogCQkJY29udGludWU7CkBAIC0xMTYzLDYgJiM0MzsxMTg4LDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCWludCByZXQ7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCghb3BzLSZndDtlc3luY19zZXQgfHwgIW9wcy0mZ3Q7ZXN5bmNfZ2V0KSAmYW1wOyZhbXA7CiAJCSAgICByZWYtJmd0O2RwbGwtJmd0O21vZHVsZSA9PSBwaW4tJmd0O21vZHVsZSAmYW1wOyZhbXA7CkBAIC0xMTczLDcgJiM0MzsxMjAwLDcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCQl9CiAJfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwotCWlmICghcmVmKSB7CiYjNDM7CWlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTE5OSw2ICYjNDM7MTIyNiw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKIAkJdm9pZCAqcGluX2RwbGxfcHJpdjsKIAomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xMjI0LDYgJiM0MzsxMjUzLDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtlc3luY19zZXQpCiAJCQljb250aW51ZTsKQEAgLTEyNjIsNyAmIzQzOzEyOTMsNyBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKLQlpZiAoIXJlZikgewomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTEyODMsNiAmIzQzOzEzMTQsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJaWYgKHN0YXRlID09IG9sZF9zdGF0ZSkKIAkJcmV0dXJuIDA7CiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtyZWZfc3luY19zZXQpCiAJCQljb250aW51ZTsKQEAgLTEzMDcsNiAmIzQzOzEzNDAsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtyZWZfc3luY19zZXQpCiAJCQljb250aW51ZTsKQEAgLTE1MDAsNiAmIzQzOzE1MzUsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAl9CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtJmd0O3BoYXNlX2FkanVzdF9nZXQpICZhbXA7JmFtcDsKIAkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7bW9kdWxlID09IHBpbi0mZ3Q7bW9kdWxlICZhbXA7JmFtcDsKQEAgLTE1MDksNyAmIzQzOzE1NDYsNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAkJfQogCX0KIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKLQlpZiAoIXJlZikgewomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE1MjYsNiAmIzQzOzE1NjMsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAkJcmV0dXJuIDA7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQpCiAJCQljb250aW51ZTsKQEAgLTE1NTAsNiAmIzQzOzE1ODksOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKIAkJaWYgKHJlZiA9PSBmYWlsZWQpCiAJCQlicmVhazsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQpCiAJCQljb250aW51ZTsKQEAgLTE1ODEsNyAmIzQzOzE2MjIsNyBAQCBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGFyZW50X25lc3QsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwZHBsbF9pZHggPSBubGFfZ2V0X3UzMih0YltEUExMX0FfUElOX1BBUkVOVF9JRF0pOwotCWRwbGwgPSB4YV9sb2FkKCZhbXA7ZHBsbF9kZXZpY2VfeGEsIHBkcGxsX2lkeCk7CiYjNDM7CWRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTsKIAlpZiAoIWRwbGwpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BhcmVudCBkZXZpY2Ugbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4NzMsNiAmIzQzOzE5MTQsMTAgQEAgaW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShza2IsIHBpbiwgY2ItJmd0O2V4dGFjayk7CiAJCWlmIChyZXQpIHsKIAkJCWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKJiM0MzsJCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAkJZ2VubG1zZ19lbmQoc2tiLCBoZHIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERQTEwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY2AgYW5kIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgYXR0ZW50aW9uLgoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKWAsIGRlZmluZWQgYXMgbm9uLU5VTEwgYGRwbGxfZGV2aWNlX29wcyhkcGxsKWAuIEl0IGFsc28gYWx0ZXJzIGBkcGxsX2RldmljZV9vcHNgIGFuZCBgZHBsbF9wcml2YCB0byByZXR1cm4gYE5VTExgIGlmIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHJldHVybnMgYE5VTExgLiBGdXJ0aGVyLCBgZHBsbF9jb3JlLmNgIG5vdyB2YWxpZGF0ZXMgYGRldl9vcHNgIGJlZm9yZSBpdCBpcyB1c2VkLiBBbmQgdGhlbiBpbiBgZHBsbF9uZXRsaW5rLmNgLCBpdCBzZWVtcyB0byBiZSBza2lwcGluZyB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzIGluIGEgZmV3IHBsYWNlcyBsaWtlIHRob3NlIGBzZXRgIGZ1bmN0aW9ucy4gQmFzaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBndWFyZGluZyBvcGVyYXRpb25zIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGRvbmUsIGlmIHRoZSBEUExMIGRldmljZSBpc24mIzM5O3QgcHJvcGVybHkgcmVnaXN0ZXJlZC4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIHRoZXJlIGEgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB2aWEgbmV0bGluaz8gWWVzLCBgZHBsbF9uZXRsaW5rLmNgIGlzIGEgbmV0bGluayBmYW1pbHkuIFRoYXQmIzM5O3MgZ29vZDsgbmV0bGluayBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuIFN5emthbGxlciwgaW4gcGFydGljdWxhciwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoYXQuIE5leHQsIGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL2RwbGwvS2NvbmZpZ2AgZm9yIHRoZSBEUExMIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRFBMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9LY29uZmlnPTY9bWVudSBcJiMzNDtEUExMIGRldmljZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2RwbGwvS2NvbmZpZy03LVxuZHJpdmVycy9kcGxsL0tjb25maWc6ODpjb25maWcgRFBMTFxuZHJpdmVycy9kcGxsL0tjb25maWctOS1cdGJvb2xcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEwLVxuZHJpdmVycy9kcGxsL0tjb25maWc6MTE6Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEyLVx0Ym9vbCBcJiMzNDtEUExMIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYSBDb25maWd1cmF0aW9uIEZsYWcqKgoKUmlnaHQsIGEgYGNvbmZpZyBEUExMYCBzZXR0aW5nIGp1c3QgYXBwZWFyZWQgaW4gdGhlIGNvZGUsIGFuZCBpdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGJvb2xlYW4gd2l0aG91dCBhbnkgYWNjb21wYW55aW5nIHByb21wdCBvciBkZWZhdWx0IHZhbHVlLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgRFBMTCBkcml2ZXIuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgZGVmaW5lZCB0aGVyZSwgYW5kIGhvcGVmdWxseSB0aGUgY29udGV4dCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiAqd2h5KiBpdCYjMzk7cyBjb25maWd1cmVkIHRoZSB3YXkgaXQgaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGdlbmVyYWxseSwgaG93IHRoaXMgYGNvbmZpZyBEUExMYCBmbGFnIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZS4gS25vd2luZyB0aGF0IHRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCwgaXMgZ29pbmcgdG8gYmUgaGVscGZ1bC4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEdlbmVyaWMgRFBMTCBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtEUExMIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIERQTExcbiAgIDk6XHRcdGJvb2xcbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgRFBMTF9SRUZDTlRfVFJBQ0tFUlxuICAxMjpcdFx0Ym9vbCBcJiMzNDtEUExMIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZ1wmIzM0O1xuICAxMzpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcdTAwMjZcdTAwMjYgRFBMTFxuICAxNDpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIEVuYWJsZSByZWZlcmVuY2UgY291bnQgdHJhY2tpbmcgZm9yIERQTEwgZGV2aWNlcyBhbmQgcGlucy5cbiAgMTc6XHRcdCAgVGhpcyBoZWxwcyBkZWJ1Z2dpbmcgcmVmZXJlbmNlIGxlYWtzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzXG4gIDE4Olx0XHQgIGJ5IHJlY29yZGluZyBzdGFjayB0cmFjZXMgZm9yIGVhY2ggZ2V0L3B1dCBvcGVyYXRpb24uXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMzAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRQTEwgRHJpdmVyIFNlbGVjdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGUgRFBMTCAoRGF2aXPigJNQdXRuYW3igJNMb2dlbWFubuKAk0xvdmVsYW5kKSBhbGdvcml0aG0gaGFzIGJlZW4gY2hvc2VuIGJ5IHNvbWUgb3RoZXIgZHJpdmVyIGluIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBmYWN0b3IgaGVyZT8gSXMgaXQgYSBzcGVjaWZpYyBwcm9ibGVtIHR5cGUsIGEgc2l6ZSB0aHJlc2hvbGQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHRoYXQmIzM5O3MgZGljdGF0aW5nIHRoaXMgc2VsZWN0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGV4ZWN1dGlvbiBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGRlY2lzaW9uIGFuZCB0aGUgcmF0aW9uYWxlIGZvciB1c2luZyBEUExMIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aG8mIzM5O3MgY2FsbGluZyB0aGUgc2hvdHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRFBMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzo2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNy1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cdHNlbGVjdCBQTERNRldcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzA2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTIwMz1jb25maWcgTUxYNV9EUExMXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNTFg1X0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjIwNjpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDctXHRoZWxwXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZz0yMTA9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL3B0cC9LY29uZmlnOjIyMDpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzUyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFpMMzA3M1ggRFBMTCBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgYFpMMzA3M1hgIG1lbnRpb25lZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhY3RpbmcgYXMgYSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHBsYWNlIHdoZXJlIHRoZSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaW50ZW5kZWQgdXNlLCBzaG91bGQgYmUgY2xlYXJseSBkb2N1bWVudGVkLiBJIGV4cGVjdCB0byBmaW5kIGNvbmZpcm1hdGlvbiB0aGVyZSBhYm91dCBpdHMgRFBMTCBuYXR1cmUgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhhdCBwYXJ0aWN1bGFyIGRldmljZS4gVGltZSB0byB0YWtlIGEgbG9vayBhbmQgY29uZmlybSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFpMMzA3M1hcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVFxuICAgNjpcdFx0c2VsZWN0IERQTExcbiAgIDc6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAgODpcdFx0c2VsZWN0IFJFR01BUFxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcbiAgMTE6XHRcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxuICAxMjpcdFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAxNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBaTDMwNzNYX0kyQ1xuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLY29uZmlnIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFpMMzA3M1hgIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBjb25kaXRpb25hbCwgb25seSBzaG93aW5nIHVwIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQuIEJ1dCB3YWl0LCBpcyBpdCBqdXN0IGEgcGxhaW4gYHNlbGVjdGAgc3RhdGVtZW50IG9yIGEgYHRyaXN0YXRlYD8gQWgsIGl0IGxvb2tzIGxpa2UgYSBgdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUYC4gU28sIHRoYXQgbWVhbnMgdGhpcyBlbnRpcmUgc2VjdGlvbiAqb25seSogYmVjb21lcyB2aXNpYmxlIGluIHRoZSBtZW51IGlmIGBDT01QSUxFX1RFU1RgIGlzIHRydWUuIElmIG5vdCwgaXQmIzM5O3MgaGlkZGVuIGZyb20gdmlldy4gV2hpY2ggYWxzbyBtZWFucyBpdCYjMzk7cyBzZWxlY3RhYmxlIGFzICYjMzQ7eSYjMzQ7LCAmIzM0O20mIzM0OyBvciAmIzM0O24mIzM0OyBpZiB0aGUgdmlzaWJpbGl0eSBpcyB0cnVlLgoKQnV0IGhvbGQgb24sIHRoYXQgZG9lc24mIzM5O3QgdXN1YWxseSBsb29rIGxpa2UgbXkgb3RoZXIgS2NvbmZpZyBvcHRpb25zLiBUeXBpY2FsbHksIEkmIzM5O2Qgc2VlIHNvbWV0aGluZyBsaWtlIGBkZXBlbmRzIG9uIEkyQ2Agb3Igc2ltaWxhciB0byBnYXRlIHRoZSBvcHRpb24gYmFzZWQgb24gdW5kZXJseWluZyBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgdHlwaWNhbCBwYXR0ZXJuIHVzZWQgaW4gdGhlIFBUUCBkcml2ZXIsIHNvIGxldCBtZSBxdWlja2x5IG5hdmlnYXRlIHRvIGBkcml2ZXJzL3B0cC9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIHNvbWV0aGluZyBsaWtlIGBQVFBfMTU4OF9DTE9DS19PQ1BgLiBKdXN0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIDIxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4gMjEyOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gMjEzOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgUENJXG4gMjE0Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTVREXG4gMjE1Olx0XHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXG4gMjE2Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gMjE3Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAyMTg6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDIxOTpcdFx0c2VsZWN0IENSQzE2XG4gMjIwOlx0XHRzZWxlY3QgRFBMTFxuIDIyMTpcdFx0aGVscFxuIDIyMjpcdFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cbiAyMjM6XHRcbiAyMjQ6XHRcdCAgVGhlIE9wZW5Db21wdXRlIHRpbWUgY2FyZCBpcyBhbiBhdG9taWMgY2xvY2sgYWxvbmcgd2l0aFxuIDIyNTpcdFx0ICBhIEdQUyByZWNlaXZlciB0aGF0IHByb3ZpZGVzIGEgR3JhbmRtYXN0ZXIgY2xvY2sgc291cmNlXG4gMjI2Olx0XHQgIGZvciBhIFBUUCBlbmFibGVkIG5ldHdvcmsuXG4gMjI3Olx0XG4gMjI4Olx0XHQgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudGltaW5nY2FyZC5jb20vXG4gMjI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRFBMTCBEcml2ZXIgU2VsZWN0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGFsbCB0aGUgcG9zc2libGUgcGF0aHMgdG8gc2VsZWN0IGEgRFBMTCBkcml2ZXIuIExldCBtZSBzZWUuLi4gSSYjMzk7dmUgZ290IHRoZXNlIGRyaXZlcnMgaWRlbnRpZmllZDogYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBaTDMwNzNYYC4gUmlnaHQsIHRoZSBmaXJzdCB0d28sIGBJQ0VgIGFuZCBgTUxYNV9EUExMYCwgc2VlbSBzdHJhaWdodGZvcndhcmQgZm9yIHNwZWNpZmljIGhhcmR3YXJlLgoKSG9sZCBvbiwgSSBzZWUgdGhhdCBlbmFibGluZyBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCAqYWxzbyogZW5hYmxlcyBgRFBMTGAhIEludGVyZXN0aW5nLiBDYW4gSSBnZXQgYXdheSB3aXRoIGp1c3QgZGlyZWN0bHkgZW5hYmxpbmcgYERQTExgPyBOb3BlLCBpdCBsb29rcyBsaWtlIGBEUExMYCBpcyBqdXN0IGEgYm9vbGVhbiwgbm8gY29uZmlnIG9wdGlvbiwgc28gbm8gZGlyZWN0IHNlbGVjdGlvbi4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIGBQVFBfMTU4OF9DTE9DS19PQ1BgIHRoZW4uIEhtbSwgdGhhdCBvbmUgaGFzIGEgd2hvbGUgc2xldyBvZiBkZXBlbmRlbmNpZXM6IGBQQ0lgLCBgSTJDYCwgYE1URGAsIGBTRVJJQUxfODI1MGAsIGFuZCBgQ09NTU9OX0NMS2AuCgpOb3csIHdoYXQgYWJvdXQgYFpMMzA3M1hgPyBJdCByZXF1aXJlcyBgTkVUYC4gQnV0IHdhaXQgYSBzZWNvbmQsIHRoZXJlJiMzOTtzIHRoYXQgYHRyaXN0YXRlYCBkZWNsYXJhdGlvbiB3aXRoIGFuIGBpZiBDT01QSUxFX1RFU1RgLiBUaGF0JiMzOTtzIHdlaXJkLiBEb2VzIHRoYXQgbWVhbiBpdCYjMzk7cyBvbmx5IHNlbGVjdGFibGUgaWYgSSYjMzk7dmUgZW5hYmxlZCBgQ09NUElMRV9URVNUYD8gTm8sIG5vLCBgaWYgQ09NUElMRV9URVNUYCBqdXN0IG1lYW5zIHRoZSAqcHJvbXB0KiBpcyB2aXNpYmxlIG9ubHkgd2hlbiBgQ09NUElMRV9URVNUYCBpcyB0cnVlLiBJZiBgQ09NUElMRV9URVNUYCBpcyBmYWxzZSwgaXQmIzM5O3Mgbm90IHZpc2libGUsIGJ1dCBpdCB3b24mIzM5O3QgYmUgc2VsZWN0YWJsZSAqYW55d2F5Ki4gQnV0IHdoeSB3b3VsZG4mIzM5O3QgaXQgdXNlIHNvbWV0aGluZyBsaWtlIGBkZXBlbmRzIG9uIENPTVBJTEVfVEVTVCB8fCAuLi5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFpMMzA3M1hcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVFxuICAgNjpcdFx0c2VsZWN0IERQTExcbiAgIDc6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAgODpcdFx0c2VsZWN0IFJFR01BUFxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcbiAgMTE6XHRcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxuICAxMjpcdFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAxNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBaTDMwNzNYX0kyQ1xuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiAgMjE6XHRcdHNlbGVjdCBaTDMwNzNYXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcbiAgMjQ6XHRcdCAgZGV2aWNlcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI3Olx0XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgWkwzMDczWF9TUElcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyOTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBEUExMIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgWkwzMDczWF9JMkNgLiBJdCAqc2VsZWN0cyogYFpMMzA3M1hgLCB3aGljaCwgaW4gdHVybiwgc2VsZWN0cyB0aGUgYERQTExgIGZlYXR1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGNhc2NhZGluZyBkb3duIHRoZSBsaW5lLiBJIHNlZSB0aGF0IGBaTDMwNzNYX0kyQ2AgcmVsaWVzIG9uIGJvdGggYEkyQ2AgYW5kIGBORVRgIGJlaW5nIGVuYWJsZWQuIFNvLCB0aGUgb2J2aW91cyBhcHByb2FjaCBpcyB0byBzaW1wbHkgZW5hYmxlIGBaTDMwNzNYX0kyQ2AsIHdoaWNoIHNob3VsZCBnaXZlIHVzIHRoZSBgRFBMTGAgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgYWZ0ZXIuCgpCdXQsIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzOiBjYW4gd2UgYWN0dWFsbHkgKnVzZSogdGhlIGBEUExMYCBmcm9tIHVzZXJzcGFjZT8gV2UgbmVlZCB0aGF0IGxldmVsIG9mIGFjY2VzcyB0byBiZSB1c2VmdWwuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IG5ldGxpbmssIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBBaCwgeWVzISBgZHBsbF9uZXRsaW5rLmNgIGlzIHJpbmdpbmcgYSBiZWxsIC0gdGhhdCBzdWdnZXN0cyBpdCByZWdpc3RlcnMgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHdlIG5lZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIHBhdGggb2YgaW50ZXJhY3Rpb24gdG8gdXNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5sX3JlZ2lzdGVyX2ZhbWlseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTExODY9c3RhdGljIGludCBfX2luaXQgZHBsbF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExODktXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE5MDpcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmRwbGxfbmxfZmFtaWx5KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTkxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIERQTEwgS2VybmVsIE1vZHVsZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgZHBsbF9pbml0YCwgcmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIG9uZSB0aGF0IGhhbmRsZXMgcmVnaXN0ZXJpbmcgdGhlIG5ldGxpbmsgZmFtaWx5LCB5ZXMsIHRoYXQgc291bmRzIHJpZ2h0LiBHb29kLiBBbmQgc2luY2UgYERQTExgIGl0c2VsZiBpcyBqdXN0IGEgYm9vbGVhbiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXRzIHByZXNlbmNlIGluIHRoZSBrZXJuZWwgY29tZXMgZG93biB0byB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBzZWxlY3RlZCBkdXJpbmcgY29tcGlsYXRpb24g4oCTIGEgY2xhc3NpYyBjb25maWd1cmF0aW9uIGZsYWcuIEhtbSwgaG9sZCBvbiBhIHNlY29uZC4uLiBgZHBsbF9pbml0YCByaW5ncyBhIGJlbGwgYXMgYW4gYGluaXRjYWxsYC4gUmlnaHQsIG9mIGNvdXJzZSwgaXQgbWFrZXMgc2Vuc2UgaXQgd291bGQgYmUuIFRoYXQgd291bGQgYmUgaG93IGl0JiMzOTtzIGJyb3VnaHQgaW50byBhY3Rpb24uIE9rYXksIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXQgbWlnaHQgYmUgd29ydGggYSBxdWljayBsb29rIGF0IHRoZSBgZHJpdmVycy9kcGxsL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGF0IHNob3VsZCBoYXZlIGFsbCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIERQTEwgZHJpdmVycy5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0RQTEwpICAgICAgJiM0Mzs9IGRwbGwub1xuICAgNzpcdGRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX2NvcmUub1xuICAgODpcdGRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX25ldGxpbmsub1xuICAgOTpcdGRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX25sLm9cbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgRFBMTCBOZXRsaW5rIEludGVyZmFjZSoqCgpPa2F5LCBzbyBgQ09ORklHX0RQTExgIGVuYWJsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBkcGxsX2NvcmUub2AgYW5kIGBkcGxsX25ldGxpbmsub2AuIFRoaXMgcGF0Y2ggdG91Y2hlcyBib3RoIG9mIHRob3NlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBkcGxsX2NvcmUuY2AgYW5kIGBkcGxsX25ldGxpbmsuY2AuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBjbHVzdGVyZWQgYXJvdW5kIGBkcGxsX3Bpbl9yZWdpc3RlcmAsIGBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3RgLCBgZHBsbF9wcml2YCwgYGRwbGxfZGV2aWNlX29wc2AsIGFuZCB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIHdpdGhpbiBgZHBsbF9uZXRsaW5rLmNgLgoKQWhhLCB0aG9zZSBuZXRsaW5rIGNhbGxiYWNrcyBhcmUgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzLCBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aGVyZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzIHdlcmUgYmVpbmcgYWNjZXNzZWQsIGJ5IGFkZGluZyBhIGNoZWNrIHRvIHNraXAgdGhlbSAoaS5lLiwgd2hlbiBgZHBsbF9kZXZpY2Vfb3BzKGRwbGwpID09IE5VTExgKS4gVGhhdCBzb3VuZHMgbGlrZSBhIGJ1ZyBmaXgsIGFuZCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LiBJdCYjMzk7cyBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjYWxsYmFja3MgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgLCBgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXRgLCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLgoKTm93LCBiZWZvcmUgSSBkaWcgaW50byBjcmFmdGluZyBmdXp6aW5nIGhhcm5lc3NlcywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHRvIGVuc3VyZSBJJiMzOTttIHRhcmdldGluZyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAgaXMgdXAgZmlyc3QuLi4gYW5kIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9jbWRfcGluX2dldF9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTcxMj1zdGF0aWMgaW50XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NzEzOmRwbGxfY21kX3Bpbl9nZXRfb25lKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTcxNC1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTkxMD1kcGxsX3Bpbl9ldmVudF9zZW5kKGVudW0gZHBsbF9jbWQgZXZlbnQsIHN0cnVjdCBkcGxsX3BpbiAqcGluKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy05MjUtXHRcdGdvdG8gZXJyX2ZyZWVfbXNnO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjkyNjpcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBOVUxMKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy05MjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xODY1PWludCBkcGxsX25sX3Bpbl9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODgyLVx0fVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE4ODM6XHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgaW5mby1cdTAwM2VleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4ODQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE4OTM9aW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTEzLVx0XHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTkxNDpcdFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLVx1MDAzZWV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkxNS1cdFx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkNvbnNpZGVyaW5nIERQTEwgUGluIEFjY2VzcyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIERQTEwgcGluIGFjY2VzcyBmdW5jdGlvbnMuIEkgc2VlIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAgYW5kIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dhaXQgYSBtaW51dGUsIHRoYXQmIzM5O3Mgc3RhdGljLCBpc24mIzM5O3QgaXQ/JiMzNDsgQW5kIHRoYXQmIzM5O3MgdXN1YWxseSBhIHJlZCBmbGFnIGZvciBtZS4gV2UgZ2VuZXJhbGx5IHdhbnQgdG8gdXRpbGl6ZSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIGJldHRlciBmbGV4aWJpbGl0eSBhbmQgcmV1c2FiaWxpdHksIGZvciBlYXNpZXIgaW50ZWdyYXRpb24gaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBTbywgSSYjMzk7bSBnb2luZyB0byBzdGVlciBjbGVhciBvZiB0aGF0IG9uZSBpZiBhdCBhbGwgcG9zc2libGUuCgpOb3csIGxldCBtZSBjb21wYXJlIHRoYXQgdG8gYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLiBUaG9zZSBhcmUgKm5vbiotc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gVGhvc2UgYXJlIHRoZSBvbmVzIEkmIzM5O2xsIGJlIGxlYW5pbmcgdG93YXJkcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRob3NlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGNhbGxzLgoKVG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoZSBmcmVxdWVuY3kgaXMgc2V0LiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcGxsX3Bpbl9mcmVxX3NldGAgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSB0aGF0IG9uZSBwbGF5cyBuaWNlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfcGluX2ZyZXFfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMDk2PXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDk3OmRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwOTgtXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNjg0PWRwbGxfcGluX3NldF9mcm9tX25sYXR0cihzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTY5Mi1cdFx0Y2FzZSBEUExMX0FfUElOX0ZSRVFVRU5DWTpcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNjkzOlx0XHRcdHJldCA9IGRwbGxfcGluX2ZyZXFfc2V0KHBpbiwgYSwgaW5mby1cdTAwM2VleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2OTQtXHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipTdGF0aWMgRnVuY3Rpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgLiBTaW5jZSBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIHN0YXRpYywgSSBpbW1lZGlhdGVseSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdHMgY2FsbGluZyBmdW5jdGlvbiwgYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAsIGlzIGFsc28gZGVjbGFyZWQgc3RhdGljLiBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0aWMgZGVzaWduYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSByb3V0aW5lcyBmaXQgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgZGljdGF0ZXMgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVjbGFyYXRpb24uLi4ganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE2ODM9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE2ODQ6ZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2ODUte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xOTM0PWludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTM3LVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE5Mzg6XHRyZXR1cm4gZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyKHBpbiwgaW5mbyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRFBMTCBNb2R1bGUgVGhvdWdodHMqKgoKT2theSwgc28gYGRwbGxfbmxfcGluX3NldF9kb2l0YCBpcyB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBwaW4tc2V0dGluZyBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgY29uZmlndXJhdGlvbnMgYXJlIG1hZGUuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGUgZmxvdy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgZmV3IGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHBpbiBzZXR0aW5nczogYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgLCBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGAsIGFuZCBgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXRgLiBNeSBodW5jaCBpcyB0aGF0IHRoZXkmIzM5O3JlIGFsbCBjYWxsZWQgZnJvbSB3aXRoaW4gYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCBgbmxhdHRyYCBpcyB0aGUgTmV0bGluayBhdHRyaWJ1dGUgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGxpa2VseSBob3cgdGhlIGRyaXZlciBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gc2V0IHVwIHRob3NlIHBpbnMgZnJvbSB0aGUgYXBwbGljYXRpb24gbGF5ZXIuCgpBbmQsIG9mIGNvdXJzZSwgdG8gY29tcGxldGUgdGhlIHBpY3R1cmUsIEkgc2hvdWxkIGFsc28gbG9vayBhdCBgZHBsbF9waW5fcmVnaXN0ZXJgLiBJdCB3b3VsZCBjb250YWluIGFsbCB0aGUgZGF0YSByZWdhcmRpbmcgYXZhaWxhYmxlIHBpbnMsIHRoZWlyIHBvc3NpYmxlIHNldHRpbmdzLCBhbmQgdGhlaXIgcGFyZW50IGRldmljZXMuIEl0IHdvdWxkIGJlIG15IGZpcnN0IHN0b3AgZm9yIHJldmVyc2UtZW5naW5lZXJpbmcgdGhlIGF2YWlsYWJsZSBwaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9ODQxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo4NDI6X19kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg0My1cdFx0ICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdiwgdm9pZCAqY29va2llKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NjMtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6ODY0OiAqIGRwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgcGluIGluIHRoZSBzdWJzeXN0ZW1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NjUtICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTg3NT1pbnRcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo4NzY6ZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NzctXHRcdCAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05MDktXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTEwOlx0cmV0ID0gX19kcGxsX3Bpbl9yZWdpc3RlcihkcGxsLCBwaW4sIG9wcywgcHJpdiwgTlVMTCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTExLW91dF91bmxvY2s6XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxNS19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTE2OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfcGluX3JlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05MTctXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTk4NT1pbnQgZHBsbF9waW5fb25fcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX3BpbiAqcGFyZW50LCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTAwNC1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBhcmVudC1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwMDU6XHRcdHJldCA9IF9fZHBsbF9waW5fcmVnaXN0ZXIocmVmLVx1MDAzZWRwbGwsIHBpbiwgb3BzLCBwcml2LCBwYXJlbnQpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMDYtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERQTEwgUGluIFJlZ2lzdHJhdGlvbiBhbmQgTmV0bGluayBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgZHJpdmVycywgbWFraW5nIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCB0aHVzLCBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZSBuZXRsaW5rIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggaXQuCgpNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6CgoqICAgYGRwbGxfbmxfcGluX2dldF9kb2l0YAoqICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgCiogICBgZHBsbF9ubF9waW5fc2V0X2RvaXRgCiogICBgZHBsbF9waW5fcmVnaXN0ZXJgCgpMZXQgbWUgbWFrZSBzdXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIG5ldGxpbmsgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIGFmZmVjdGVkLiBBaCwgaW4gYGRwbGxfbmV0bGluay5jYCwgSSBzZWUgdGhhdCBgZHBsbF9tc2dfYWRkX3Bpbl9kcGxsc2AgaGFzIGJlZW4gbW9kaWZpZWQuIFJpZ2h0LCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBpbnZva2VkIGJ5IGJvdGggYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLiBJdCBsb29rcyBsaWtlIGBkcGxsX3Bpbl9ldmVudF9zZW5kYCBhbHNvIGNhbGxzIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAuIENvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llcywgbXkgaW5pdGlhbCBjaG9pY2VzIGZvciB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYWNjdXJhdGUuCgpXYWl0IGEgbW9tZW50Li4uIHdoYXQgYWJvdXQgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGA/IElzIHRoYXQgcmVsZXZhbnQ/IE9oLCBpdCYjMzk7cyBzdGF0aWMuIFByb2JhYmx5IG5vdCBhIGZvY3VzLiBBbmQgd2hhdCBhYm91dCBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2A/IFRob3NlIGFyZSBleHBvcnRlZCwgc28gdGhleSBtaWdodCBwbGF5IGEgcm9sZSBpbiB0aGUgc3lzdGVtLiBCdXQgdGhlIG1haW4gaW50ZXJhY3Rpb24gc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgcGluLXJlbGF0ZWQgb3BlcmF0aW9ucyB3aXRoIG5ldGxpbmssIHdoaWNoIG1ha2UgYGRwbGxfbmxfcGluX2dldF9kb2l0YCwgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLCBhbmQgYGRwbGxfcGluX3JlZ2lzdGVyYCB0aGUgcHJpbWFyeSBjYW5kaWRhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoZHBsbF9wcml2XFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3ODQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGRwbGxfcHJpdmAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGRwbGxfcHJpdmAuIFdlJiMzOTtyZSBsaWtlbHkgYXQgYSBwb2ludCB3aGVyZSB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhpcyBwcml2YXRlIGZ1bmN0aW9uIG9yIG1vZHVsZS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7dmUgaXNvbGF0ZWQgYSBwcm9ibGVtIGFyZWEsIGFuZCBgZHBsbF9wcml2YCBpcyBhIGtleSBjb21wb25lbnQgd2l0aGluIGl0LiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBlaXRoZXIgY29uZmlybSBhIGh5cG90aGVzaXMgYWJvdXQgaXRzIHJvbGUsIG9yIHRvIGhvcGVmdWxseSB1bmNvdmVyIHNvbWUgZnVydGhlciBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChkcGxsX3ByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRFBMTCBQcml2YXRlIEZ1bmN0aW9uIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgZHBsbF9jb3JlLmNgIGZpbGUgYWdhaW4uIFRpbWUgdG8gZ2V0IGRvd24gYW5kIGRpcnR5IHdpdGggYGRwbGxfcHJpdmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyDigJMgc3BlY2lmaWNhbGx5LCBob3cgdGhleeKAmXJlIGhhbmRsaW5nIHByaXZhdGUgdmFyaWFibGVzLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBpbiB0aGF0IERQTEwgY29yZS4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgbnVhbmNlIGhlcmUgcmVnYXJkaW5nIGNsYXVzZSBzZWxlY3Rpb24sIGNvbmZsaWN0IGFuYWx5c2lzLCBvciBwZXJoYXBzIGV2ZW4gdGhlIGxpdGVyYWwgYXNzaWdubWVudCBzdHJhdGVnaWVzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgdGhlIGRldGFpbHMgdGhhdCBhcmUgaGlkZGVuIGZyb20gY2FzdWFsIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfcHJpdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTA4OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDkzLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwOTQ6dm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDk1LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTExNT1kcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMjU6dm9pZCAqZHBsbF9waW5fb25fZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI2LVx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0ODIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRQTExfUFJJViBBY2Nlc3MgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgZHBsbF9wcml2YCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBub3QgZXhwb3J0ZWQuIFRoYXQgc3RyaWtlcyBtZSBhcyBvZGQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQmIzM5O3MgaW50ZW50aW9uYWwgb3IgaWYgc29tZXRoaW5nJiMzOTtzIGdvbmUgYXdyeS4gTXkgaW5zdGluY3QgaXMgdG8gcXVpY2tseSBjaGVjayB0aGUgZW5kIG9mIHRoZSBgZHBsbF9wcml2YCBkZWNsYXJhdGlvbi4gVGhpcyBzaG91bGQgaW1tZWRpYXRlbHkgdGVsbCBtZSBpZiBpdCYjMzk7cyBnb3QgdGhlIHVzdWFsIGV4dGVybiAmIzM0O0MmIzM0OyB2aXNpYmlsaXR5LCBvciBwZXJoYXBzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgcmVhc29uIGl0JiMzOTtzIHNjb3BlZCB0aGF0IHRpZ2h0bHkuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHdoeSBpdCYjMzk7cyBiZWhhdmluZyB0aGlzIHdheS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZWZpbml0aW9uIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTQ6XHR2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuMTA5NTpcdHtcbjEwOTY6XHRcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbjEwOTc6XHRcbjEwOTg6XHRcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcbjEwOTk6XHRcdGlmICghcmVnKVxuMTEwMDpcdFx0XHRyZXR1cm4gTlVMTDtcbjExMDE6XHRcdHJldHVybiByZWctXHUwMDNlcHJpdjtcbjExMDI6XHR9XG4xMTAzOlx0XG4xMTA0Olx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZHBsbF9kZXZpY2Vfb3BzKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbjExMDU6XHR7XG4xMTA2Olx0XHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4xMTA3Olx0XG4xMTA4Olx0XHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XG4xMTA5Olx0XHRpZiAoIXJlZylcbjExMTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTExOlx0XHRyZXR1cm4gcmVnLVx1MDAzZW9wcztcbjExMTI6XHR9XG4xMTEzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgdGhlIEV4cG9ydCBvZiBEUExMIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgRFBMTCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGUgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGV5JiMzOTtyZSAqbm90KiBleHBvcnRlZCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3QgY2hlY2suIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqYXJlKiB0aGV5IGRlZmluZWQ/IEhtbSwgbGV0IG1lIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIEFoLCByaWdodCwgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBkZWNsYXJlZCB3aXRoaW4gYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaGAuIFRoYXQgY291bGQgY2hhbmdlIHRoaW5ncy4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgbGlua2FnZSB3b3JrcyBmcm9tIHRoYXQgaGVhZGVyLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgbWFjcm8gb3IgaW5saW5lIGRlZmluaXRpb24gaW4gdGhlcmUsIG9yIG1heWJlIHRoZSBjb3JlIGl0c2VsZiBpcyBub3QgdGhlIHByb2JsZW0sIGJ1dCBpbnN0ZWFkIGFuIGltcG9ydCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9wcml2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTY4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTA4OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDkzLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwOTQ6dm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDk1LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTExNT1kcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMjU6dm9pZCAqZHBsbF9waW5fb25fZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI2LVx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmg9ODE9c3RydWN0IGRwbGxfcGluX3JlZiB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oLTg5LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oOjkwOnZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oOjkxOnZvaWQgKmRwbGxfcGluX29uX2RwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaC05Mi12b2lkICpkcGxsX3Bpbl9vbl9waW5fcHJpdihzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4pO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMTU9ZHBsbF9tc2dfYWRkX21vZGUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjEtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIyOlx0cmV0ID0gb3BzLVx1MDAzZW1vZGVfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2bW9kZSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMzI9ZHBsbF9tc2dfYWRkX21vZGVfc3VwcG9ydGVkKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTQwLVx0aWYgKG9wcy1cdTAwM2VzdXBwb3J0ZWRfbW9kZXNfZ2V0KSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQxOlx0XHRyZXQgPSBvcHMtXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG1vZGVzLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0Mi1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0OC1cdFx0ICovXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ5Olx0XHRyZXQgPSBvcHMtXHUwMDNlbW9kZV9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZtb2RlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1MC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTY0PWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3MS1cdGlmIChvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3Jfc2V0IFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3JfZ2V0KSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTcyOlx0XHRyZXQgPSBvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNzMtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNnN0YXRlLCBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xODQ9ZHBsbF9tc2dfYWRkX2ZyZXFfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MS1cdGlmIChvcHMtXHUwMDNlZnJlcV9tb25pdG9yX3NldCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9nZXQpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTI6XHRcdHJldCA9IG9wcy1cdTAwM2VmcmVxX21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTMtXHRcdFx0XHRcdCAgICBcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjA0PWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXRfYXZnX2ZhY3RvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMTItXHRpZiAob3BzLVx1MDAzZXBoYXNlX29mZnNldF9hdmdfZmFjdG9yX2dldCkge1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIxMzpcdFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX29mZnNldF9hdmdfZmFjdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjE0LVx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZmYWN0b3IsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTIyNT1kcGxsX21zZ19hZGRfbG9ja19zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMzItXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjMzOlx0cmV0ID0gb3BzLVx1MDAzZWxvY2tfc3RhdHVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNnN0YXR1cyxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMzQtXHRcdFx0XHQgICBcdTAwMjZzdGF0dXNfZXJyb3IsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTI0OT1kcGxsX21zZ19hZGRfdGVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTI1Ny1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjU4Olx0cmV0ID0gb3BzLVx1MDAzZXRlbXBfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2dGVtcCwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0yNjg9ZHBsbF9tc2dfYWRkX2Nsb2NrX3F1YWxpdHlfbGV2ZWwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNzctXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjI3ODpcdHJldCA9IG9wcy1cdTAwM2VjbG9ja19xdWFsaXR5X2xldmVsX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHFscywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0yODk9ZHBsbF9tc2dfYWRkX3Bpbl9wcmlvKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yOTktXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMDpcdHJldCA9IG9wcy1cdTAwM2VwcmlvX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMTpcdFx0XHQgICAgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZwcmlvLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTMwMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTMxMT1kcGxsX21zZ19hZGRfcGluX29uX2RwbGxfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTMyMS1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzIyOlx0cmV0ID0gb3BzLVx1MDAzZXN0YXRlX29uX2RwbGxfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzIzOlx0XHRcdFx0ICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNnN0YXRlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTMyNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTMzMz1kcGxsX21zZ19hZGRfcGluX29wZXJzdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ0LVx0cmV0ID0gb3BzLVx1MDAzZW9wZXJzdGF0ZV9vbl9kcGxsX2dldChwaW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzQ1Olx0XHRcdFx0XHQgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM0NjpcdFx0XHRcdFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ3LVx0XHRcdFx0XHQgIFx1MDAyNm9wZXJzdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MzU3PWRwbGxfbXNnX2FkZF9waW5fZGlyZWN0aW9uKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zNjUtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzY2Olx0cmV0ID0gb3BzLVx1MDAzZWRpcmVjdGlvbl9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzozNjc6XHRcdFx0XHQgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZkaXJlY3Rpb24sIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9Mzc3PWRwbGxfbXNnX2FkZF9waW5fcGhhc2VfYWRqdXN0KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zODctXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM4ODpcdHJldCA9IG9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6Mzg5Olx0XHRcdFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zOTAtXHRcdFx0XHQgICAgXHUwMDI2cGhhc2VfYWRqdXN0LCBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz00MDA9ZHBsbF9tc2dfYWRkX3BoYXNlX29mZnNldChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDEwLVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MTE6XHRyZXQgPSBvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQxMjpcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNnBoYXNlX29mZnNldCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MTMtXHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NDIzPXN0YXRpYyBpbnQgZHBsbF9tc2dfYWRkX2ZmbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDMzLVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MzQ6XHRyZXQgPSBvcHMtXHUwMDNlZmZvX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihyZWYtXHUwMDNlZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MzU6XHRcdFx0ICAgcmVmLVx1MDAzZWRwbGwsIGRwbGxfcHJpdihyZWYtXHUwMDNlZHBsbCksIFx1MDAyNmZmbywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MzYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTQ0OT1zdGF0aWMgaW50IGRwbGxfbXNnX2FkZF9tZWFzdXJlZF9mcmVxKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00NjEtXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2MjpcdHJldCA9IGRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDYzLVx0XHRcdFx0XHRcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDY3LVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0Njg6XHRyZXQgPSBvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0Njk6XHRcdFx0XHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZtZWFzdXJlZF9mcmVxLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTQ3MC1cdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz00ODI9ZHBsbF9tc2dfYWRkX3Bpbl9mcmVxKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00OTItXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ5MzpcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NDk0Olx0XHRcdFx0IGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2ZnJlcSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00OTUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz01MjM9ZHBsbF9tc2dfYWRkX3Bpbl9lc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTMzLVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1MzQ6XHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTM1Olx0XHRcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZlc3luYywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy01MzYtXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz01Njg9ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTgwLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjU4MTpcdHBpbl9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTgyLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZXJlZl9zeW5jX3BpbnMsIGluZGV4LCByZWZfc3luY19waW4pIHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTg0LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjU4NTpcdFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy01ODYtXHRcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTYyMz1kcGxsX21zZ19hZGRfcGluX3BhcmVudHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTYzOC1cdFx0cHBpbiA9IHJlZi1cdTAwM2VwaW47XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NjM5Olx0XHRwYXJlbnRfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsX3JlZi1cdTAwM2VkcGxsLCBwcGluKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy02NDAtXHRcdHJldCA9IG9wcy1cdTAwM2VzdGF0ZV9vbl9waW5fZ2V0KHBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9OTkwPWRwbGxfbW9kZV9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDAzLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwMDQ6XHRyZXQgPSBvcHMtXHUwMDNlbW9kZV9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZvbGRfbW9kZSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDA1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDEyLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwMTM6XHRyZXQgPSBvcHMtXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG1vZGVzLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwMTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwMjQtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTAyNTpcdHJldHVybiBvcHMtXHUwMDNlbW9kZV9zZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBtb2RlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwMjYtfVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMDI5PWRwbGxfcGhhc2Vfb2Zmc2V0X21vbml0b3Jfc2V0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IG5sYXR0ciAqYSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAzOS1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDQwOlx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX29mZnNldF9tb25pdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9zdGF0ZSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDQxLVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA0OC1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDQ5Olx0cmV0dXJuIG9wcy1cdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9zZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBzdGF0ZSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDUwLVx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwNTQ9ZHBsbF9waGFzZV9vZmZzZXRfYXZnX2ZhY3Rvcl9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDY1LVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNjY6XHRyZXR1cm4gb3BzLVx1MDAzZXBoYXNlX29mZnNldF9hdmdfZmFjdG9yX3NldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIGZhY3RvcixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDY3LVx0XHRcdFx0XHRcdGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwNzE9ZHBsbF9mcmVxX21vbml0b3Jfc2V0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IG5sYXR0ciAqYSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA4Mi1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDgzOlx0cmV0ID0gb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZvbGRfc3RhdGUsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA4NC1cdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDkyLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwOTM6XHRyZXR1cm4gb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9zZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBzdGF0ZSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDk0LX1cbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA5Nz1kcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMC1cdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMxOlx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMyOlx0XHRcdFx0IGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2b2xkX2ZyZXEsIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMy1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTE0Ni1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjExNDc6XHRcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTE0ODpcdFx0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMTQ5LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNjktXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTcwOlx0XHRpZiAob3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTcxOlx0XHRcdFx0ICAgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX2ZyZXEsIGV4dGFjaykpXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTE3Mi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NldCBmcmVxdWVuY3kgcm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTE3OD1kcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyMDgtXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIwOTpcdHJldCA9IG9wcy1cdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjEwOlx0XHRcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZlc3luYywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjExLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjI2LVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIyNzpcdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjI4LVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjM0LVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIzNTpcdFx0cGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMzY6XHRcdHJldCA9IG9wcy1cdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTIzNy1cdFx0XHRcdCAgICAgIGZyZXEsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTEtXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjUyOlx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTMtXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNjEtXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjYyOlx0XHRwaW5fZHBsbF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTI2MzpcdFx0aWYgKG9wcy1cdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI2NC1cdFx0XHRcdCAgIGVzeW5jLmZyZXEsIGV4dGFjaykpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEyNzE9ZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzA1LVx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMDY6XHRyZXQgPSBvcHMtXHUwMDNlcmVmX3N5bmNfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMwNy1cdFx0XHRcdHJlZl9zeW5jX3BpbixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMzA4Olx0XHRcdFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMwOS1cdFx0XHRcdFx1MDAyNm9sZF9zdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMyMi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMjM6XHRcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzI0LVx0XHRcdFx0XHRyZWZfc3luY19waW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTMyNTpcdFx0XHRcdFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMyNi1cdFx0XHRcdFx0XHRcdCAgICAgIHJlZl9zeW5jX3BpbiksXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNDgtXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMzQ5Olx0XHRpZiAob3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNTAtXHRcdFx0XHQgICAgICByZWZfc3luY19waW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTM1MTpcdFx0XHRcdCAgICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNTItXHRcdFx0XHQgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEzODQ9ZHBsbF9waW5fb25fcGluX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdTMyIHBhcmVudF9pZHgsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0MTQtXHRcdHBpbl9wcml2ID0gZHBsbF9waW5fb25fcGluX3ByaXYocGFyZW50LCBwaW4pO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0MTU6XHRcdHBhcmVudF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGxfcmVmLVx1MDAzZWRwbGwsIHBhcmVudCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTQxNi1cdFx0cmV0ID0gb3BzLVx1MDAzZXN0YXRlX29uX3Bpbl9zZXQocGluLCBwaW5fcHJpdiwgcGFyZW50LCBwYXJlbnRfcHJpdixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQyNz1kcGxsX3Bpbl9zdGF0ZV9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTQ0Ny1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0NDg6XHRyZXQgPSBvcHMtXHUwMDNlc3RhdGVfb25fZHBsbF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDQ5Olx0XHRcdFx0ICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHN0YXRlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NTAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNDU4PWRwbGxfcGluX3ByaW9fc2V0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NzQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDc1Olx0cmV0ID0gb3BzLVx1MDAzZXByaW9fc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ3NjpcdFx0XHQgICAgZHBsbF9wcml2KGRwbGwpLCBwcmlvLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNDg1PWRwbGxfcGluX2RpcmVjdGlvbl9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUwMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDM6XHRyZXQgPSBvcHMtXHUwMDNlZGlyZWN0aW9uX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDQ6XHRcdFx0XHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBkaXJlY3Rpb24sIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUwNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE1MTM9ZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1NTQtXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU1NTpcdHJldCA9IG9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU1NjpcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9waGFzZV9hZGosXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU1Ny1cdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTcyLVx0XHRyZXQgPSBvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldChwaW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU3MzpcdFx0XHRcdFx0ICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1NzQ6XHRcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTc1LVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU5Ny1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1OTg6XHRcdGlmIChvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1OTk6XHRcdFx0XHRcdCAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBvbGRfcGhhc2VfYWRqLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2MDAtXHRcdFx0XHRcdCAgZXh0YWNrKSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTY9emwzMDczeF9kcGxsX3Bpbl9kaXJlY3Rpb25fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sIHZvaWQgKnBpbl9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjk3Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05OC1cdFx0XHQgICAgICAgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gKmRpcmVjdGlvbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTIzPXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZXN5bmNfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTI2Olx0XHRcdFx0IHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjctXHRcdFx0XHQgc3RydWN0IGRwbGxfcGluX2VzeW5jICplc3luYyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI5LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMzA6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTMxLVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2MD16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2VzeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2MzpcdFx0XHRcdCB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NC1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTY1LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNjY6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTY3LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI5Nj16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2Zmb19nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbiwgdm9pZCAqcGluX3ByaXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mjk3Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yOTgtXHRcdFx0ICAgICAgIHN0cnVjdCBkcGxsX2Zmb19wYXJhbSAqZmZvLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMTI9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9tZWFzdXJlZF9mcmVxX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMTQtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MzE1Olx0XHRcdFx0XHQgdm9pZCAqZHBsbF9wcml2LCB1NjQgKm1lYXN1cmVkX2ZyZXEsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzE2LVx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMjc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMyOS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjMzMDpcdFx0XHRcdCAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgKmZyZXF1ZW5jeSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzEtXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzIte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjMzMzpcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzQtXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTM0ND16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzQ2LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MzQ3Olx0XHRcdFx0ICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzQ4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzQ5LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozNTA6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzUxLVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTM5MT16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3BoYXNlX29mZnNldF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzkzLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mzk0Olx0XHRcdFx0XHR2b2lkICpkcGxsX3ByaXYsIHM2NCAqcGhhc2Vfb2Zmc2V0LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5NS1cdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5Ni17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mzk3Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5OC1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz00NDc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ0OS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjQ1MDpcdFx0XHRcdFx0dm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ1MS1cdFx0XHRcdFx0czMyICpwaGFzZV9hZGp1c3QsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ1My17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDU0Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ1NS1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz00ODA9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9waGFzZV9hZGp1c3Rfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ4Mi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjQ4MzpcdFx0XHRcdFx0dm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ4NC1cdFx0XHRcdFx0czMyIHBoYXNlX2FkanVzdCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg2LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo0ODc6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg4LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTU0Nz16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3N0YXRlX29uX2RwbGxfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU0OS1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo1NTA6XHRcdFx0XHRcdCB2b2lkICpkcGxsX3ByaXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNTUxLVx0XHRcdFx0XHQgZW51bSBkcGxsX3Bpbl9zdGF0ZSAqc3RhdGUsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU1My17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NTU0Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU1NS1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NTg1PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fb3BlcnN0YXRlX29uX2RwbGxfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU4Ny1cdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NTg4Olx0XHRcdFx0XHQgICAgIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01ODktXHRcdFx0XHRcdCAgICAgZW51bSBkcGxsX3Bpbl9vcGVyc3RhdGUgKm9wZXJzdGF0ZSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NTk4PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fc3RhdGVfb25fZHBsbF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjAwLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjYwMTpcdFx0XHRcdFx0IHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDItXHRcdFx0XHRcdCBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDQte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjYwNTpcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDYtXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTY4NT16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3ByaW9fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sIHZvaWQgKnBpbl9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjY4NjpcdFx0XHRcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTY4Ny1cdFx0XHRcdHUzMiAqcHJpbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz02OTc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9wcmlvX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLCB2b2lkICpwaW5fcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo2OTg6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02OTktXHRcdFx0XHR1MzIgcHJpbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NzAxOlx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMi1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NzI3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03MjktXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo3MzA6XHRcdFx0XHQgIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03MzEtXHRcdFx0XHQgIHN0cnVjdCBkcGxsX3Bpbl9lc3luYyAqZXN5bmMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczMy17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NzM0Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczNS1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz03ODU9emwzMDczeF9kcGxsX291dHB1dF9waW5fZXN5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTc4Ny1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjc4ODpcdFx0XHRcdCAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03ODktXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTAte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjc5MTpcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTItXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9ODQyPXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODQ0LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjg0NTpcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0ICpmcmVxdWVuY3ksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODQ2LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0Ny17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6ODQ4Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0OS1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9ODU3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODU5LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjg2MDpcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODYyLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo4NjM6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODY0LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTkzMT16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzMy1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5MzQ6XHRcdFx0XHRcdCB2b2lkICpkcGxsX3ByaXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTM1LVx0XHRcdFx0XHQgczMyICpwaGFzZV9hZGp1c3QsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzNy17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTM4Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzOS1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz05NTQ9emwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NTYtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTU3Olx0XHRcdFx0XHQgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk1OC1cdFx0XHRcdFx0IHMzMiBwaGFzZV9hZGp1c3QsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk2MC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTYxOlx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk2Mi1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz05Nzg9emwzMDczeF9kcGxsX291dHB1dF9waW5fc3RhdGVfb25fZHBsbF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTgwLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5ODE6XHRcdFx0XHRcdCAgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk4Mi1cdFx0XHRcdFx0ICBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTkxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5OTI6emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk5My1cdFx0ICAgICAgczMyICp0ZW1wLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTk0LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5OTU6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTk2LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEwMTA9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEwMTE6emwzMDczeF9kcGxsX2xvY2tfc3RhdHVzX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMDEyLVx0XHRcdCAgICAgZW51bSBkcGxsX2xvY2tfc3RhdHVzICpzdGF0dXMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEwMTUte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEwMTY6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4ODcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRQTEwgSW52ZXN0aWdhdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgc2VlIGBkcGxsX3ByaXZgIGlzIGRlY2xhcmVkIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmhgLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBIb3dldmVyLCBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gU28sIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmU6CgoqICAgYGRwbGxfbmxfcGluX2dldF9kb2l0YAoqICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgCiogICBgZHBsbF9ubF9waW5fc2V0X2RvaXRgCiogICBgZHBsbF9waW5fcmVnaXN0ZXJgCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIENoZWNraW5nIGBkcGxsX25ldGxpbmsuY2AsIEkgZmluZDoKCiogICBgZHBsbF9tc2dfYWRkX3Bpbl9kcGxsc2AgaXMgc3RhdGljLgoqICAgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBpcyBzdGF0aWMuCiogICBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX3Bpbl9lc3luY19zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCBpcyBzdGF0aWMuCiogICBgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCBpcyBub24tc3RhdGljLgoKV2FpdCBhIHNlY29uZCwgYWx0aG91Z2ggYGRwbGxfbmxfcGluX2dldF9kdW1waXRgIGlzIG5vbi1zdGF0aWMsIHdoYXQgYWJvdXQgYGRwbGxfbmxfcGluX3NldF9kb2l0YD8gQWx0aG91Z2ggaXQmIzM5O3Mgbm90IGRpcmVjdGx5IG1vZGlmaWVkLCBpdCBjYWxscyBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgd2hpY2ggdGhlbiBpbiB0dXJuIGNhbGxzIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAgaXMgYWJzb2x1dGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLgoKTGV0IG1lIGV4YW1pbmUgYGRwbGxfZGV2aWNlX29wc2AgYW5kIGBkcGxsX3ByaXZgIGluIGBkcGxsX2NvcmUuY2Agbm93LiBUaGV5JiMzOTtyZSBub3QgZXhwb3J0ZWQgdGhlbXNlbHZlcywgYnV0IHRoZXkgYXJlIGNhbGxlZCB3aXRoaW4gYGRwbGxfbmV0bGluay5jYCBhbmQgYGRwbGxfY29yZS5jYC4gQWgsIGJ1dCBgZHBsbF9kZXZpY2Vfb3BzYCBpcyB1c2VkIGJ5IGBkcGxsX3Bpbl9yZWdpc3RlcmAsIHdoaWNoICppcyogZXhwb3J0ZWQsIHNvIHRoYXQmIzM5O3MgcmVsZXZhbnQuCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3Mgd2UmIzM5O2xsIG5lZWQuIGBEUExMYCBpcyBhIGJvb2xlYW4sIHNvIHdlIGNhbiYjMzk7dCBlbmFibGUgaXQgZGlyZWN0bHkuIFdlIG5lZWQgYSBkcml2ZXIgdGhhdCBzZWxlY3RzIGl0LiBJIHNlZSB0aGF0IGBaTDMwNzNYX0kyQ2Agc2VsZWN0cyBgWkwzMDczWGAsIHdoaWNoIHRoZW4gc2VsZWN0cyBgRFBMTGAuIExldCBtZSBzZWUsIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDYCBhbmQgYE5FVGAsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIEJhY2sgdG8gYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgLiBgY29uZmlnIFpMMzA3M1hgIHNlbGVjdHMgYERQTExgLiBgY29uZmlnIFpMMzA3M1hfSTJDYCBzZWxlY3RzIGBaTDMwNzNYYC4gU28sIHdlIGNhbiBlbmFibGUgYFpMMzA3M1hfSTJDYC4gSG1tLCB3YWl0LCBJIHNlZSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBhbHNvIHNlbGVjdHMgYERQTExgLiBDaGVja2luZyBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgZm9yIGBQVFBfMTU4OF9DTE9DS19PQ1BgLCBpdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIGBIQVNfSU9NRU1gLCBgUENJYCwgYEkyQ2AsIGBNVERgLCBgU0VSSUFMXzgyNTBgLCBgIVMzOTBgLCBhbmQgYENPTU1PTl9DTEtgLiBUaGF0IGxvb2tzIHNpZ25pZmljYW50bHkgbW9yZSBpbnZvbHZlZCB0aGFuIGBaTDMwNzNYX0kyQ2AsIHNvIGxldCYjMzk7cyBzdGljayB3aXRoIHRoYXQgZm9yIG5vdy4gTGV0IG1lIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIG9uZSBtb3JlIHRpbWUsIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDICZhbXA7JmFtcDsgTkVUYC4gU28gdGhhdCYjMzk7cyBjb25maXJtZWQuIEkmIzM5O2xsIGFkZCBgWkwzMDczWF9JMkNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIE9oIHdhaXQsIGBaTDMwNzNYYCBpcyB0cmlzdGF0ZSBpZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCBidXQgZXZlbiBpZiBgQ09NUElMRV9URVNUYCBpc24mIzM5O3QgZW5hYmxlZCwgYFpMMzA3M1hfSTJDYCB3aWxsIHN0aWxsIHNlbGVjdCBpdC4gUGVyZmVjdC4gQmVjYXVzZSBgWkwzMDczWF9JMkNgIGhhcyBgc2VsZWN0IFpMMzA3M1hgLgoKTGV0IG1lIGFsc28gY2hlY2sgYE1MWDVfRFBMTGAuIEl0IGRlcGVuZHMgb24gYE5FVERFVklDRVMgJmFtcDsmYW1wOyBFVEhFUk5FVCAmYW1wOyZhbXA7IFBDSSAmYW1wOyZhbXA7IE1MWDVfQ09SRWAsIGFuZCBhbHNvIGBzZWxlY3QgRFBMTGAuIFRoZW4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgzMD1pbnQgZHBsbF9ubF9waW5faWRfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTg2NC1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxODY1OmludCBkcGxsX25sX3Bpbl9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4NjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ1MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pY3Mgb2YgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByb2Nlc3NpbmcgdGhpc+KAlHllcywgdGhlIG5hdHVyZSBvZiB0aGlzIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGxpbmUgb2YgdGhvdWdodC4uLiB3aGF0IGFib3V0IGBkcGxsX25sX3Bpbl9zZXRfZG9pdGA/IEkmIzM5O20gd29uZGVyaW5nIGhvdyB0aGF0IGZ1bmN0aW9uIGZpdHMgaW50byB0aGlzIGV2b2x2aW5nIHNjZW5hcmlvLiBXaGVyZSBkb2VzIGl0IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgcGljdHVyZT8gSXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYW5kIGNvbnNpZGVyIGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX25sX3Bpbl9zZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTg5Mz1pbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MzMtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTkzNDppbnQgZHBsbF9ubF9waW5fc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3OTcKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEUExMIFN1YnN5c3RlbSBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3AgKERQTEwpIHN1YnN5c3RlbS4gVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlaXIgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBGaXJzdCwgaXQmIzM5O3MgY2xlYXIgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmVuJiMzOTt0IHN0YXRpYzsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGNhbGxlZCBieSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zLiBgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0YCBoYXMgYmVlbiBjaGFuZ2VkLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYC4gVGhvc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHF1aXRlIGEgZmV3IG5ldGxpbmsgY2FsbGJhY2tzLiBBZGRpdGlvbmFsbHksIGBkcGxsX3Bpbl9yZWdpc3RlcmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZCBhbmQgZXhwb3J0ZWQuCgpUaGUgY29yZSBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uIGFyZTogYGRwbGxfcGluX3JlZ2lzdGVyYCwgYGRwbGxfbmxfcGluX2dldF9kb2l0YCwgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLCBhbmQgYGRwbGxfbmxfcGluX3NldF9kb2l0YC4KCmBkcGxsX3Bpbl9yZWdpc3RlcmAgaXMgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIOKAkyBkcml2ZXJzIGNhbGwgaXQgZHVyaW5nIHByb2JlIOKAkyBidXQgaXTigJlzIGEgY29yZSBrZXJuZWwgQVBJLCBzbyBpdHMgaW5jbHVzaW9uIGluIHRoZSBmdXp6aW5nIHNjb3BlIGlzIGp1c3RpZmllZC4gVGhlIG5ldGxpbmsgY2FsbGJhY2tzLCBob3dldmVyLCBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQuCgpUaGUgcGF0Y2ggZXNzZW50aWFsbHkgaW1wcm92ZXMgaG93IHRoZSBEUExMIHN1YnN5c3RlbSBoYW5kbGVzIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIHVzaW5nIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIHdpdGhpbiB0aGUgbmV0bGluayBjYWxsYmFja3MgKGxpa2UgYGRwbGxfcGluX2ZyZXFfc2V0YCwgZXRjLikgdG8gYXZvaWQgb3BlcmF0aW9ucyBvbiB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGRzIHZhbGlkYXRpb24gb2YgYGRldl9vcHNgIGluIGBkcGxsX3Bpbl9yZWdpc3RlcmAgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGZvciB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBrZXJuZWwgY29kZSB0aGF0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgRFBMTCBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBUaGlzIGlzIHNpZ25pZmljYW50LCBhbmQgdGhleSB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4KCk5vdywgd2hpY2ggY29uZmlncyBtYWtlIHNlbnNlIHRvIGVuYWJsZT8gV2Uga25vdyBgWkwzMDczWF9JMkNgIHNlbGVjdHMgYFpMMzA3M1hgLCB3aGljaCBpbiB0dXJuIHNlbGVjdHMgYERQTExgLiBgSUNFYCBhbHNvIHNlbGVjdHMgYERQTExgLCBhcyBkb2VzIGBNTFg1X0RQTExgLiBCdXQgYE1MWDVfRFBMTGAgaXMgY29udGluZ2VudCBvbiBgTUxYNV9DT1JFYCwgYW5kIGBJQ0VgIGRlcGVuZHMgb24gYFBDSWAuIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDICZhbXA7JmFtcDsgTkVUYC4gSSYjMzk7bGwganVzdCBmb2N1cyBvbiBlbmFibGluZyBgWkwzMDczWF9JMkNgIGFuZCBgSUNFYCB0byBndWFyYW50ZWUgdGhhdCB0aGUgYERQTExgIGNvbmZpZyBpcyBlbmFibGVkLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBgWkwzMDczWF9JMkNgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQgZGVwZW5kcyBvbiBgSTJDICZhbXA7JmFtcDsgTkVUYC4gYEkyQ2AgaXMgY29tbW9uIGluIHRoZSBzeXprYWxsZXIgY29uZmlncywgYW5kIGBORVRgIGlzIGRlZmluaXRlbHkgaW5jbHVkZWQuIFBlcmZlY3QuIGBaTDMwNzNYX0kyQ2Agc2VlbXMgaWRlYWwuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXM6IGBkcGxsX3Bpbl9yZWdpc3RlcmAgaXMgYSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgaW50IGRwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdilgLgoKQW5kIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAsIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCwgYW5kIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAgYXJlIGFsc28gbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBkcGxsX25ldGxpbmsuY2AuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgZnV6emluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O0lDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfcGluX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kb2l0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kdW1waXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fc2V0X2RvaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERQTEwgKERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3ApIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgdW5yZWdpc3RlcmVkIERQTEwgZGV2aWNlcy4gSXQgYWRkcyBjaGVja3MgZm9yIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGluIHZhcmlvdXMgbmV0bGluayBjYWxsYmFja3MgKGUuZy4sIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGApIHRvIHNraXAgdW5yZWdpc3RlcmVkIGRldmljZXMuIEl0IGFsc28gdXBkYXRlcyBgZHBsbF9waW5fcmVnaXN0ZXJgIHRvIHZhbGlkYXRlIGBkZXZfb3BzYCBiZWZvcmUgdXNlLCBhbmQgbW9kaWZpZXMgYGRwbGxfcHJpdmAgYW5kIGBkcGxsX2RldmljZV9vcHNgIHRvIHJldHVybiBgTlVMTGAgaWYgdGhlIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgRFBMTCBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcGxsX3Bpbl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX3NldF9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBpbiB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIChlLmcuLCBgZHBsbF9waW5fZnJlcV9zZXRgLCBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgKSB0byBza2lwIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhbHNvIHVwZGF0ZXMgYGRwbGxfcGluX3JlZ2lzdGVyYCB0byB2YWxpZGF0ZSBgZGV2X29wc2AgYmVmb3JlIHVzZSwgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERQTEwgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGNoZWNrcyBpbiB0aGUgRFBMTCBzdWJzeXN0ZW0uIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGBkcGxsX2RldmljZV9vcHMoKWAgYW5kIGBkcGxsX3ByaXYoKWAgY291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIERQTEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBsaXN0IHdhcyBlbXB0eSwgbGVhZGluZyB0byBhIGtlcm5lbCBjcmFzaC4gVGhlIHBhdGNoIGFkZHMgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgY2hlY2tzIHRvIGVuc3VyZSB0aGUgZGV2aWNlIGlzIGZ1bGx5IHJlZ2lzdGVyZWQgYmVmb3JlIGFjY2Vzc2luZyBpdHMgb3BlcmF0aW9ucyBvciBwcm9wZXJ0aWVzIHZpYSBuZXRsaW5rIG9yIHBpbiByZWdpc3RyYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmODc2MmFjNDczMTMwZjQ5MmM2NjVhMTJiNDBlODJiYmNmZmZlZTBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTY6MjY6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMKaW5kZXggNDNkNTFkOTQyZWFkZC4uYTMyMGVlYjgyOWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYwpAQCAtODc2LDE5ICYjNDM7ODc2LDI1IEBAIGludAogZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAkJICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRldl9vcHM7CiAJaW50IHJldDsKIAogCWlmIChXQVJOX09OKCFvcHMpIHx8CiAJICAgIFdBUk5fT04oIW9wcy0mZ3Q7c3RhdGVfb25fZHBsbF9nZXQpIHx8CiAJICAgIFdBUk5fT04oIW9wcy0mZ3Q7ZGlyZWN0aW9uX2dldCkgfHwKLQkgICAgV0FSTl9PTihvcHMtJmd0O21lYXN1cmVkX2ZyZXFfZ2V0ICZhbXA7JmFtcDsKLQkJICAgICghZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLSZndDtmcmVxX21vbml0b3JfZ2V0IHx8Ci0JCSAgICAgIWRwbGxfZGV2aWNlX29wcyhkcGxsKS0mZ3Q7ZnJlcV9tb25pdG9yX3NldCkpIHx8CiAJICAgIFdBUk5fT04ob3BzLSZndDtzdXBwb3J0ZWRfZmZvICZhbXA7JmFtcDsgIW9wcy0mZ3Q7ZmZvX2dldCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYW1wO2RwbGxfbG9jayk7CiAKJiM0MzsJZGV2X29wcyA9IGRwbGxfZGV2aWNlX29wcyhkcGxsKTsKJiM0MzsJaWYgKFdBUk5fT04ob3BzLSZndDttZWFzdXJlZF9mcmVxX2dldCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFkZXZfb3BzIHx8ICFkZXZfb3BzLSZndDtmcmVxX21vbml0b3JfZ2V0IHx8CiYjNDM7CQkgICAgICFkZXZfb3BzLSZndDtmcmVxX21vbml0b3Jfc2V0KSkpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIEZvciBwaW5zIGlkZW50aWZpZWQgdmlhIGZpcm13YXJlIChwaW4tJmd0O2Z3bm9kZSksIGFsbG93IHJlZ2lzdHJhdGlvbgogCSAqIGV2ZW4gaWYgdGhlIHBpbiYjMzk7cyAobW9kdWxlLCBjbG9ja19pZCkgZGlmZmVycyBmcm9tIHRoZSB0YXJnZXQgRFBMTC4KQEAgLTEwODEsMTIgJiM0MzsxMDg3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fcmVmX3N5bmNfcGFpcl9hZGQpOwogc3RhdGljIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKgogZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKIHsKLQlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7Ci0KLQlyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKikmYW1wO2RwbGwtJmd0O3JlZ2lzdHJhdGlvbl9saXN0LAotCQkJCSAgICAgICBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTsKLQlXQVJOX09OKCFyZWcpOwotCXJldHVybiByZWc7CiYjNDM7CXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKikmYW1wO2RwbGwtJmd0O3JlZ2lzdHJhdGlvbl9saXN0LAomIzQzOwkJCQkJc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7CiB9CiAKIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpCkBAIC0xMDk0LDYgJiM0MzsxMDk2LDggQEAgdm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKIAlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7CiAKIAlyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7CiYjNDM7CWlmICghcmVnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHJlZy0mZ3Q7cHJpdjsKIH0KIApAQCAtMTEwMiw2ICYjNDM7MTEwNiw4IEBAIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRwbGxfZGV2aWNlX29wcyhzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpCiAJc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnOwogCiAJcmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpOwomIzQzOwlpZiAoIXJlZykKJiM0MzsJCXJldHVybiBOVUxMOwogCXJldHVybiByZWctJmd0O29wczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jCmluZGV4IGFmYjMxYzAwNDAzODIuLjllNTU3NDVlMzNlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKQEAgLTY2LDYgJiM0Mzs2NiwyMiBAQCBzdGF0aWMgYm9vbCBkcGxsX3Bpbl9hdmFpbGFibGUoc3RydWN0IGRwbGxfcGluICpwaW4pCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpCiYjNDM7ewomIzQzOwlyZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYoc3RydWN0IGRwbGxfcGluICpwaW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKQomIzQzOwkJaWYgKGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQlyZXR1cm4gcmVmOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGRwbGxfbXNnX2FkZF9waW5faGFuZGxlIC0gYXR0YWNoIHBpbiBoYW5kbGUgYXR0cmlidXRlIHRvIGEgZ2l2ZW4gbWVzc2FnZQogICogQG1zZzogcG9pbnRlciB0byBza19idWZmIG1lc3NhZ2UgdG8gYXR0YWNoIGEgcGluIGhhbmRsZQpAQCAtNjU2LDYgJiM0Mzs2NzIsOCBAQCBkcGxsX21zZ19hZGRfcGluX2RwbGxzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCWludCByZXQ7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpbmRleCwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFKTsKIAkJaWYgKCFhdHRyKQogCQkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTcwMCw5ICYjNDM7NzE4LDEwIEBAIGRwbGxfY21kX3Bpbl9nZXRfb25lKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCWludCByZXQ7CiAKIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCXJlZiA9IGRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHBpbik7CiAJaWYgKCFyZWYpCi0JCXJlZiA9IGRwbGxfeGFfcmVmX2RwbGxfZmlyc3QoJmFtcDtwaW4tJmd0O2RwbGxfcmVmcyk7Ci0JQVNTRVJUX05PVF9OVUxMKHJlZik7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldCA9IGRwbGxfbXNnX2FkZF9waW5faGFuZGxlKG1zZywgcGluKTsKIAlpZiAocmV0KQpAQCAtMTA5MSw2ICYjNDM7MTExMCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCX0KIAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoKCFvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQgfHwgIW9wcy0mZ3Q7ZnJlcXVlbmN5X2dldCkgJmFtcDsmYW1wOwogCQkgICAgcmVmLSZndDtkcGxsLSZndDttb2R1bGUgPT0gcGluLSZndDttb2R1bGUgJmFtcDsmYW1wOwpAQCAtMTEwMSw3ICYjNDM7MTEyMiw3IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCQl9CiAJfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwotCWlmICghcmVmKSB7CiYjNDM7CWlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTExNyw2ICYjNDM7MTEzOCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCQlyZXR1cm4gMDsKIAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCkKIAkJCWNvbnRpbnVlOwpAQCAtMTEzOCw2ICYjNDM7MTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewogCQlpZiAocmVmID09IGZhaWxlZCkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCkKIAkJCWNvbnRpbnVlOwpAQCAtMTE2Myw2ICYjNDM7MTE4OCw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAlpbnQgcmV0OwogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICgoIW9wcy0mZ3Q7ZXN5bmNfc2V0IHx8ICFvcHMtJmd0O2VzeW5jX2dldCkgJmFtcDsmYW1wOwogCQkgICAgcmVmLSZndDtkcGxsLSZndDttb2R1bGUgPT0gcGluLSZndDttb2R1bGUgJmFtcDsmYW1wOwpAQCAtMTE3Myw3ICYjNDM7MTIwMCw3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAkJfQogCX0KIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKLQlpZiAoIXJlZikgewomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTExOTksNiAmIzQzOzEyMjYsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCXZvaWQgKnBpbl9kcGxsX3ByaXY7CiAKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCFvcHMtJmd0O2VzeW5jX3NldCkKIAkJCWNvbnRpbnVlOwpAQCAtMTIyNCw2ICYjNDM7MTI1Myw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAogCQlpZiAocmVmID09IGZhaWxlZCkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xMjYyLDcgJiM0MzsxMjkzLDcgQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7Ci0JaWYgKCFyZWYpIHsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMjgzLDYgJiM0MzsxMzE0LDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCWlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpCiAJCXJldHVybiAwOwogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xMzA3LDYgJiM0MzsxMzQwLDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewogCQlpZiAocmVmID09IGZhaWxlZCkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xNTAwLDYgJiM0MzsxNTM1LDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJfQogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICgoIW9wcy0mZ3Q7cGhhc2VfYWRqdXN0X3NldCB8fCAhb3BzLSZndDtwaGFzZV9hZGp1c3RfZ2V0KSAmYW1wOyZhbXA7CiAJCSAgICByZWYtJmd0O2RwbGwtJmd0O21vZHVsZSA9PSBwaW4tJmd0O21vZHVsZSAmYW1wOyZhbXA7CkBAIC0xNTA5LDcgJiM0MzsxNTQ2LDcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCX0KIAl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7Ci0JaWYgKCFyZWYpIHsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xNTI2LDYgJiM0MzsxNTYzLDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCXJldHVybiAwOwogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0KQogCQkJY29udGludWU7CkBAIC0xNTUwLDYgJiM0MzsxNTg5LDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0KQogCQkJY29udGludWU7CkBAIC0xNTgxLDcgJiM0MzsxNjIyLDcgQEAgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBhcmVudF9uZXN0LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcGRwbGxfaWR4ID0gbmxhX2dldF91MzIodGJbRFBMTF9BX1BJTl9QQVJFTlRfSURdKTsKLQlkcGxsID0geGFfbG9hZCgmYW1wO2RwbGxfZGV2aWNlX3hhLCBwZHBsbF9pZHgpOwomIzQzOwlkcGxsID0gZHBsbF9kZXZpY2VfZ2V0X2J5X2lkKHBkcGxsX2lkeCk7CiAJaWYgKCFkcGxsKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwYXJlbnQgZGV2aWNlIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODczLDYgJiM0MzsxOTE0LDEwIEBAIGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJcmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLSZndDtleHRhY2spOwogCQlpZiAocmV0KSB7CiAJCQlnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7CiYjNDM7CQkJaWYgKHJldCA9PSAtRU5PREVWKSB7CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODEKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogMTA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBEUExMIERldmljZSBSZWdpc3RyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGRldmljZSByZWdpc3RyYXRpb24gYW5kIGhhbmRsaW5nIG9mIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGlzc3VlIGlzIHByZXZlbnRpbmcgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGEgRFBMTCBkZXZpY2UgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkIG9yIHJlZ2lzdGVyZWQuCgpJIHNlZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNgIGFuZCBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG5ldGxpbmsgaW50ZXJhY3Rpb24gYW5kIGNvcmUgRFBMTCBkZXZpY2UgbWFuYWdlbWVudC4gVGhlIGtleSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKWAgY2hlY2tzLiBUaGlzIGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBkZWZpbmVkIGFzIGByZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO2AsIGFjdHMgYXMgYSBnYXRla2VlcGVyLCB2ZXJpZnlpbmcgdGhhdCB0aGUgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHZhbGlkIGJlZm9yZSB0aGV5IGFyZSB1c2VkLgoKTG9va2luZyBkZWVwZXIsIHRoZSBwYXRjaCBhbHRlcnMgYGRwbGxfZGV2aWNlX29wc2AgYW5kIGBkcGxsX3ByaXZgIHRvIHJldHVybiBgTlVMTGAgaWYgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKWAgcmV0dXJucyBgTlVMTGAuIFRoaXMgaXMgY3JpdGljYWwuIEJlZm9yZSB0aGlzIHBhdGNoLCBjYWxsaW5nIGBkcGxsX2RldmljZV9vcHNgIHdvdWxkIHRyeSB0byBhY2Nlc3MgdGhlIGBvcHNgIGZpZWxkIG9mIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLCBldmVuIGlmIHRoYXQgc3RydWN0dXJlIHdhcyBOVUxMLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgY2xhc3NpYyBrZXJuZWwgcGFuaWMuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoYXQgYnkgZ3JhY2VmdWxseSByZXR1cm5pbmcgYE5VTExgIHdoZW4gdGhlIGRldmljZSBpc24mIzM5O3QgcmVnaXN0ZXJlZC4gSXQgc2VlbXMgdGhlIG1haW4gaXNzdWUgaXMgYSBtaXNzaW5nIGNoZWNrIGluIHRoZSBjb2RlIHBhdGguCgpGdXJ0aGVybW9yZSwgYGRwbGxfcGluX3JlZ2lzdGVyYCBub3cgZGlyZWN0bHkgY2hlY2tzIGBkZXZfb3BzYCAod2hpY2ggcG90ZW50aWFsbHkgY291bGQgYmUgTlVMTCksIGluc3RlYWQgb2YgY2FsbGluZyBgZHBsbF9kZXZpY2Vfb3BzKGRwbGwpYCBhbmQgaGFuZGxlcyB0aGUgYE5VTExgIGNhc2UuIFRoaXMgaXMgYSBuaWNlLCBwcm9hY3RpdmUgY2hhbmdlLiBJbiBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAsIHRoZSBjb2RlIG5vdyBpZ25vcmVzIGAtRU5PREVWYCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIGxpa2VseSB0byBoYW5kbGUgdGhlIHNhbWUgdW5yZWdpc3RlcmVkIGRldmljZSBzY2VuYXJpby4gQWxzbywgaW4gYGRwbGxfcGluX3BhcmVudF9kZXZpY2Vfc2V0YCB3ZSBub3cgdXNlIGBkcGxsX2RldmljZV9nZXRfYnlfaWRgIGluc3RlYWQgb2YgYHhhX2xvYWRgIHdoaWNoIHNlZW1zIHRvIGVuc3VyZSBkZXZpY2UgaW50ZWdyaXR5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBwYXRjaCBpcyBhYm91dCBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IsIG1vcmUgcHJlY2lzZWx5LCBhbiAmIzM0O3VzZS1iZWZvcmUtaW5pdGlhbGl6YXRpb24mIzM0OyBzY2VuYXJpby4gSXTigJlzIGVuc3VyaW5nIHRoYXQgbmV0bGluayBvcGVyYXRpb25zIGFuZCBwaW4gcmVnaXN0cmF0aW9uIGFyZW4mIzM5O3QgcGVyZm9ybWVkIG9uIHBhcnRpYWxseSBvciB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gVGhlIG9sZGVyIGNvZGUgZGlkbuKAmXQgY29ycmVjdGx5IGhhbmRsZSB0aGVzZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIGNvZGUmIzM5O3MgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGAgZnVuY3Rpb24gcmV0dXJuZWQgYE5VTExgIGluIHRoZSB1bnJlZ2lzdGVyZWQgY2FzZSwgYW5kIHRoZSBkZXJlZmVyZW5jZSBjYXVzZWQgdGhlIGNyYXNoLiBUaGUgbmV3IGNoZWNrcyBtYWtlIHRoZSBjb2RlIG1vcmUgcm9idXN0IGFuZCBkZWZlbnNpdmUuCgpUaGUgbW9zdCBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludm9sdmVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSByZS1leGFtaW5lZCB0aGUgY29kZS4gVGhlIGFuc3dlciBpcyAqbm8qLiBJdCYjMzk7cyBwdXJlbHkgYWJvdXQgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGZvciBhIHZhbGlkIGRldmljZSByZWdpc3RyYXRpb24gYmVmb3JlIGFjY2Vzc2luZyBpdHMgcHJvcGVydGllcy4gVGhlcmXigJlzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgaXNuJiMzOTt0IGFib3V0IEtNU0FOLXNwZWNpZmljIGlzc3Vlcy4gVGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgZmF1bHQgaGFuZGxlcnMuCgpMZXQgbWUgdmVyaWZ5IGEgcXVpY2sgY2hlY2sgb24gYGRwbGxfY21kX3Bpbl9nZXRfb25lYC4gVGhlIHBhdGNoIG1ha2VzIHRoaXMgY29kZSBibG9jayBtb3JlIHJvYnVzdCBieSBoYW5kbGluZyBgLUVOT0RFVmAgKG5vIGRldmljZSBlcnJvcikgbW9yZSBncmFjZWZ1bGx5LiBUaGlzIG1ha2VzIHNlbnNlIGluIGxpZ2h0IG9mIHRoZSB1bnJlZ2lzdGVyZWQgZGV2aWNlIGlzc3VlLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhlIHBhdGNoIGlzIHNvbGVseSBhYm91dCBzdHJlbmd0aGVuaW5nIHRoZSBkcml2ZXIgYWdhaW5zdCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIHRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgYW5kLCBjcnVjaWFsbHksIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXNzdWUgaGVyZS4gSXTigJlzIHNpbXBseSBhIGZpeCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdGhhdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGluIGEga2VybmVsIGNyYXNoLCB3aGljaCBpcyByZWxpYWJseSBjYXVnaHQgYnkgZXhpc3RpbmcgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIEkgY29uY2x1ZGUgKipOZWVkc0tNU0FOID0gZmFsc2UqKi4gVGhlIHJlYXNvbmluZyBpcyB0aGUgcGF0Y2ggaGFuZGxlcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MuIFRoZSBjb2RlIGF2b2lkcyBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnMgd2l0aCBuZXdseSBhZGRlZCBjaGVja3Mgd2l0aCBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MgaW4gdGhlIERQTEwgc3Vic3lzdGVtLiBQcmlvciB0byB0aGlzIHBhdGNoLCBgZHBsbF9kZXZpY2Vfb3BzKClgIGFuZCBgZHBsbF9wcml2KClgIGNvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBEUExMIGRldmljZSByZWdpc3RyYXRpb24gbGlzdCB3YXMgZW1wdHksIGxlYWRpbmcgdG8gYSBrZXJuZWwgY3Jhc2guIFRoZSBwYXRjaCBhZGRzIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGNoZWNrcyB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBmdWxseSByZWdpc3RlcmVkIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIG9wZXJhdGlvbnMgb3IgcHJvcGVydGllcyB2aWEgbmV0bGluayBvciBwaW4gcmVnaXN0cmF0aW9uLlxuXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgaW52YWxpZCBzdGF0ZSBhY2Nlc3Nlcywgd2hpY2ggYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiAob3Igc2ltcGx5IHRyaWdnZXIgYSBwYWdlIGZhdWx0KS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgaW5mby1sZWFrcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzIGluIHRoZSBEUExMIHN1YnN5c3RlbS4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgYGRwbGxfZGV2aWNlX29wcygpYCBhbmQgYGRwbGxfcHJpdigpYCBjb3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciBpZiB0aGUgRFBMTCBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpc3Qgd2FzIGVtcHR5LCBsZWFkaW5nIHRvIGEga2VybmVsIGNyYXNoLiBUaGUgcGF0Y2ggYWRkcyBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBjaGVja3MgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgZnVsbHkgcmVnaXN0ZXJlZCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBvcGVyYXRpb25zIG9yIHByb3BlcnRpZXMgdmlhIG5ldGxpbmsgb3IgcGluIHJlZ2lzdHJhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGludmFsaWQgc3RhdGUgYWNjZXNzZXMsIHdoaWNoIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gKG9yIHNpbXBseSB0cmlnZ2VyIGEgcGFnZSBmYXVsdCkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG9yIGluZm8tbGVha3MuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjAwLjA2MDM4MTI2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYzOTU4OTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHBsbF9waW5fcmVnaXN0ZXJcIixcbiAgICBcImRwbGxfbmxfcGluX2dldF9kb2l0XCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZHVtcGl0XCIsXG4gICAgXCJkcGxsX25sX3Bpbl9zZXRfZG9pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MgaW4gdGhlIERQTEwgc3Vic3lzdGVtLiBQcmlvciB0byB0aGlzIHBhdGNoLCBgZHBsbF9kZXZpY2Vfb3BzKClgIGFuZCBgZHBsbF9wcml2KClgIGNvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBEUExMIGRldmljZSByZWdpc3RyYXRpb24gbGlzdCB3YXMgZW1wdHksIGxlYWRpbmcgdG8gYSBrZXJuZWwgY3Jhc2guIFRoZSBwYXRjaCBhZGRzIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGNoZWNrcyB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBmdWxseSByZWdpc3RlcmVkIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIG9wZXJhdGlvbnMgb3IgcHJvcGVydGllcyB2aWEgbmV0bGluayBvciBwaW4gcmVnaXN0cmF0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBpbiB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIChlLmcuLCBgZHBsbF9waW5fZnJlcV9zZXRgLCBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgKSB0byBza2lwIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhbHNvIHVwZGF0ZXMgYGRwbGxfcGluX3JlZ2lzdGVyYCB0byB2YWxpZGF0ZSBgZGV2X29wc2AgYmVmb3JlIHVzZSwgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERQTEwgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6MDAuMDYwMzkxOTMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY3MDYzMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjg3NjJhYzQ3MzEzMGY0OTJjNjY1YTEyYjQwZTgyYmJjZmZmZWUwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNjoyNjo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcXG5pbmRleCA0M2Q1MWQ5NDJlYWRkLi5hMzIwZWViODI5YWQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xcbkBAIC04NzYsMTkgKzg3NiwyNSBAQCBpbnRcXG4gZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4gXFx0XFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZGV2X29wcztcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChXQVJOX09OKCFvcHMpIHx8XFxuIFxcdCAgICBXQVJOX09OKCFvcHMtXFx1MDAzZXN0YXRlX29uX2RwbGxfZ2V0KSB8fFxcbiBcXHQgICAgV0FSTl9PTighb3BzLVxcdTAwM2VkaXJlY3Rpb25fZ2V0KSB8fFxcbi1cXHQgICAgV0FSTl9PTihvcHMtXFx1MDAzZW1lYXN1cmVkX2ZyZXFfZ2V0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxcbi1cXHRcXHQgICAgICFkcGxsX2RldmljZV9vcHMoZHBsbCktXFx1MDAzZWZyZXFfbW9uaXRvcl9zZXQpKSB8fFxcbiBcXHQgICAgV0FSTl9PTihvcHMtXFx1MDAzZXN1cHBvcnRlZF9mZm8gXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlZmZvX2dldCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4gXFxuK1xcdGRldl9vcHMgPSBkcGxsX2RldmljZV9vcHMoZHBsbCk7XFxuK1xcdGlmIChXQVJOX09OKG9wcy1cXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICghZGV2X29wcyB8fCAhZGV2X29wcy1cXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxcbitcXHRcXHQgICAgICFkZXZfb3BzLVxcdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBGb3IgcGlucyBpZGVudGlmaWVkIHZpYSBmaXJtd2FyZSAocGluLVxcdTAwM2Vmd25vZGUpLCBhbGxvdyByZWdpc3RyYXRpb25cXG4gXFx0ICogZXZlbiBpZiB0aGUgcGluJ3MgKG1vZHVsZSwgY2xvY2tfaWQpIGRpZmZlcnMgZnJvbSB0aGUgdGFyZ2V0IERQTEwuXFxuQEAgLTEwODEsMTIgKzEwODcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWZfc3luY19wYWlyX2FkZCk7XFxuIHN0YXRpYyBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpcXG4gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcXG4ge1xcbi1cXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuLVxcbi1cXHRyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKilcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTtcXG4tXFx0V0FSTl9PTighcmVnKTtcXG4tXFx0cmV0dXJuIHJlZztcXG4rXFx0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKVxcdTAwMjZkcGxsLVxcdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7XFxuIH1cXG4gXFxuIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuQEAgLTEwOTQsNiArMTA5Niw4IEBAIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuIFxcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcXG4gXFxuIFxcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcXG4rXFx0aWYgKCFyZWcpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRyZXR1cm4gcmVnLVxcdTAwM2Vwcml2O1xcbiB9XFxuIFxcbkBAIC0xMTAyLDYgKzExMDYsOCBAQCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpkcGxsX2RldmljZV9vcHMoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxcbiBcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuIFxcbiBcXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XFxuK1xcdGlmICghcmVnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0cmV0dXJuIHJlZy1cXHUwMDNlb3BzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcXG5pbmRleCBhZmIzMWMwMDQwMzgyLi45ZTU1NzQ1ZTMzZTRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbkBAIC02Niw2ICs2NiwyMiBAQCBzdGF0aWMgYm9vbCBkcGxsX3Bpbl9hdmFpbGFibGUoc3RydWN0IGRwbGxfcGluICpwaW4pXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuK3tcXG4rXFx0cmV0dXJuIGRwbGxfZGV2aWNlX29wcyhkcGxsKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKmRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHN0cnVjdCBkcGxsX3BpbiAqcGluKVxcbit7XFxuK1xcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpXFxuK1xcdFxcdGlmIChkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdHJldHVybiByZWY7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbiAvKipcXG4gICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlXFxuICAqIEBtc2c6IHBvaW50ZXIgdG8gc2tfYnVmZiBtZXNzYWdlIHRvIGF0dGFjaCBhIHBpbiBoYW5kbGVcXG5AQCAtNjU2LDYgKzY3Miw4IEBAIGRwbGxfbXNnX2FkZF9waW5fZHBsbHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGluZGV4LCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0UpO1xcbiBcXHRcXHRpZiAoIWF0dHIpXFxuIFxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuQEAgLTcwMCw5ICs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcXG4rXFx0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0cmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTtcXG4gXFx0aWYgKCFyZWYpXFxuLVxcdFxcdHJlZiA9IGRwbGxfeGFfcmVmX2RwbGxfZmlyc3QoXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzKTtcXG4tXFx0QVNTRVJUX05PVF9OVUxMKHJlZik7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmV0ID0gZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUobXNnLCBwaW4pO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMDkxLDYgKzExMTAsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0fVxcbiBcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4gXFx0XFx0aWYgKCghb3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0IHx8ICFvcHMtXFx1MDAzZWZyZXF1ZW5jeV9nZXQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICByZWYtXFx1MDAzZWRwbGwtXFx1MDAzZW1vZHVsZSA9PSBwaW4tXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xMTAxLDcgKzExMjIsNyBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xcbi1cXHRpZiAoIXJlZikge1xcbitcXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbkBAIC0xMTE3LDYgKzExMzgsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbitcXHRcXHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbiBcXHRcXHRpZiAoIW9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTExMzgsNiArMTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTE2Myw2ICsxMTg4LDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4gXFx0XFx0aWYgKCghb3BzLVxcdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cXHUwMDNlZXN5bmNfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTE3Myw3ICsxMjAwLDcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XFxuLVxcdGlmICghcmVmKSB7XFxuK1xcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuQEAgLTExOTksNiArMTIyNiw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4gXFx0XFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcXG4gXFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2Vlc3luY19zZXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjI0LDYgKzEyNTMsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2Vlc3luY19zZXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjYyLDcgKzEyOTMsNyBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xcbi1cXHRpZiAoIXJlZikge1xcbitcXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbkBAIC0xMjgzLDYgKzEzMTQsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdGlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbitcXHRcXHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbiBcXHRcXHRpZiAoIW9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTMwNyw2ICsxMzQwLDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2VyZWZfc3luY19zZXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xNTAwLDYgKzE1MzUsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4gXFx0XFx0aWYgKCghb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9nZXQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICByZWYtXFx1MDAzZWRwbGwtXFx1MDAzZW1vZHVsZSA9PSBwaW4tXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xNTA5LDcgKzE1NDYsNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xcbi1cXHRpZiAoIXJlZikge1xcbitcXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbkBAIC0xNTI2LDYgKzE1NjMsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbitcXHRcXHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbiBcXHRcXHRpZiAoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTE1NTAsNiArMTU4OSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTU4MSw3ICsxNjIyLDcgQEAgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBhcmVudF9uZXN0LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRwZHBsbF9pZHggPSBubGFfZ2V0X3UzMih0YltEUExMX0FfUElOX1BBUkVOVF9JRF0pO1xcbi1cXHRkcGxsID0geGFfbG9hZChcXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIHBkcGxsX2lkeCk7XFxuK1xcdGRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTtcXG4gXFx0aWYgKCFkcGxsKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBhcmVudCBkZXZpY2Ugbm90IGZvdW5kXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xODczLDYgKzE5MTQsMTAgQEAgaW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShza2IsIHBpbiwgY2ItXFx1MDAzZWV4dGFjayk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzowMS41Mjg0MDY0NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY3ODI4ODEwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4NzYyYWM0NzMxMzBmNDkyYzY2NWExMmI0MGU4MmJiY2ZmZmVlMGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNjoyNjo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xuaW5kZXggNDNkNTFkOTQyZWFkZC4uYTMyMGVlYjgyOWFkMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXG5AQCAtODc2LDE5ICs4NzYsMjUgQEAgaW50XG4gZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZGV2X29wcztcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoV0FSTl9PTighb3BzKSB8fFxuIFx0ICAgIFdBUk5fT04oIW9wcy1cdTAwM2VzdGF0ZV9vbl9kcGxsX2dldCkgfHxcbiBcdCAgICBXQVJOX09OKCFvcHMtXHUwMDNlZGlyZWN0aW9uX2dldCkgfHxcbi1cdCAgICBXQVJOX09OKG9wcy1cdTAwM2VtZWFzdXJlZF9mcmVxX2dldCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICghZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLVx1MDAzZWZyZXFfbW9uaXRvcl9nZXQgfHxcbi1cdFx0ICAgICAhZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLVx1MDAzZWZyZXFfbW9uaXRvcl9zZXQpKSB8fFxuIFx0ICAgIFdBUk5fT04ob3BzLVx1MDAzZXN1cHBvcnRlZF9mZm8gXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZmZvX2dldCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkcGxsX2xvY2spO1xuIFxuK1x0ZGV2X29wcyA9IGRwbGxfZGV2aWNlX29wcyhkcGxsKTtcbitcdGlmIChXQVJOX09OKG9wcy1cdTAwM2VtZWFzdXJlZF9mcmVxX2dldCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghZGV2X29wcyB8fCAhZGV2X29wcy1cdTAwM2VmcmVxX21vbml0b3JfZ2V0IHx8XG4rXHRcdCAgICAgIWRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX3NldCkpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBGb3IgcGlucyBpZGVudGlmaWVkIHZpYSBmaXJtd2FyZSAocGluLVx1MDAzZWZ3bm9kZSksIGFsbG93IHJlZ2lzdHJhdGlvblxuIFx0ICogZXZlbiBpZiB0aGUgcGluJ3MgKG1vZHVsZSwgY2xvY2tfaWQpIGRpZmZlcnMgZnJvbSB0aGUgdGFyZ2V0IERQTEwuXG5AQCAtMTA4MSwxMiArMTA4Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfcGluX3JlZl9zeW5jX3BhaXJfYWRkKTtcbiBzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqXG4gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbiB7XG4tXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4tXG4tXHRyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKilcdTAwMjZkcGxsLVx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpO1xuLVx0V0FSTl9PTighcmVnKTtcbi1cdHJldHVybiByZWc7XG4rXHRyZXR1cm4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKChzdHJ1Y3QgbGlzdF9oZWFkICopXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcbitcdFx0XHRcdFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7XG4gfVxuIFxuIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG5AQCAtMTA5NCw2ICsxMDk2LDggQEAgdm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbiBcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbiBcbiBcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcbitcdGlmICghcmVnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdHJldHVybiByZWctXHUwMDNlcHJpdjtcbiB9XG4gXG5AQCAtMTEwMiw2ICsxMTA2LDggQEAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZHBsbF9kZXZpY2Vfb3BzKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbiBcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbiBcbiBcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcbitcdGlmICghcmVnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdHJldHVybiByZWctXHUwMDNlb3BzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbmluZGV4IGFmYjMxYzAwNDAzODIuLjllNTU3NDVlMzNlNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xuQEAgLTY2LDYgKzY2LDIyIEBAIHN0YXRpYyBib29sIGRwbGxfcGluX2F2YWlsYWJsZShzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4re1xuK1x0cmV0dXJuIGRwbGxfZGV2aWNlX29wcyhkcGxsKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKmRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHN0cnVjdCBkcGxsX3BpbiAqcGluKVxuK3tcbitcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZilcbitcdFx0aWYgKGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdHJldHVybiByZWY7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gLyoqXG4gICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlXG4gICogQG1zZzogcG9pbnRlciB0byBza19idWZmIG1lc3NhZ2UgdG8gYXR0YWNoIGEgcGluIGhhbmRsZVxuQEAgLTY1Niw2ICs2NzIsOCBAQCBkcGxsX21zZ19hZGRfcGluX2RwbGxzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0aW50IHJldDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGluZGV4LCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFKTtcbiBcdFx0aWYgKCFhdHRyKVxuIFx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5AQCAtNzAwLDkgKzcxOCwxMCBAQCBkcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGludCByZXQ7XG4gXG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbitcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0cmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTtcbiBcdGlmICghcmVmKVxuLVx0XHRyZWYgPSBkcGxsX3hhX3JlZl9kcGxsX2ZpcnN0KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuLVx0QVNTRVJUX05PVF9OVUxMKHJlZik7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cmV0ID0gZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUobXNnLCBwaW4pO1xuIFx0aWYgKHJldClcbkBAIC0xMDkxLDYgKzExMTAsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdH1cbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQgfHwgIW9wcy1cdTAwM2VmcmVxdWVuY3lfZ2V0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuQEAgLTExMDEsNyArMTEyMiw3IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHR9XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTExNyw2ICsxMTM4LDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTExMzgsNiArMTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMTYzLDYgKzExODgsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpbnQgcmV0O1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoKCFvcHMtXHUwMDNlZXN5bmNfc2V0IHx8ICFvcHMtXHUwMDNlZXN5bmNfZ2V0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuQEAgLTExNzMsNyArMTIwMCw3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuK1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTExOTksNiArMTIyNiw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuIFxuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyMjQsNiArMTI1Myw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcbiBcdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI2Miw3ICsxMjkzLDcgQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbitcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCIpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xMjgzLDYgKzEzMTQsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRpZiAoc3RhdGUgPT0gb2xkX3N0YXRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlcmVmX3N5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEzMDcsNiArMTM0MCw4IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHRpZiAocmVmID09IGZhaWxlZClcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNTAwLDYgKzE1MzUsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdH1cbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuQEAgLTE1MDksNyArMTU0Niw3IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0XHR9XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTUyNiw2ICsxNTYzLDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE1NTAsNiArMTU4OSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNTgxLDcgKzE2MjIsNyBAQCBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGFyZW50X25lc3QsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cGRwbGxfaWR4ID0gbmxhX2dldF91MzIodGJbRFBMTF9BX1BJTl9QQVJFTlRfSURdKTtcbi1cdGRwbGwgPSB4YV9sb2FkKFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBwZHBsbF9pZHgpO1xuK1x0ZHBsbCA9IGRwbGxfZGV2aWNlX2dldF9ieV9pZChwZHBsbF9pZHgpO1xuIFx0aWYgKCFkcGxsKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwYXJlbnQgZGV2aWNlIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTg3Myw2ICsxOTE0LDEwIEBAIGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLVx1MDAzZWV4dGFjayk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XG4rXHRcdFx0aWYgKHJldCA9PSAtRU5PREVWKSB7XG4rXHRcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjAxLjUyODQwNzc2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjMyMDc3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRFBMTCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY2AgYW5kIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgYXR0ZW50aW9uLlxuXG5JIHNlZSB0aGF0IHRoZSBwYXRjaCBpcyBhZGRpbmcgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbClgLCBkZWZpbmVkIGFzIG5vbi1OVUxMIGBkcGxsX2RldmljZV9vcHMoZHBsbClgLiBJdCBhbHNvIGFsdGVycyBgZHBsbF9kZXZpY2Vfb3BzYCBhbmQgYGRwbGxfcHJpdmAgdG8gcmV0dXJuIGBOVUxMYCBpZiBhIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiByZXR1cm5zIGBOVUxMYC4gRnVydGhlciwgYGRwbGxfY29yZS5jYCBub3cgdmFsaWRhdGVzIGBkZXZfb3BzYCBiZWZvcmUgaXQgaXMgdXNlZC4gQW5kIHRoZW4gaW4gYGRwbGxfbmV0bGluay5jYCwgaXQgc2VlbXMgdG8gYmUgc2tpcHBpbmcgdW5yZWdpc3RlcmVkIERQTEwgZGV2aWNlcyBpbiBhIGZldyBwbGFjZXMgbGlrZSB0aG9zZSBgc2V0YCBmdW5jdGlvbnMuIEJhc2ljYWxseSwgaXQgc2VlbXMgdG8gYmUgZ3VhcmRpbmcgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBkb25lLCBpZiB0aGUgRFBMTCBkZXZpY2UgaXNuJ3QgcHJvcGVybHkgcmVnaXN0ZXJlZC5cblxuU28sIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIHZpYSBuZXRsaW5rPyBZZXMsIGBkcGxsX25ldGxpbmsuY2AgaXMgYSBuZXRsaW5rIGZhbWlseS4gVGhhdCdzIGdvb2Q7IG5ldGxpbmsgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBTeXprYWxsZXIsIGluIHBhcnRpY3VsYXIsIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGF0LiBOZXh0LCBsZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL2RwbGwvS2NvbmZpZ2AgZm9yIHRoZSBEUExMIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjA4LjA5MTYxOTI0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4MjQ3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERQTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWc9Nj1tZW51IFxcXCJEUExMIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTctXFxuZHJpdmVycy9kcGxsL0tjb25maWc6ODpjb25maWcgRFBMTFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTktXFx0Ym9vbFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEwLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjExOmNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuZHJpdmVycy9kcGxsL0tjb25maWctMTItXFx0Ym9vbCBcXFwiRFBMTCByZWZlcmVuY2UgY291bnQgdHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjA4LjIwNTQ0ODYyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTg5ODk3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBGbGFnKipcblxuUmlnaHQsIGEgYGNvbmZpZyBEUExMYCBzZXR0aW5nIGp1c3QgYXBwZWFyZWQgaW4gdGhlIGNvZGUsIGFuZCBpdCdzIGEgc3RyYWlnaHQtdXAgYm9vbGVhbiB3aXRob3V0IGFueSBhY2NvbXBhbnlpbmcgcHJvbXB0IG9yIGRlZmF1bHQgdmFsdWUuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBEUExMIGRyaXZlci4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGRlZmluZWQgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGNvbnRleHQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gKndoeSogaXQncyBjb25maWd1cmVkIHRoZSB3YXkgaXQgaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGdlbmVyYWxseSwgaG93IHRoaXMgYGNvbmZpZyBEUExMYCBmbGFnIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZS4gS25vd2luZyB0aGF0IHRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCwgaXMgZ29pbmcgdG8gYmUgaGVscGZ1bC4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjExLjgwNDQ0MTk1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEdlbmVyaWMgRFBMTCBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiRFBMTCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERQTExcXG4gICA5OlxcdFxcdGJvb2xcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcXG4gIDEyOlxcdFxcdGJvb2wgXFxcIkRQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXFxcIlxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IERQTExcXG4gIDE0OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBFbmFibGUgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nIGZvciBEUExMIGRldmljZXMgYW5kIHBpbnMuXFxuICAxNzpcXHRcXHQgIFRoaXMgaGVscHMgZGVidWdnaW5nIHJlZmVyZW5jZSBsZWFrcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnc1xcbiAgMTg6XFx0XFx0ICBieSByZWNvcmRpbmcgc3RhY2sgdHJhY2VzIGZvciBlYWNoIGdldC9wdXQgb3BlcmF0aW9uLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoxMS44MDQ1MDA0MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyOTgzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRQTEwgRHJpdmVyIFNlbGVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBEUExMIChEYXZpc+KAk1B1dG5hbeKAk0xvZ2VtYW5u4oCTTG92ZWxhbmQpIGFsZ29yaXRobSBoYXMgYmVlbiBjaG9zZW4gYnkgc29tZSBvdGhlciBkcml2ZXIgaW4gdGhlIHN5c3RlbS4gVGhhdCdzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmUsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFdoYXQncyB0aGUgdHJpZ2dlcmluZyBmYWN0b3IgaGVyZT8gSXMgaXQgYSBzcGVjaWZpYyBwcm9ibGVtIHR5cGUsIGEgc2l6ZSB0aHJlc2hvbGQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHRoYXQncyBkaWN0YXRpbmcgdGhpcyBzZWxlY3Rpb24/IEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBleGVjdXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBkZWNpc2lvbiBhbmQgdGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgRFBMTCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aG8ncyBjYWxsaW5nIHRoZSBzaG90cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTMwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoxNS4xMzc0ODcwMjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTQ5NzE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRFBMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgUExETUZXXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMDM9Y29uZmlnIE1MWDVfRFBMTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjA2OlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MjEwPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVxcdHNlbGVjdCBDUkMxNlxcbmRyaXZlcnMvcHRwL0tjb25maWc6MjIwOlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMjEtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoxNy41MDI5ODkyNzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIwOTA1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWkwzMDczWCBEUExMIERyaXZlcioqXG5cbk9rYXksIHNvIEkgc2VlIGBaTDMwNzNYYCBtZW50aW9uZWQsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoYXQgaXQncyBhY3RpbmcgYXMgYSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgcGxhY2Ugd2hlcmUgdGhlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gYW5kLCBieSBleHRlbnNpb24sIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGludGVuZGVkIHVzZSwgc2hvdWxkIGJlIGNsZWFybHkgZG9jdW1lbnRlZC4gSSBleHBlY3QgdG8gZmluZCBjb25maXJtYXRpb24gdGhlcmUgYWJvdXQgaXRzIERQTEwgbmF0dXJlIGFuZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHNwZWNpZmljIHRvIHRoYXQgcGFydGljdWxhciBkZXZpY2UuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYW5kIGNvbmZpcm0hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoyMC43MjM4OTcxMTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgWkwzMDczWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBEUExMXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gICA4OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXFxuICAxMTpcXHRcXHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcXG4gIDEyOlxcdFxcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWkwzMDczWF9JMkNcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAyMDpcXHRcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoyMC43MjM5NjA3NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyODU4NzYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLY29uZmlnIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBaTDMwNzNYYCBvcHRpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBjb25kaXRpb25hbCwgb25seSBzaG93aW5nIHVwIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQuIEJ1dCB3YWl0LCBpcyBpdCBqdXN0IGEgcGxhaW4gYHNlbGVjdGAgc3RhdGVtZW50IG9yIGEgYHRyaXN0YXRlYD8gQWgsIGl0IGxvb2tzIGxpa2UgYSBgdHJpc3RhdGUgXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCIgaWYgQ09NUElMRV9URVNUYC4gU28sIHRoYXQgbWVhbnMgdGhpcyBlbnRpcmUgc2VjdGlvbiAqb25seSogYmVjb21lcyB2aXNpYmxlIGluIHRoZSBtZW51IGlmIGBDT01QSUxFX1RFU1RgIGlzIHRydWUuIElmIG5vdCwgaXQncyBoaWRkZW4gZnJvbSB2aWV3LiBXaGljaCBhbHNvIG1lYW5zIGl0J3Mgc2VsZWN0YWJsZSBhcyBcInlcIiwgXCJtXCIgb3IgXCJuXCIgaWYgdGhlIHZpc2liaWxpdHkgaXMgdHJ1ZS5cblxuQnV0IGhvbGQgb24sIHRoYXQgZG9lc24ndCB1c3VhbGx5IGxvb2sgbGlrZSBteSBvdGhlciBLY29uZmlnIG9wdGlvbnMuIFR5cGljYWxseSwgSSdkIHNlZSBzb21ldGhpbmcgbGlrZSBgZGVwZW5kcyBvbiBJMkNgIG9yIHNpbWlsYXIgdG8gZ2F0ZSB0aGUgb3B0aW9uIGJhc2VkIG9uIHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHR5cGljYWwgcGF0dGVybiB1c2VkIGluIHRoZSBQVFAgZHJpdmVyLCBzbyBsZXQgbWUgcXVpY2tseSBuYXZpZ2F0ZSB0byBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBoYW5kbGluZyBvZiBzb21ldGhpbmcgbGlrZSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gSnVzdCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6MjUuMTUyNTUxNDMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcXFwiXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXFxuIDIxMzpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE1URFxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfODI1MFxcbiAyMTY6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAyMTc6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDIxODpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gMjE5OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAyMjA6XFx0XFx0c2VsZWN0IERQTExcXG4gMjIxOlxcdFxcdGhlbHBcXG4gMjIyOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBhbiBPcGVuQ29tcHV0ZSB0aW1lIGNhcmQuXFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdCAgVGhlIE9wZW5Db21wdXRlIHRpbWUgY2FyZCBpcyBhbiBhdG9taWMgY2xvY2sgYWxvbmcgd2l0aFxcbiAyMjU6XFx0XFx0ICBhIEdQUyByZWNlaXZlciB0aGF0IHByb3ZpZGVzIGEgR3JhbmRtYXN0ZXIgY2xvY2sgc291cmNlXFxuIDIyNjpcXHRcXHQgIGZvciBhIFBUUCBlbmFibGVkIG5ldHdvcmsuXFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy50aW1pbmdjYXJkLmNvbS9cXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoyNS4xNTI2NDkxOTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4NzQ1MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEUExMIERyaXZlciBTZWxlY3Rpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGFsbCB0aGUgcG9zc2libGUgcGF0aHMgdG8gc2VsZWN0IGEgRFBMTCBkcml2ZXIuIExldCBtZSBzZWUuLi4gSSd2ZSBnb3QgdGhlc2UgZHJpdmVycyBpZGVudGlmaWVkOiBgSUNFYCwgYE1MWDVfRFBMTGAsIGBQVFBfMTU4OF9DTE9DS19PQ1BgLCBhbmQgYFpMMzA3M1hgLiBSaWdodCwgdGhlIGZpcnN0IHR3bywgYElDRWAgYW5kIGBNTFg1X0RQTExgLCBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkhvbGQgb24sIEkgc2VlIHRoYXQgZW5hYmxpbmcgYFBUUF8xNTg4X0NMT0NLX09DUGAgKmFsc28qIGVuYWJsZXMgYERQTExgISBJbnRlcmVzdGluZy4gQ2FuIEkgZ2V0IGF3YXkgd2l0aCBqdXN0IGRpcmVjdGx5IGVuYWJsaW5nIGBEUExMYD8gTm9wZSwgaXQgbG9va3MgbGlrZSBgRFBMTGAgaXMganVzdCBhIGJvb2xlYW4sIG5vIGNvbmZpZyBvcHRpb24sIHNvIG5vIGRpcmVjdCBzZWxlY3Rpb24uXG5cbk9rYXksIGxldCdzIGV4cGxvcmUgYFBUUF8xNTg4X0NMT0NLX09DUGAgdGhlbi4gSG1tLCB0aGF0IG9uZSBoYXMgYSB3aG9sZSBzbGV3IG9mIGRlcGVuZGVuY2llczogYFBDSWAsIGBJMkNgLCBgTVREYCwgYFNFUklBTF84MjUwYCwgYW5kIGBDT01NT05fQ0xLYC5cblxuTm93LCB3aGF0IGFib3V0IGBaTDMwNzNYYD8gSXQgcmVxdWlyZXMgYE5FVGAuIEJ1dCB3YWl0IGEgc2Vjb25kLCB0aGVyZSdzIHRoYXQgYHRyaXN0YXRlYCBkZWNsYXJhdGlvbiB3aXRoIGFuIGBpZiBDT01QSUxFX1RFU1RgLiBUaGF0J3Mgd2VpcmQuIERvZXMgdGhhdCBtZWFuIGl0J3Mgb25seSBzZWxlY3RhYmxlIGlmIEkndmUgZW5hYmxlZCBgQ09NUElMRV9URVNUYD8gTm8sIG5vLCBgaWYgQ09NUElMRV9URVNUYCBqdXN0IG1lYW5zIHRoZSAqcHJvbXB0KiBpcyB2aXNpYmxlIG9ubHkgd2hlbiBgQ09NUElMRV9URVNUYCBpcyB0cnVlLiBJZiBgQ09NUElMRV9URVNUYCBpcyBmYWxzZSwgaXQncyBub3QgdmlzaWJsZSwgYnV0IGl0IHdvbid0IGJlIHNlbGVjdGFibGUgKmFueXdheSouIEJ1dCB3aHkgd291bGRuJ3QgaXQgdXNlIHNvbWV0aGluZyBsaWtlIGBkZXBlbmRzIG9uIENPTVBJTEVfVEVTVCB8fCAuLi5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjMyLjI0MDEwNDU4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgWkwzMDczWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBEUExMXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gICA4OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXFxuICAxMTpcXHRcXHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcXG4gIDEyOlxcdFxcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWkwzMDczWF9JMkNcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAyMDpcXHRcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiAgMjE6XFx0XFx0c2VsZWN0IFpMMzA3M1hcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgVGhpcyBpcyBJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxcbiAgMjQ6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMjc6XFx0XFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaTDMwNzNYX1NQSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjMyLjI0MDIxMDgwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc4NDgxMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgRFBMTCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBaTDMwNzNYX0kyQ2AuIEl0ICpzZWxlY3RzKiBgWkwzMDczWGAsIHdoaWNoLCBpbiB0dXJuLCBzZWxlY3RzIHRoZSBgRFBMTGAgZmVhdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgY2FzY2FkaW5nIGRvd24gdGhlIGxpbmUuIEkgc2VlIHRoYXQgYFpMMzA3M1hfSTJDYCByZWxpZXMgb24gYm90aCBgSTJDYCBhbmQgYE5FVGAgYmVpbmcgZW5hYmxlZC4gU28sIHRoZSBvYnZpb3VzIGFwcHJvYWNoIGlzIHRvIHNpbXBseSBlbmFibGUgYFpMMzA3M1hfSTJDYCwgd2hpY2ggc2hvdWxkIGdpdmUgdXMgdGhlIGBEUExMYCBmdW5jdGlvbmFsaXR5IHdlJ3JlIGFmdGVyLlxuXG5CdXQsIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzOiBjYW4gd2UgYWN0dWFsbHkgKnVzZSogdGhlIGBEUExMYCBmcm9tIHVzZXJzcGFjZT8gV2UgbmVlZCB0aGF0IGxldmVsIG9mIGFjY2VzcyB0byBiZSB1c2VmdWwuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IG5ldGxpbmssIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBBaCwgeWVzISBgZHBsbF9uZXRsaW5rLmNgIGlzIHJpbmdpbmcgYSBiZWxsIC0gdGhhdCBzdWdnZXN0cyBpdCByZWdpc3RlcnMgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBUaGF0J3MgcHJlY2lzZWx5IHdoYXQgd2UgbmVlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgdGhlIHBhdGggb2YgaW50ZXJhY3Rpb24gdG8gdXNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjM2LjkxODY5Mzg3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTEyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmxfcmVnaXN0ZXJfZmFtaWx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTExODY9c3RhdGljIGludCBfX2luaXQgZHBsbF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTE4OS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE5MDpcXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2ZHBsbF9ubF9mYW1pbHkpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTkxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjM3LjAyMDYxMDMyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcxMzY0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gRFBMTCBLZXJuZWwgTW9kdWxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGRwbGxfaW5pdGAsIHJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24uIEl0J3MgdGhlIG9uZSB0aGF0IGhhbmRsZXMgcmVnaXN0ZXJpbmcgdGhlIG5ldGxpbmsgZmFtaWx5LCB5ZXMsIHRoYXQgc291bmRzIHJpZ2h0LiBHb29kLiBBbmQgc2luY2UgYERQTExgIGl0c2VsZiBpcyBqdXN0IGEgYm9vbGVhbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdHMgcHJlc2VuY2UgaW4gdGhlIGtlcm5lbCBjb21lcyBkb3duIHRvIHdoZXRoZXIgb3Igbm90IGl0J3Mgc2VsZWN0ZWQgZHVyaW5nIGNvbXBpbGF0aW9uIOKAkyBhIGNsYXNzaWMgY29uZmlndXJhdGlvbiBmbGFnLiBIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYGRwbGxfaW5pdGAgcmluZ3MgYSBiZWxsIGFzIGFuIGBpbml0Y2FsbGAuIFJpZ2h0LCBvZiBjb3Vyc2UsIGl0IG1ha2VzIHNlbnNlIGl0IHdvdWxkIGJlLiBUaGF0IHdvdWxkIGJlIGhvdyBpdCdzIGJyb3VnaHQgaW50byBhY3Rpb24uIE9rYXksIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXQgbWlnaHQgYmUgd29ydGggYSBxdWljayBsb29rIGF0IHRoZSBgZHJpdmVycy9kcGxsL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGF0IHNob3VsZCBoYXZlIGFsbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzo0MS4wOTE5Nzg1NjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIERQTEwgZHJpdmVycy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RQTEwpICAgICAgKz0gZHBsbC5vXFxuICAgNzpcXHRkcGxsLXkgICAgICAgICAgICAgICAgICArPSBkcGxsX2NvcmUub1xcbiAgIDg6XFx0ZHBsbC15ICAgICAgICAgICAgICAgICAgKz0gZHBsbF9uZXRsaW5rLm9cXG4gICA5OlxcdGRwbGwteSAgICAgICAgICAgICAgICAgICs9IGRwbGxfbmwub1xcbiAgMTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjQxLjA5MjEyNTU4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjIwMTI2NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIERQTEwgTmV0bGluayBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0RQTExgIGVuYWJsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBkcGxsX2NvcmUub2AgYW5kIGBkcGxsX25ldGxpbmsub2AuIFRoaXMgcGF0Y2ggdG91Y2hlcyBib3RoIG9mIHRob3NlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBkcGxsX2NvcmUuY2AgYW5kIGBkcGxsX25ldGxpbmsuY2AuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBjbHVzdGVyZWQgYXJvdW5kIGBkcGxsX3Bpbl9yZWdpc3RlcmAsIGBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3RgLCBgZHBsbF9wcml2YCwgYGRwbGxfZGV2aWNlX29wc2AsIGFuZCB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIHdpdGhpbiBgZHBsbF9uZXRsaW5rLmNgLlxuXG5BaGEsIHRob3NlIG5ldGxpbmsgY2FsbGJhY2tzIGFyZSBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoaXMsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGFuIGlzc3VlIHdoZXJlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMgd2VyZSBiZWluZyBhY2Nlc3NlZCwgYnkgYWRkaW5nIGEgY2hlY2sgdG8gc2tpcCB0aGVtIChpLmUuLCB3aGVuIGBkcGxsX2RldmljZV9vcHMoZHBsbCkgPT0gTlVMTGApLiBUaGF0IHNvdW5kcyBsaWtlIGEgYnVnIGZpeCwgYW5kIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4gSXQncyBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgaXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYGRwbGxfY21kX3Bpbl9nZXRfb25lYCwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgLCBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGAsIGBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldGAsIGFuZCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gY3JhZnRpbmcgZnV6emluZyBoYXJuZXNzZXMsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0byBlbnN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQncyBzZWUuLi4gYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBpcyB1cCBmaXJzdC4uLiBhbmQgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc291cmNlIGZpbGUgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjg0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6NDcuNzEyMjU0ODM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzMzQyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9jbWRfcGluX2dldF9vbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz03MTI9c3RhdGljIGludFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo3MTM6ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTcxNC1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz05MTA9ZHBsbF9waW5fZXZlbnRfc2VuZChlbnVtIGRwbGxfY21kIGV2ZW50LCBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy05MjUtXFx0XFx0Z290byBlcnJfZnJlZV9tc2c7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjkyNjpcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkyNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE4NjU9aW50IGRwbGxfbmxfcGluX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTg4Mi1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE4ODM6XFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUobXNnLCBwaW4sIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4ODQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE4OTM9aW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MTMtXFx0XFx0fVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTE0OlxcdFxcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKHNrYiwgcGluLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkxNS1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjQ3LjgyNDU5MzcyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM4Mjg1NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIERQTEwgUGluIEFjY2VzcyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBEUExMIHBpbiBhY2Nlc3MgZnVuY3Rpb25zLiBJIHNlZSBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFuZCBpbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nLCBcIldhaXQgYSBtaW51dGUsIHRoYXQncyBzdGF0aWMsIGlzbid0IGl0P1wiIEFuZCB0aGF0J3MgdXN1YWxseSBhIHJlZCBmbGFnIGZvciBtZS4gV2UgZ2VuZXJhbGx5IHdhbnQgdG8gdXRpbGl6ZSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIGJldHRlciBmbGV4aWJpbGl0eSBhbmQgcmV1c2FiaWxpdHksIGZvciBlYXNpZXIgaW50ZWdyYXRpb24gaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBTbywgSSdtIGdvaW5nIHRvIHN0ZWVyIGNsZWFyIG9mIHRoYXQgb25lIGlmIGF0IGFsbCBwb3NzaWJsZS5cblxuTm93LCBsZXQgbWUgY29tcGFyZSB0aGF0IHRvIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gVGhvc2UgYXJlICpub24qLXN0YXRpYy4gVGhhdCdzIGEgZ29vZCBzdGFydC4gVGhvc2UgYXJlIHRoZSBvbmVzIEknbGwgYmUgbGVhbmluZyB0b3dhcmRzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aG9zZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBjYWxscy5cblxuVG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgSSBzaG91bGQgYWxzbyBjaGVjayBob3cgdGhlIGZyZXF1ZW5jeSBpcyBzZXQuIExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgZHBsbF9waW5fZnJlcV9zZXRgIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgdGhhdCBvbmUgcGxheXMgbmljZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjUyLjE2Mjg4NTUwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NTczOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9waW5fZnJlcV9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMDk2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTA5NzpkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA5OC1cXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNjg0PWRwbGxfcGluX3NldF9mcm9tX25sYXR0cihzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNjkyLVxcdFxcdGNhc2UgRFBMTF9BX1BJTl9GUkVRVUVOQ1k6XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE2OTM6XFx0XFx0XFx0cmV0ID0gZHBsbF9waW5fZnJlcV9zZXQocGluLCBhLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNjk0LVxcdFxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjUyLjIzMTM0Nzk1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzExMjAxMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipTdGF0aWMgRnVuY3Rpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIGBkcGxsX3Bpbl9mcmVxX3NldGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUuIE5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGNhbGxlZCB3aXRoaW4gYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAuIFNpbmNlIGBkcGxsX3Bpbl9mcmVxX3NldGAgaXMgc3RhdGljLCBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0cyBjYWxsaW5nIGZ1bmN0aW9uLCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRpYyBkZXNpZ25hdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGZpdCBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJdCBkaWN0YXRlcyBob3cgYW5kIHdoZXJlIHRoZXkgYXJlIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBkZWNsYXJhdGlvbi4uLiBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6NTUuOTQyNTUyMjM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU2MTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNjgzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTY4NDpkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHIoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2ODUte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE5MzQ9aW50IGRwbGxfbmxfcGluX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkzNy1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTkzODpcXHRyZXR1cm4gZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyKHBpbiwgaW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MzktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzo1Ni4wMjYxMjQxNjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NzkwMDE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIERQTEwgTW9kdWxlIFRob3VnaHRzKipcblxuT2theSwgc28gYGRwbGxfbmxfcGluX3NldF9kb2l0YCBpcyB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBwaW4tc2V0dGluZyBwcm9jZXNzLiBUaGF0J3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNvbmZpZ3VyYXRpb25zIGFyZSBtYWRlLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoZSBmbG93LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBmZXcgZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcGluIHNldHRpbmdzOiBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCwgYW5kIGBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldGAuIE15IGh1bmNoIGlzIHRoYXQgdGhleSdyZSBhbGwgY2FsbGVkIGZyb20gd2l0aGluIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoYXQgYG5sYXR0cmAgaXMgdGhlIE5ldGxpbmsgYXR0cmlidXRlIGRhdGEgc3RydWN0dXJlLiBJdCdzIGxpa2VseSBob3cgdGhlIGRyaXZlciBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gc2V0IHVwIHRob3NlIHBpbnMgZnJvbSB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG5cbkFuZCwgb2YgY291cnNlLCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IGBkcGxsX3Bpbl9yZWdpc3RlcmAuIEl0IHdvdWxkIGNvbnRhaW4gYWxsIHRoZSBkYXRhIHJlZ2FyZGluZyBhdmFpbGFibGUgcGlucywgdGhlaXIgcG9zc2libGUgc2V0dGluZ3MsIGFuZCB0aGVpciBwYXJlbnQgZGV2aWNlcy4gSXQgd291bGQgYmUgbXkgZmlyc3Qgc3RvcCBmb3IgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUgYXZhaWxhYmxlIHBpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODc4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjAxLjMwNDAyNzM0MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTU0ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9ODQxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6ODQyOl9fZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtODQzLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSlcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NjMtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg2NDogKiBkcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIHBpbiBpbiB0aGUgc3Vic3lzdGVtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg2NS0gKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz04NzU9aW50XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg3NjpkcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NzctXFx0XFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTA5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MTA6XFx0cmV0ID0gX19kcGxsX3Bpbl9yZWdpc3RlcihkcGxsLCBwaW4sIG9wcywgcHJpdiwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxMS1vdXRfdW5sb2NrOlxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxNS19XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjkxNjpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWdpc3Rlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxNy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz05ODU9aW50IGRwbGxfcGluX29uX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTAwNC1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGFyZW50LVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDA1OlxcdFxcdHJldCA9IF9fZHBsbF9waW5fcmVnaXN0ZXIocmVmLVxcdTAwM2VkcGxsLCBwaW4sIG9wcywgcHJpdiwgcGFyZW50KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTAwNi1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjAxLjQxNTE4Nzg2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTY2MTE0ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEUExMIFBpbiBSZWdpc3RyYXRpb24gYW5kIE5ldGxpbmsgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgZHJpdmVycywgbWFraW5nIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIHRodXMsIEkgc2hvdWxkIHplcm8gaW4gb24gdGhlIG5ldGxpbmsgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOlxuXG4qICAgYGRwbGxfbmxfcGluX2dldF9kb2l0YFxuKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YFxuKiAgIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGBcbiogICBgZHBsbF9waW5fcmVnaXN0ZXJgXG5cbkxldCBtZSBtYWtlIHN1cmUgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBuZXRsaW5rIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiBhZmZlY3RlZC4gQWgsIGluIGBkcGxsX25ldGxpbmsuY2AsIEkgc2VlIHRoYXQgYGRwbGxfbXNnX2FkZF9waW5fZHBsbHNgIGhhcyBiZWVuIG1vZGlmaWVkLiBSaWdodCwgdGhhdCdzIGNhbGxlZCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBpbnZva2VkIGJ5IGJvdGggYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLiBJdCBsb29rcyBsaWtlIGBkcGxsX3Bpbl9ldmVudF9zZW5kYCBhbHNvIGNhbGxzIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAuIENvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llcywgbXkgaW5pdGlhbCBjaG9pY2VzIGZvciB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYWNjdXJhdGUuXG5cbldhaXQgYSBtb21lbnQuLi4gd2hhdCBhYm91dCBgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0YD8gSXMgdGhhdCByZWxldmFudD8gT2gsIGl0J3Mgc3RhdGljLiBQcm9iYWJseSBub3QgYSBmb2N1cy4gQW5kIHdoYXQgYWJvdXQgYGRwbGxfcHJpdmAgYW5kIGBkcGxsX2RldmljZV9vcHNgPyBUaG9zZSBhcmUgZXhwb3J0ZWQsIHNvIHRoZXkgbWlnaHQgcGxheSBhIHJvbGUgaW4gdGhlIHN5c3RlbS4gQnV0IHRoZSBtYWluIGludGVyYWN0aW9uIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdGhlIHBpbi1yZWxhdGVkIG9wZXJhdGlvbnMgd2l0aCBuZXRsaW5rLCB3aGljaCBtYWtlIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAsIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCwgYGRwbGxfbmxfcGluX3NldF9kb2l0YCwgYW5kIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdGhlIHByaW1hcnkgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NDgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MDcuOTgxMzA1ODU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODE0Njk1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGRwbGxfcHJpdlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MDguMDQ5NDY1NjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTM1NTI5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBkcGxsX3ByaXZgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGRwbGxfcHJpdmAuIFdlJ3JlIGxpa2VseSBhdCBhIHBvaW50IHdoZXJlIHdlIG5lZWQgdG8gZXhhbWluZSB0aGlzIHByaXZhdGUgZnVuY3Rpb24gb3IgbW9kdWxlLiBJJ20gYXNzdW1pbmcgd2UndmUgaXNvbGF0ZWQgYSBwcm9ibGVtIGFyZWEsIGFuZCBgZHBsbF9wcml2YCBpcyBhIGtleSBjb21wb25lbnQgd2l0aGluIGl0LiBJJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGVpdGhlciBjb25maXJtIGEgaHlwb3RoZXNpcyBhYm91dCBpdHMgcm9sZSwgb3IgdG8gaG9wZWZ1bGx5IHVuY292ZXIgc29tZSBmdXJ0aGVyIGluZm9ybWF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzg0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MTEuMDYzMDIyNjEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY1ODI4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGRwbGxfcHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjExLjEzMDY4NzA4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc2OTk2MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRQTEwgUHJpdmF0ZSBGdW5jdGlvbiBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBkcGxsX2NvcmUuY2AgZmlsZSBhZ2Fpbi4gVGltZSB0byBnZXQgZG93biBhbmQgZGlydHkgd2l0aCBgZHBsbF9wcml2YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIOKAkyBzcGVjaWZpY2FsbHksIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgcHJpdmF0ZSB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGluIHRoYXQgRFBMTCBjb3JlLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2UgaGVyZSByZWdhcmRpbmcgY2xhdXNlIHNlbGVjdGlvbiwgY29uZmxpY3QgYW5hbHlzaXMsIG9yIHBlcmhhcHMgZXZlbiB0aGUgbGl0ZXJhbCBhc3NpZ25tZW50IHN0cmF0ZWdpZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLiBJdCdzIHRpbWUgdG8gZmluZCB0aGUgZGV0YWlscyB0aGF0IGFyZSBoaWRkZW4gZnJvbSBjYXN1YWwgdmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODoxNC42MDc2ODU1NjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODA4NzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3ByaXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0xMDg4PWRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA5My1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTA5NDp2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDk1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0xMTE1PWRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maXJzdChzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTEyNC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTEyNTp2b2lkICpkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MTQuNzE1Nzc4NTQ3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDM1MjEwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRFBMTF9QUklWIEFjY2VzcyAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgZHBsbF9wcml2YCBhbmQgaXQncyBmbGFnZ2VkIGFzIG5vdCBleHBvcnRlZC4gVGhhdCBzdHJpa2VzIG1lIGFzIG9kZCwgYW5kIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCdzIGludGVudGlvbmFsIG9yIGlmIHNvbWV0aGluZydzIGdvbmUgYXdyeS4gTXkgaW5zdGluY3QgaXMgdG8gcXVpY2tseSBjaGVjayB0aGUgZW5kIG9mIHRoZSBgZHBsbF9wcml2YCBkZWNsYXJhdGlvbi4gVGhpcyBzaG91bGQgaW1tZWRpYXRlbHkgdGVsbCBtZSBpZiBpdCdzIGdvdCB0aGUgdXN1YWwgZXh0ZXJuIFwiQ1wiIHZpc2liaWxpdHksIG9yIHBlcmhhcHMgdGhlcmUncyBhIHNwZWNpZmljIHJlYXNvbiBpdCdzIHNjb3BlZCB0aGF0IHRpZ2h0bHkuIEknbSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgd2h5IGl0J3MgYmVoYXZpbmcgdGhpcyB3YXkuIExldCdzIHNlZSB3aGF0IHRoZSBkZWZpbml0aW9uIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0ODIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODoxOS40NTkzMDQwMzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk0OlxcdHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuMTA5NTpcXHR7XFxuMTA5NjpcXHRcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuMTA5NzpcXHRcXG4xMDk4OlxcdFxcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcXG4xMDk5OlxcdFxcdGlmICghcmVnKVxcbjExMDA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTEwMTpcXHRcXHRyZXR1cm4gcmVnLVxcdTAwM2Vwcml2O1xcbjExMDI6XFx0fVxcbjExMDM6XFx0XFxuMTEwNDpcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpkcGxsX2RldmljZV9vcHMoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxcbjExMDU6XFx0e1xcbjExMDY6XFx0XFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XFxuMTEwOTpcXHRcXHRpZiAoIXJlZylcXG4xMTEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMTE6XFx0XFx0cmV0dXJuIHJlZy1cXHUwMDNlb3BzO1xcbjExMTI6XFx0fVxcbjExMTM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjE5LjQ1OTQ2MjIwOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQzMzg3MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyB0aGUgRXhwb3J0IG9mIERQTEwgQ29yZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgRFBMTCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGUgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGV5J3JlICpub3QqIGV4cG9ydGVkLCBhbmQgdGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IGNoZWNrLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gd2hlcmUgKmFyZSogdGhleSBkZWZpbmVkPyBIbW0sIGxldCBtZSBjaGVjayB0aGUgaGVhZGVyIGZpbGVzLiBBaCwgcmlnaHQsIGxvb2tzIGxpa2UgdGhleSdyZSBkZWNsYXJlZCB3aXRoaW4gYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaGAuIFRoYXQgY291bGQgY2hhbmdlIHRoaW5ncy4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgbGlua2FnZSB3b3JrcyBmcm9tIHRoYXQgaGVhZGVyLiBQZXJoYXBzIHRoZXJlJ3MgYSBtYWNybyBvciBpbmxpbmUgZGVmaW5pdGlvbiBpbiB0aGVyZSwgb3IgbWF5YmUgdGhlIGNvcmUgaXRzZWxmIGlzIG5vdCB0aGUgcHJvYmxlbSwgYnV0IGluc3RlYWQgYW4gaW1wb3J0IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MjUuNDAyODUxOTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDQzMDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3ByaXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU2OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTEwODg9ZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDkzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDk0OnZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwOTUte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTExMTU9ZHBsbF9waW5fcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI0LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTI1OnZvaWQgKmRwbGxfcGluX29uX2RwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExMjYtXFx0XFx0XFx0ICAgIHN0cnVjdCBkcGxsX3BpbiAqcGluKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oPTgxPXN0cnVjdCBkcGxsX3Bpbl9yZWYge1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oLTg5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaDo5MDp2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmg6OTE6dm9pZCAqZHBsbF9waW5fb25fZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaC05Mi12b2lkICpkcGxsX3Bpbl9vbl9waW5fcHJpdihzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4pO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTExNT1kcGxsX21zZ19hZGRfbW9kZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTIxLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjI6XFx0cmV0ID0gb3BzLVxcdTAwM2Vtb2RlX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFxcdTAwMjZtb2RlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMzI9ZHBsbF9tc2dfYWRkX21vZGVfc3VwcG9ydGVkKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDAtXFx0aWYgKG9wcy1cXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDE6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VzdXBwb3J0ZWRfbW9kZXNfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgbW9kZXMsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDgtXFx0XFx0ICovXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0OTpcXHRcXHRyZXQgPSBvcHMtXFx1MDAzZW1vZGVfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm1vZGUsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE2ND1kcGxsX21zZ19hZGRfcGhhc2Vfb2Zmc2V0X21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3MS1cXHRpZiAob3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9zZXQgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9nZXQpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTcyOlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTczLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c3RhdGUsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTg0PWRwbGxfbXNnX2FkZF9mcmVxX21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MS1cXHRpZiAob3BzLVxcdTAwM2VmcmVxX21vbml0b3Jfc2V0IFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlZnJlcV9tb25pdG9yX2dldCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTI6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VmcmVxX21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkzLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c3RhdGUsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjA0PWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXRfYXZnX2ZhY3RvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIxMi1cXHRpZiAob3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfYXZnX2ZhY3Rvcl9nZXQpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjEzOlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X2F2Z19mYWN0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZmFjdG9yLCBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTIyNT1kcGxsX21zZ19hZGRfbG9ja19zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIzMi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjMzOlxcdHJldCA9IG9wcy1cXHUwMDNlbG9ja19zdGF0dXNfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNnN0YXR1cyxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjM0LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZzdGF0dXNfZXJyb3IsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjQ5PWRwbGxfbXNnX2FkZF90ZW1wKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNTctXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjI1ODpcXHRyZXQgPSBvcHMtXFx1MDAzZXRlbXBfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNnRlbXAsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTI1OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTI2OD1kcGxsX21zZ19hZGRfY2xvY2tfcXVhbGl0eV9sZXZlbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjc3LVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoyNzg6XFx0cmV0ID0gb3BzLVxcdTAwM2VjbG9ja19xdWFsaXR5X2xldmVsX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHFscywgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjc5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9Mjg5PWRwbGxfbXNnX2FkZF9waW5fcHJpbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yOTktXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMDpcXHRyZXQgPSBvcHMtXFx1MDAzZXByaW9fZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMTpcXHRcXHRcXHQgICAgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2cHJpbywgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzAyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MzExPWRwbGxfbXNnX2FkZF9waW5fb25fZHBsbF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zMjEtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMyMjpcXHRyZXQgPSBvcHMtXFx1MDAzZXN0YXRlX29uX2RwbGxfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMyMzpcXHRcXHRcXHRcXHQgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNnN0YXRlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zMjQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0zMzM9ZHBsbF9tc2dfYWRkX3Bpbl9vcGVyc3RhdGUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ0LVxcdHJldCA9IG9wcy1cXHUwMDNlb3BlcnN0YXRlX29uX2RwbGxfZ2V0KHBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzQ1OlxcdFxcdFxcdFxcdFxcdCAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM0NjpcXHRcXHRcXHRcXHRcXHQgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ3LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm9wZXJzdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0zNTc9ZHBsbF9tc2dfYWRkX3Bpbl9kaXJlY3Rpb24oc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzY1LVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzozNjY6XFx0cmV0ID0gb3BzLVxcdTAwM2VkaXJlY3Rpb25fZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM2NzpcXHRcXHRcXHRcXHQgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2ZGlyZWN0aW9uLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zNjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0zNzc9ZHBsbF9tc2dfYWRkX3Bpbl9waGFzZV9hZGp1c3Qoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzg3LVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzozODg6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM4OTpcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zOTAtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwaGFzZV9hZGp1c3QsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NDAwPWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDEwLVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MTE6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQxMjpcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2cGhhc2Vfb2Zmc2V0LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MTMtXFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NDIzPXN0YXRpYyBpbnQgZHBsbF9tc2dfYWRkX2ZmbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MzMtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQzNDpcXHRyZXQgPSBvcHMtXFx1MDAzZWZmb19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYocmVmLVxcdTAwM2VkcGxsLCBwaW4pLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MzU6XFx0XFx0XFx0ICAgcmVmLVxcdTAwM2VkcGxsLCBkcGxsX3ByaXYocmVmLVxcdTAwM2VkcGxsKSwgXFx1MDAyNmZmbywgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDM2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz00NDk9c3RhdGljIGludCBkcGxsX21zZ19hZGRfbWVhc3VyZWRfZnJlcShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00NjEtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2MjpcXHRyZXQgPSBkZXZfb3BzLVxcdTAwM2VmcmVxX21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDYzLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00NjctXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2ODpcXHRyZXQgPSBvcHMtXFx1MDAzZW1lYXN1cmVkX2ZyZXFfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2OTpcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2bWVhc3VyZWRfZnJlcSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDcwLVxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTQ4Mj1kcGxsX21zZ19hZGRfcGluX2ZyZXEoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDkyLVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0OTM6XFx0cmV0ID0gb3BzLVxcdTAwM2VmcmVxdWVuY3lfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ5NDpcXHRcXHRcXHRcXHQgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2ZnJlcSwgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDk1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NTIzPWRwbGxfbXNnX2FkZF9waW5fZXN5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTMzLVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1MzQ6XFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTM1OlxcdFxcdFxcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2ZXN5bmMsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTUzNi1cXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTU2OD1kcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTU4MC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTgxOlxcdHBpbl9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTU4Mi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zLCBpbmRleCwgcmVmX3N5bmNfcGluKSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTg0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1ODU6XFx0XFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTg2LVxcdFxcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NjIzPWRwbGxfbXNnX2FkZF9waW5fcGFyZW50cyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy02MzgtXFx0XFx0cHBpbiA9IHJlZi1cXHUwMDNlcGluO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo2Mzk6XFx0XFx0cGFyZW50X3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbF9yZWYtXFx1MDAzZWRwbGwsIHBwaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy02NDAtXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VzdGF0ZV9vbl9waW5fZ2V0KHBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz05OTA9ZHBsbF9tb2RlX3NldChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBubGF0dHIgKmEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAwMy1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTAwNDpcXHRyZXQgPSBvcHMtXFx1MDAzZW1vZGVfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm9sZF9tb2RlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDA1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDEyLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDEzOlxcdHJldCA9IG9wcy1cXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG1vZGVzLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDE0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDI0LVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDI1OlxcdHJldHVybiBvcHMtXFx1MDAzZW1vZGVfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgbW9kZSwgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAyNi19XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTAyOT1kcGxsX3BoYXNlX29mZnNldF9tb25pdG9yX3NldChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBubGF0dHIgKmEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAzOS1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNDA6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2b2xkX3N0YXRlLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDQxLVxcdFxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNDgtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNDk6XFx0cmV0dXJuIG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3Jfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgc3RhdGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNTAtXFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwNTQ9ZHBsbF9waGFzZV9vZmZzZXRfYXZnX2ZhY3Rvcl9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNjUtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNjY6XFx0cmV0dXJuIG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X2F2Z19mYWN0b3Jfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZmFjdG9yLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA3MT1kcGxsX2ZyZXFfbW9uaXRvcl9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwODItXFx0fVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDgzOlxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcV9tb25pdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFxcdTAwMjZvbGRfc3RhdGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwODQtXFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA5Mi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTA5MzpcXHRyZXR1cm4gb3BzLVxcdTAwM2VmcmVxX21vbml0b3Jfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgc3RhdGUsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwOTQtfVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwOTc9ZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMC1cXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMxOlxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMyOlxcdFxcdFxcdFxcdCBkcGxsX3ByaXYoZHBsbCksIFxcdTAwMjZvbGRfZnJlcSwgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMy1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTE0Ni1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTQ3OlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTQ4OlxcdFxcdFxcdFxcdFxcdCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNDktXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNjktXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTE3MDpcXHRcXHRpZiAob3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjExNzE6XFx0XFx0XFx0XFx0ICAgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX2ZyZXEsIGV4dGFjaykpXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNzItXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMTc4PWRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjA4LVxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMDk6XFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIxMDpcXHRcXHRcXHQgICAgIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNmVzeW5jLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjI2LVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMjc6XFx0XFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTIyOC1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjM0LVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMzU6XFx0XFx0cGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjM2OlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlZXN5bmNfc2V0KHBpbiwgcGluX2RwbGxfcHJpdiwgZHBsbCwgZHBsbF9wcml2KGRwbGwpLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjM3LVxcdFxcdFxcdFxcdCAgICAgIGZyZXEsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI1MS1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjUyOlxcdFxcdHZvaWQgKnBpbl9kcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTMtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI2MS1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjYyOlxcdFxcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTI2MzpcXHRcXHRpZiAob3BzLVxcdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNjQtXFx0XFx0XFx0XFx0ICAgZXN5bmMuZnJlcSwgZXh0YWNrKSlcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMjcxPWRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzA1LVxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMDY6XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMwNy1cXHRcXHRcXHRcXHRyZWZfc3luY19waW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMDg6XFx0XFx0XFx0XFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzMDktXFx0XFx0XFx0XFx0XFx1MDAyNm9sZF9zdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzIyLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMjM6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMyNC1cXHRcXHRcXHRcXHRcXHRyZWZfc3luY19waW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMjU6XFx0XFx0XFx0XFx0XFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzMjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVmX3N5bmNfcGluKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzQ4LVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzNDk6XFx0XFx0aWYgKG9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNTAtXFx0XFx0XFx0XFx0ICAgICAgcmVmX3N5bmNfcGluLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMzUxOlxcdFxcdFxcdFxcdCAgICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzUyLVxcdFxcdFxcdFxcdCAgICAgIG9sZF9zdGF0ZSwgZXh0YWNrKSlcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMzg0PWRwbGxfcGluX29uX3Bpbl9zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHUzMiBwYXJlbnRfaWR4LFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0MTQtXFx0XFx0cGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9waW5fcHJpdihwYXJlbnQsIHBpbik7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0MTU6XFx0XFx0cGFyZW50X3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbF9yZWYtXFx1MDAzZWRwbGwsIHBhcmVudCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0MTYtXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VzdGF0ZV9vbl9waW5fc2V0KHBpbiwgcGluX3ByaXYsIHBhcmVudCwgcGFyZW50X3ByaXYsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQyNz1kcGxsX3Bpbl9zdGF0ZV9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDQ3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ0ODpcXHRyZXQgPSBvcHMtXFx1MDAzZXN0YXRlX29uX2RwbGxfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0NDk6XFx0XFx0XFx0XFx0ICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHN0YXRlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDUwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQ1OD1kcGxsX3Bpbl9wcmlvX3NldChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NzQtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDc1OlxcdHJldCA9IG9wcy1cXHUwMDNlcHJpb19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ3NjpcXHRcXHRcXHQgICAgZHBsbF9wcml2KGRwbGwpLCBwcmlvLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQ4NT1kcGxsX3Bpbl9kaXJlY3Rpb25fc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUwMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDM6XFx0cmV0ID0gb3BzLVxcdTAwM2VkaXJlY3Rpb25fc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDQ6XFx0XFx0XFx0XFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZGlyZWN0aW9uLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTA1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTUxMz1kcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTU0LVxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1NTU6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1NTY6XFx0XFx0XFx0XFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm9sZF9waGFzZV9hZGosXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1NTctXFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU3Mi1cXHRcXHRyZXQgPSBvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNTczOlxcdFxcdFxcdFxcdFxcdCAgICBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU3NDpcXHRcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBwaGFzZV9hZGosXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1NzUtXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU5Ny1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNTk4OlxcdFxcdGlmIChvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU5OTpcXHRcXHRcXHRcXHRcXHQgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX3BoYXNlX2FkaixcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTYwMC1cXHRcXHRcXHRcXHRcXHQgIGV4dGFjaykpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTY9emwzMDczeF9kcGxsX3Bpbl9kaXJlY3Rpb25fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sIHZvaWQgKnBpbl9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5NzpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB2b2lkICpkcGxsX3ByaXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk4LVxcdFxcdFxcdCAgICAgICBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiAqZGlyZWN0aW9uLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyMz16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMjY6XFx0XFx0XFx0XFx0IHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgKmVzeW5jLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyOS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEzMDpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEzMS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTYwPXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZXN5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2MzpcXHRcXHRcXHRcXHQgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTY0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2NjpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2Ny1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9Mjk2PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZmZvX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLCB2b2lkICpwaW5fcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mjk3OlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjk4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHBsbF9mZm9fcGFyYW0gKmZmbyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMTI9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9tZWFzdXJlZF9mcmVxX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMxNC1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozMTU6XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmRwbGxfcHJpdiwgdTY0ICptZWFzdXJlZF9mcmVxLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMTYtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMjc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzI5LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozMzA6XFx0XFx0XFx0XFx0ICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCAqZnJlcXVlbmN5LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzEtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMzMi17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjMzMzpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMzNC1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MzQ0PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM0Ni1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MzQ3OlxcdFxcdFxcdFxcdCAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zNDgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM0OS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjM1MDpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM1MS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MzkxPXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcGhhc2Vfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5My1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjM5NDpcXHRcXHRcXHRcXHRcXHR2b2lkICpkcGxsX3ByaXYsIHM2NCAqcGhhc2Vfb2Zmc2V0LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zOTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zOTYte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozOTc6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zOTgtXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTQ0Nz16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy00NDktXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo0NTA6XFx0XFx0XFx0XFx0XFx0dm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy00NTEtXFx0XFx0XFx0XFx0XFx0czMyICpwaGFzZV9hZGp1c3QsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDUzLXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDU0OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDU1LVxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz00ODA9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9waGFzZV9hZGp1c3Rfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDgyLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDgzOlxcdFxcdFxcdFxcdFxcdHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg0LVxcdFxcdFxcdFxcdFxcdHMzMiBwaGFzZV9hZGp1c3QsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg2LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDg3OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg4LVxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz01NDc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9zdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU0OS1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo1NTA6XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNTUxLVxcdFxcdFxcdFxcdFxcdCBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01NTMte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo1NTQ6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01NTUtXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTU4NT16bDMwNzN4X2RwbGxfaW5wdXRfcGluX29wZXJzdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU4Ny1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NTg4OlxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01ODktXFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGRwbGxfcGluX29wZXJzdGF0ZSAqb3BlcnN0YXRlLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTU5OD16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3N0YXRlX29uX2RwbGxfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjAwLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjYwMTpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDItXFx0XFx0XFx0XFx0XFx0IGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjA0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NjA1OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjA2LVxcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz02ODU9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9wcmlvX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLCB2b2lkICpwaW5fcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Njg2OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02ODctXFx0XFx0XFx0XFx0dTMyICpwcmlvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9Njk3PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcHJpb19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbiwgdm9pZCAqcGluX3ByaXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjY5ODpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjk5LVxcdFxcdFxcdFxcdHUzMiBwcmlvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMC17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjcwMTpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NzI3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcyOS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NzMwOlxcdFxcdFxcdFxcdCAgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03MzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgKmVzeW5jLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczMy17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjczNDpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczNS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9Nzg1PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2VzeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTc4Ny1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Nzg4OlxcdFxcdFxcdFxcdCAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNzg5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo3OTE6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTItXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTg0Mj16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODQ0LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6ODQ1OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0ICpmcmVxdWVuY3ksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0Ni1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0Ny17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjg0ODpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0OS1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9ODU3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NTktXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo4NjA6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo4NjM6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjQtXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTkzMT16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTMzLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjkzNDpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05MzUtXFx0XFx0XFx0XFx0XFx0IHMzMiAqcGhhc2VfYWRqdXN0LFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzNy17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjkzODpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzOS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTU0PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NTYtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTU3OlxcdFxcdFxcdFxcdFxcdCB2b2lkICpkcGxsX3ByaXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk1OC1cXHRcXHRcXHRcXHRcXHQgczMyIHBoYXNlX2FkanVzdCxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NjAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5NjE6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NjItXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTk3OD16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9zdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk4MC1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTgxOlxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05ODItXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz05OTE9c3RhdGljIGludFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5OTI6emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05OTMtXFx0XFx0ICAgICAgczMyICp0ZW1wLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk5NC17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjk5NTpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk5Ni1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTAxMD1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEwMTE6emwzMDczeF9kcGxsX2xvY2tfc3RhdHVzX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTAxMi1cXHRcXHRcXHQgICAgIGVudW0gZHBsbF9sb2NrX3N0YXR1cyAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEwMTUte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMDE2OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MjUuNTE3MjkwMTY5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NDEzNTA4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRQTEwgSW52ZXN0aWdhdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBzZWUgYGRwbGxfcHJpdmAgaXMgZGVjbGFyZWQgaW4gYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaGAsIGJ1dCBpdCdzIG5vdCBleHBvcnRlZC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBIb3dldmVyLCBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gU28sIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmU6XG5cbiogICBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgXG4qICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgXG4qICAgYGRwbGxfbmxfcGluX3NldF9kb2l0YFxuKiAgIGBkcGxsX3Bpbl9yZWdpc3RlcmBcblxuTm93LCBsZXQncyBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIENoZWNraW5nIGBkcGxsX25ldGxpbmsuY2AsIEkgZmluZDpcblxuKiAgIGBkcGxsX21zZ19hZGRfcGluX2RwbGxzYCBpcyBzdGF0aWMuXG4qICAgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBpcyBzdGF0aWMuXG4qICAgYGRwbGxfcGluX2ZyZXFfc2V0YCBpcyBzdGF0aWMuXG4qICAgYGRwbGxfcGluX2VzeW5jX3NldGAgaXMgc3RhdGljLlxuKiAgIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgIGlzIHN0YXRpYy5cbiogICBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGAgaXMgc3RhdGljLlxuKiAgIGBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldGAgaXMgc3RhdGljLlxuKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCBpcyBub24tc3RhdGljLlxuXG5XYWl0IGEgc2Vjb25kLCBhbHRob3VnaCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAgaXMgbm9uLXN0YXRpYywgd2hhdCBhYm91dCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgPyBBbHRob3VnaCBpdCdzIG5vdCBkaXJlY3RseSBtb2RpZmllZCwgaXQgY2FsbHMgYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAsIHdoaWNoIHRoZW4gaW4gdHVybiBjYWxscyB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucy4gVGhlcmVmb3JlLCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgIGlzIGFic29sdXRlbHkgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi5cblxuTGV0IG1lIGV4YW1pbmUgYGRwbGxfZGV2aWNlX29wc2AgYW5kIGBkcGxsX3ByaXZgIGluIGBkcGxsX2NvcmUuY2Agbm93LiBUaGV5J3JlIG5vdCBleHBvcnRlZCB0aGVtc2VsdmVzLCBidXQgdGhleSBhcmUgY2FsbGVkIHdpdGhpbiBgZHBsbF9uZXRsaW5rLmNgIGFuZCBgZHBsbF9jb3JlLmNgLiBBaCwgYnV0IGBkcGxsX2RldmljZV9vcHNgIGlzIHVzZWQgYnkgYGRwbGxfcGluX3JlZ2lzdGVyYCwgd2hpY2ggKmlzKiBleHBvcnRlZCwgc28gdGhhdCdzIHJlbGV2YW50LlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byB0aGUgY29uZmlncyB3ZSdsbCBuZWVkLiBgRFBMTGAgaXMgYSBib29sZWFuLCBzbyB3ZSBjYW4ndCBlbmFibGUgaXQgZGlyZWN0bHkuIFdlIG5lZWQgYSBkcml2ZXIgdGhhdCBzZWxlY3RzIGl0LiBJIHNlZSB0aGF0IGBaTDMwNzNYX0kyQ2Agc2VsZWN0cyBgWkwzMDczWGAsIHdoaWNoIHRoZW4gc2VsZWN0cyBgRFBMTGAuIExldCBtZSBzZWUsIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDYCBhbmQgYE5FVGAsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIEJhY2sgdG8gYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgLiBgY29uZmlnIFpMMzA3M1hgIHNlbGVjdHMgYERQTExgLiBgY29uZmlnIFpMMzA3M1hfSTJDYCBzZWxlY3RzIGBaTDMwNzNYYC4gU28sIHdlIGNhbiBlbmFibGUgYFpMMzA3M1hfSTJDYC4gSG1tLCB3YWl0LCBJIHNlZSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBhbHNvIHNlbGVjdHMgYERQTExgLiBDaGVja2luZyBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgZm9yIGBQVFBfMTU4OF9DTE9DS19PQ1BgLCBpdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIGBIQVNfSU9NRU1gLCBgUENJYCwgYEkyQ2AsIGBNVERgLCBgU0VSSUFMXzgyNTBgLCBgIVMzOTBgLCBhbmQgYENPTU1PTl9DTEtgLiBUaGF0IGxvb2tzIHNpZ25pZmljYW50bHkgbW9yZSBpbnZvbHZlZCB0aGFuIGBaTDMwNzNYX0kyQ2AsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhhdCBmb3Igbm93LiBMZXQgbWUgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgb25lIG1vcmUgdGltZSwgYFpMMzA3M1hfSTJDYCBkZXBlbmRzIG9uIGBJMkMgXHUwMDI2XHUwMDI2IE5FVGAuIFNvIHRoYXQncyBjb25maXJtZWQuIEknbGwgYWRkIGBaTDMwNzNYX0kyQ2AgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gT2ggd2FpdCwgYFpMMzA3M1hgIGlzIHRyaXN0YXRlIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIGJ1dCBldmVuIGlmIGBDT01QSUxFX1RFU1RgIGlzbid0IGVuYWJsZWQsIGBaTDMwNzNYX0kyQ2Agd2lsbCBzdGlsbCBzZWxlY3QgaXQuIFBlcmZlY3QuIEJlY2F1c2UgYFpMMzA3M1hfSTJDYCBoYXMgYHNlbGVjdCBaTDMwNzNYYC5cblxuTGV0IG1lIGFsc28gY2hlY2sgYE1MWDVfRFBMTGAuIEl0IGRlcGVuZHMgb24gYE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRWAsIGFuZCBhbHNvIGBzZWxlY3QgRFBMTGAuIFRoZW5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODg3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo0MS45MzA4MDIyODVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTMyMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxfbmxfcGluX2dldF9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgzMD1pbnQgZHBsbF9ubF9waW5faWRfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODY0LVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxODY1OmludCBkcGxsX25sX3Bpbl9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODY2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6NDIuMDIyOTM5Mzc0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTgyMTI0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pY3Mgb2YgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBwcm9jZXNzaW5nIHRoaXPigJR5ZXMsIHRoZSBuYXR1cmUgb2YgdGhpcyBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMuIFRoYXQncyBhIGdpdmVuLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGxpbmUgb2YgdGhvdWdodC4uLiB3aGF0IGFib3V0IGBkcGxsX25sX3Bpbl9zZXRfZG9pdGA/IEknbSB3b25kZXJpbmcgaG93IHRoYXQgZnVuY3Rpb24gZml0cyBpbnRvIHRoaXMgZXZvbHZpbmcgc2NlbmFyaW8uIFdoZXJlIGRvZXMgaXQgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlPyBJdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFuZCBjb25zaWRlciBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0NTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo0NS40ODExNTU0NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4MDU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xODkzPWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTMzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTM0OmludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6NDUuNTYyOTY2NTY5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTg5MDI5NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEUExMIFN1YnN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCAoRFBMTCkgc3Vic3lzdGVtLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIEZpcnN0LCBpdCdzIGNsZWFyIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlbid0IHN0YXRpYzsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5JJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBkaXJlY3RseSBtb2RpZmllZCBvciBjYWxsZWQgYnkgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucy4gYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGAgaGFzIGJlZW4gY2hhbmdlZCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYC4gVGhvc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHF1aXRlIGEgZmV3IG5ldGxpbmsgY2FsbGJhY2tzLiBBZGRpdGlvbmFsbHksIGBkcGxsX3Bpbl9yZWdpc3RlcmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZCBhbmQgZXhwb3J0ZWQuXG5cblRoZSBjb3JlIHN5bWJvbHMgSSBzaG91bGQgZm9jdXMgb24gYXJlOiBgZHBsbF9waW5fcmVnaXN0ZXJgLCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgLCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAsIGFuZCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLlxuXG5gZHBsbF9waW5fcmVnaXN0ZXJgIGlzIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSDigJMgZHJpdmVycyBjYWxsIGl0IGR1cmluZyBwcm9iZSDigJMgYnV0IGl04oCZcyBhIGNvcmUga2VybmVsIEFQSSwgc28gaXRzIGluY2x1c2lvbiBpbiB0aGUgZnV6emluZyBzY29wZSBpcyBqdXN0aWZpZWQuIFRoZSBuZXRsaW5rIGNhbGxiYWNrcywgaG93ZXZlciwgYXJlIGFic29sdXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIHBvaW50LlxuXG5UaGUgcGF0Y2ggZXNzZW50aWFsbHkgaW1wcm92ZXMgaG93IHRoZSBEUExMIHN1YnN5c3RlbSBoYW5kbGVzIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIHVzaW5nIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIHdpdGhpbiB0aGUgbmV0bGluayBjYWxsYmFja3MgKGxpa2UgYGRwbGxfcGluX2ZyZXFfc2V0YCwgZXRjLikgdG8gYXZvaWQgb3BlcmF0aW9ucyBvbiB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGRzIHZhbGlkYXRpb24gb2YgYGRldl9vcHNgIGluIGBkcGxsX3Bpbl9yZWdpc3RlcmAgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGZvciB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBrZXJuZWwgY29kZSB0aGF0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHkuIFRoaXMgaXMgc2lnbmlmaWNhbnQsIGFuZCB0aGV5IHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nLlxuXG5Ob3csIHdoaWNoIGNvbmZpZ3MgbWFrZSBzZW5zZSB0byBlbmFibGU/IFdlIGtub3cgYFpMMzA3M1hfSTJDYCBzZWxlY3RzIGBaTDMwNzNYYCwgd2hpY2ggaW4gdHVybiBzZWxlY3RzIGBEUExMYC4gYElDRWAgYWxzbyBzZWxlY3RzIGBEUExMYCwgYXMgZG9lcyBgTUxYNV9EUExMYC4gQnV0IGBNTFg1X0RQTExgIGlzIGNvbnRpbmdlbnQgb24gYE1MWDVfQ09SRWAsIGFuZCBgSUNFYCBkZXBlbmRzIG9uIGBQQ0lgLiBgWkwzMDczWF9JMkNgIGRlcGVuZHMgb24gYEkyQyBcdTAwMjZcdTAwMjYgTkVUYC4gSSdsbCBqdXN0IGZvY3VzIG9uIGVuYWJsaW5nIGBaTDMwNzNYX0kyQ2AgYW5kIGBJQ0VgIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBgRFBMTGAgY29uZmlnIGlzIGVuYWJsZWQuXG5cbkxldCdzIGRvdWJsZSBjaGVjayBgWkwzMDczWF9JMkNgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQgZGVwZW5kcyBvbiBgSTJDIFx1MDAyNlx1MDAyNiBORVRgLiBgSTJDYCBpcyBjb21tb24gaW4gdGhlIHN5emthbGxlciBjb25maWdzLCBhbmQgYE5FVGAgaXMgZGVmaW5pdGVseSBpbmNsdWRlZC4gUGVyZmVjdC4gYFpMMzA3M1hfSTJDYCBzZWVtcyBpZGVhbC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSB2ZXJpZnlpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXM6IGBkcGxsX3Bpbl9yZWdpc3RlcmAgaXMgYSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgaW50IGRwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdilgLlxuXG5BbmQgYGRwbGxfbmxfcGluX2dldF9kb2l0YCwgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLCBhbmQgYGRwbGxfbmxfcGluX3NldF9kb2l0YCBhcmUgYWxzbyBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGRwbGxfbmV0bGluay5jYC5cblxuSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3OTcsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjU4LjE1MTk5OTk2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTI4NDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjU4LjMxMTI5MjE5MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODg2Njc1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo1OC4zMTE5ODY2NDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTYzODc5NjgzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzIGluIHRoZSBEUExMIHN1YnN5c3RlbS4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgYGRwbGxfZGV2aWNlX29wcygpYCBhbmQgYGRwbGxfcHJpdigpYCBjb3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciBpZiB0aGUgRFBMTCBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpc3Qgd2FzIGVtcHR5LCBsZWFkaW5nIHRvIGEga2VybmVsIGNyYXNoLiBUaGUgcGF0Y2ggYWRkcyBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBjaGVja3MgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgZnVsbHkgcmVnaXN0ZXJlZCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBvcGVyYXRpb25zIG9yIHByb3BlcnRpZXMgdmlhIG5ldGxpbmsgb3IgcGluIHJlZ2lzdHJhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgaW52YWxpZCBzdGF0ZSBhY2Nlc3Nlcywgd2hpY2ggYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiAob3Igc2ltcGx5IHRyaWdnZXIgYSBwYWdlIGZhdWx0KS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgaW5mby1sZWFrcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODc2MmFjNDczMTMwZjQ5MmM2NjVhMTJiNDBlODJiYmNmZmZlZTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTY6MjY6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcbmluZGV4IDQzZDUxZDk0MmVhZGQuLmEzMjBlZWI4MjlhZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xuQEAgLTg3NiwxOSArODc2LDI1IEBAIGludFxuIGRwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRcdCAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2KVxuIHtcbitcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRldl9vcHM7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKFdBUk5fT04oIW9wcykgfHxcbiBcdCAgICBXQVJOX09OKCFvcHMtXHUwMDNlc3RhdGVfb25fZHBsbF9nZXQpIHx8XG4gXHQgICAgV0FSTl9PTighb3BzLVx1MDAzZWRpcmVjdGlvbl9nZXQpIHx8XG4tXHQgICAgV0FSTl9PTihvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3JfZ2V0IHx8XG4tXHRcdCAgICAgIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkgfHxcbiBcdCAgICBXQVJOX09OKG9wcy1cdTAwM2VzdXBwb3J0ZWRfZmZvIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWZmb19nZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbiBcbitcdGRldl9vcHMgPSBkcGxsX2RldmljZV9vcHMoZHBsbCk7XG4rXHRpZiAoV0FSTl9PTihvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWRldl9vcHMgfHwgIWRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxuK1x0XHQgICAgICFkZXZfb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9zZXQpKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogRm9yIHBpbnMgaWRlbnRpZmllZCB2aWEgZmlybXdhcmUgKHBpbi1cdTAwM2Vmd25vZGUpLCBhbGxvdyByZWdpc3RyYXRpb25cbiBcdCAqIGV2ZW4gaWYgdGhlIHBpbidzIChtb2R1bGUsIGNsb2NrX2lkKSBkaWZmZXJzIGZyb20gdGhlIHRhcmdldCBEUExMLlxuQEAgLTEwODEsMTIgKzEwODcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWZfc3luY19wYWlyX2FkZCk7XG4gc3RhdGljIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKlxuIGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4ge1xuLVx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuLVxuLVx0cmVnID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKChzdHJ1Y3QgbGlzdF9oZWFkICopXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTtcbi1cdFdBUk5fT04oIXJlZyk7XG4tXHRyZXR1cm4gcmVnO1xuK1x0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKVx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QsXG4rXHRcdFx0XHRcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpO1xuIH1cbiBcbiB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuQEAgLTEwOTQsNiArMTA5Niw4IEBAIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4gXG4gXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XG4rXHRpZiAoIXJlZylcbitcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZXByaXY7XG4gfVxuIFxuQEAgLTExMDIsNiArMTEwNiw4IEBAIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRwbGxfZGV2aWNlX29wcyhzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4gXG4gXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XG4rXHRpZiAoIXJlZylcbitcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZW9wcztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi45ZTU1NzQ1ZTMzZTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4rKysgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC02Niw2ICs2NiwyMiBAQCBzdGF0aWMgYm9vbCBkcGxsX3Bpbl9hdmFpbGFibGUoc3RydWN0IGRwbGxfcGluICpwaW4pXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuK3tcbitcdHJldHVybiBkcGxsX2RldmljZV9vcHMoZHBsbCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZHBsbF9waW5fcmVmICpkcGxsX3Bpbl9maXJzdF9yZWdpc3RlcmVkX3JlZihzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbit7XG4rXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpXG4rXHRcdGlmIChkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRyZXR1cm4gcmVmO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIC8qKlxuICAqIGRwbGxfbXNnX2FkZF9waW5faGFuZGxlIC0gYXR0YWNoIHBpbiBoYW5kbGUgYXR0cmlidXRlIHRvIGEgZ2l2ZW4gbWVzc2FnZVxuICAqIEBtc2c6IHBvaW50ZXIgdG8gc2tfYnVmZiBtZXNzYWdlIHRvIGF0dGFjaCBhIHBpbiBoYW5kbGVcbkBAIC02NTYsNiArNjcyLDggQEAgZHBsbF9tc2dfYWRkX3Bpbl9kcGxscyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGludCByZXQ7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpbmRleCwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGF0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIERQTExfQV9QSU5fUEFSRU5UX0RFVklDRSk7XG4gXHRcdGlmICghYXR0cilcbiBcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuQEAgLTcwMCw5ICs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdHJlZiA9IGRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHBpbik7XG4gXHRpZiAoIXJlZilcbi1cdFx0cmVmID0gZHBsbF94YV9yZWZfZHBsbF9maXJzdChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzKTtcbi1cdEFTU0VSVF9OT1RfTlVMTChyZWYpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJldCA9IGRwbGxfbXNnX2FkZF9waW5faGFuZGxlKG1zZywgcGluKTtcbiBcdGlmIChyZXQpXG5AQCAtMTA5MSw2ICsxMTEwLDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHR9XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0IHx8ICFvcHMtXHUwMDNlZnJlcXVlbmN5X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xMTAxLDcgKzExMjIsNyBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuK1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTExMTcsNiArMTEzOCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMTM4LDYgKzExNjEsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHRpZiAocmVmID09IGZhaWxlZClcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTE2Myw2ICsxMTg4LDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0aW50IHJldDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCghb3BzLVx1MDAzZWVzeW5jX3NldCB8fCAhb3BzLVx1MDAzZWVzeW5jX2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xMTczLDcgKzEyMDAsNyBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdH1cbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbitcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCIpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xMTk5LDYgKzEyMjYsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbiBcdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbiBcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZWVzeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMjI0LDYgKzEyNTMsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyNjIsNyArMTI5Myw3IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTI4Myw2ICsxMzE0LDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0aWYgKHN0YXRlID09IG9sZF9zdGF0ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMzA3LDYgKzEzNDAsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbiBcdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VyZWZfc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTUwMCw2ICsxNTM1LDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHR9XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xNTA5LDcgKzE1NDYsNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuK1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTE1MjYsNiArMTU2Myw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNTUwLDYgKzE1ODksOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHRpZiAocmVmID09IGZhaWxlZClcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTU4MSw3ICsxNjIyLDcgQEAgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBhcmVudF9uZXN0LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHBkcGxsX2lkeCA9IG5sYV9nZXRfdTMyKHRiW0RQTExfQV9QSU5fUEFSRU5UX0lEXSk7XG4tXHRkcGxsID0geGFfbG9hZChcdTAwMjZkcGxsX2RldmljZV94YSwgcGRwbGxfaWR4KTtcbitcdGRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTtcbiBcdGlmICghZHBsbCkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwicGFyZW50IGRldmljZSBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTE4NzMsNiArMTkxNCwxMCBAQCBpbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKHNrYiwgcGluLCBjYi1cdTAwM2VleHRhY2spO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xuK1x0XHRcdGlmIChyZXQgPT0gLUVOT0RFVikge1xuK1x0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRnZW5sbXNnX2VuZChza2IsIGhkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo1OC4zMTE5ODc4NjFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzODc5NDM1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgRFBMTCBEZXZpY2UgUmVnaXN0cmF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGRldmljZSByZWdpc3RyYXRpb24gYW5kIGhhbmRsaW5nIG9mIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGlzc3VlIGlzIHByZXZlbnRpbmcgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGEgRFBMTCBkZXZpY2UgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgcmVnaXN0ZXJlZC5cblxuSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jYCBhbmQgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBuZXRsaW5rIGludGVyYWN0aW9uIGFuZCBjb3JlIERQTEwgZGV2aWNlIG1hbmFnZW1lbnQuIFRoZSBrZXkgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKWAgY2hlY2tzLiBUaGlzIGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBkZWZpbmVkIGFzIGByZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO2AsIGFjdHMgYXMgYSBnYXRla2VlcGVyLCB2ZXJpZnlpbmcgdGhhdCB0aGUgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHZhbGlkIGJlZm9yZSB0aGV5IGFyZSB1c2VkLlxuXG5Mb29raW5nIGRlZXBlciwgdGhlIHBhdGNoIGFsdGVycyBgZHBsbF9kZXZpY2Vfb3BzYCBhbmQgYGRwbGxfcHJpdmAgdG8gcmV0dXJuIGBOVUxMYCBpZiBgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpYCByZXR1cm5zIGBOVUxMYC4gVGhpcyBpcyBjcml0aWNhbC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGNhbGxpbmcgYGRwbGxfZGV2aWNlX29wc2Agd291bGQgdHJ5IHRvIGFjY2VzcyB0aGUgYG9wc2AgZmllbGQgb2YgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUsIGV2ZW4gaWYgdGhhdCBzdHJ1Y3R1cmUgd2FzIE5VTEwuIFRoaXMgd291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYSBjbGFzc2ljIGtlcm5lbCBwYW5pYy4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhhdCBieSBncmFjZWZ1bGx5IHJldHVybmluZyBgTlVMTGAgd2hlbiB0aGUgZGV2aWNlIGlzbid0IHJlZ2lzdGVyZWQuIEl0IHNlZW1zIHRoZSBtYWluIGlzc3VlIGlzIGEgbWlzc2luZyBjaGVjayBpbiB0aGUgY29kZSBwYXRoLlxuXG5GdXJ0aGVybW9yZSwgYGRwbGxfcGluX3JlZ2lzdGVyYCBub3cgZGlyZWN0bHkgY2hlY2tzIGBkZXZfb3BzYCAod2hpY2ggcG90ZW50aWFsbHkgY291bGQgYmUgTlVMTCksIGluc3RlYWQgb2YgY2FsbGluZyBgZHBsbF9kZXZpY2Vfb3BzKGRwbGwpYCBhbmQgaGFuZGxlcyB0aGUgYE5VTExgIGNhc2UuIFRoaXMgaXMgYSBuaWNlLCBwcm9hY3RpdmUgY2hhbmdlLiBJbiBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAsIHRoZSBjb2RlIG5vdyBpZ25vcmVzIGAtRU5PREVWYCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIGxpa2VseSB0byBoYW5kbGUgdGhlIHNhbWUgdW5yZWdpc3RlcmVkIGRldmljZSBzY2VuYXJpby4gQWxzbywgaW4gYGRwbGxfcGluX3BhcmVudF9kZXZpY2Vfc2V0YCB3ZSBub3cgdXNlIGBkcGxsX2RldmljZV9nZXRfYnlfaWRgIGluc3RlYWQgb2YgYHhhX2xvYWRgIHdoaWNoIHNlZW1zIHRvIGVuc3VyZSBkZXZpY2UgaW50ZWdyaXR5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGlzIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciwgbW9yZSBwcmVjaXNlbHksIGFuIFwidXNlLWJlZm9yZS1pbml0aWFsaXphdGlvblwiIHNjZW5hcmlvLiBJdOKAmXMgZW5zdXJpbmcgdGhhdCBuZXRsaW5rIG9wZXJhdGlvbnMgYW5kIHBpbiByZWdpc3RyYXRpb24gYXJlbid0IHBlcmZvcm1lZCBvbiBwYXJ0aWFsbHkgb3IgdW5yZWdpc3RlcmVkIGRldmljZXMuIFRoZSBvbGRlciBjb2RlIGRpZG7igJl0IGNvcnJlY3RseSBoYW5kbGUgdGhlc2UgY2FzZXMuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBjb2RlJ3MgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGAgZnVuY3Rpb24gcmV0dXJuZWQgYE5VTExgIGluIHRoZSB1bnJlZ2lzdGVyZWQgY2FzZSwgYW5kIHRoZSBkZXJlZmVyZW5jZSBjYXVzZWQgdGhlIGNyYXNoLiBUaGUgbmV3IGNoZWNrcyBtYWtlIHRoZSBjb2RlIG1vcmUgcm9idXN0IGFuZCBkZWZlbnNpdmUuXG5cblRoZSBtb3N0IGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaW52b2x2ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEkndmUgcmUtZXhhbWluZWQgdGhlIGNvZGUuIFRoZSBhbnN3ZXIgaXMgKm5vKi4gSXQncyBwdXJlbHkgYWJvdXQgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGZvciBhIHZhbGlkIGRldmljZSByZWdpc3RyYXRpb24gYmVmb3JlIGFjY2Vzc2luZyBpdHMgcHJvcGVydGllcy4gVGhlcmXigJlzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgaXNuJ3QgYWJvdXQgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycy5cblxuTGV0IG1lIHZlcmlmeSBhIHF1aWNrIGNoZWNrIG9uIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAuIFRoZSBwYXRjaCBtYWtlcyB0aGlzIGNvZGUgYmxvY2sgbW9yZSByb2J1c3QgYnkgaGFuZGxpbmcgYC1FTk9ERVZgIChubyBkZXZpY2UgZXJyb3IpIG1vcmUgZ3JhY2VmdWxseS4gVGhpcyBtYWtlcyBzZW5zZSBpbiBsaWdodCBvZiB0aGUgdW5yZWdpc3RlcmVkIGRldmljZSBpc3N1ZS5cblxuSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgcGF0Y2ggaXMgc29sZWx5IGFib3V0IHN0cmVuZ3RoZW5pbmcgdGhlIGRyaXZlciBhZ2FpbnN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGNoZWNrcy4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCB0aGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIGFuZCwgY3J1Y2lhbGx5LCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGlzc3VlIGhlcmUuIEl04oCZcyBzaW1wbHkgYSBmaXggZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHRoYXQgd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIGtlcm5lbCBjcmFzaCwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IGV4aXN0aW5nIGRlYnVnZ2luZyB0b29scy4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBJIGNvbmNsdWRlICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouIFRoZSByZWFzb25pbmcgaXMgdGhlIHBhdGNoIGhhbmRsZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzLiBUaGUgY29kZSBhdm9pZHMgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXJzIHdpdGggbmV3bHkgYWRkZWQgY2hlY2tzIHdpdGggYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODEsIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI5OjE0LjY5OTkzNTAwOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MgaW4gdGhlIERQTEwgc3Vic3lzdGVtLiBQcmlvciB0byB0aGlzIHBhdGNoLCBgZHBsbF9kZXZpY2Vfb3BzKClgIGFuZCBgZHBsbF9wcml2KClgIGNvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBEUExMIGRldmljZSByZWdpc3RyYXRpb24gbGlzdCB3YXMgZW1wdHksIGxlYWRpbmcgdG8gYSBrZXJuZWwgY3Jhc2guIFRoZSBwYXRjaCBhZGRzIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGNoZWNrcyB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBmdWxseSByZWdpc3RlcmVkIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIG9wZXJhdGlvbnMgb3IgcHJvcGVydGllcyB2aWEgbmV0bGluayBvciBwaW4gcmVnaXN0cmF0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzIGluIHRoZSBEUExMIHN1YnN5c3RlbS4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgYGRwbGxfZGV2aWNlX29wcygpYCBhbmQgYGRwbGxfcHJpdigpYCBjb3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciBpZiB0aGUgRFBMTCBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpc3Qgd2FzIGVtcHR5LCBsZWFkaW5nIHRvIGEga2VybmVsIGNyYXNoLiBUaGUgcGF0Y2ggYWRkcyBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBjaGVja3MgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgZnVsbHkgcmVnaXN0ZXJlZCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBvcGVyYXRpb25zIG9yIHByb3BlcnRpZXMgdmlhIG5ldGxpbmsgb3IgcGluIHJlZ2lzdHJhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgaW52YWxpZCBzdGF0ZSBhY2Nlc3Nlcywgd2hpY2ggYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiAob3Igc2ltcGx5IHRyaWdnZXIgYSBwYWdlIGZhdWx0KS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgaW5mby1sZWFrcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 15:40:25 +0000 UTC FinishedAt: 2026-08-13 16:29:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZL3073X_I2C", "ICE" ], "series_id": "267d7a43-85c8-4a67-a8e2-f03f55792d5b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dpll_pin_register", "dpll_nl_pin_get_doit", "dpll_nl_pin_get_dumpit", "dpll_nl_pin_set_doit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O0lDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfcGluX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kb2l0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kdW1waXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fc2V0X2RvaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGNoZWNrcyBpbiB0aGUgRFBMTCBzdWJzeXN0ZW0uIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGBkcGxsX2RldmljZV9vcHMoKWAgYW5kIGBkcGxsX3ByaXYoKWAgY291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIERQTEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBsaXN0IHdhcyBlbXB0eSwgbGVhZGluZyB0byBhIGtlcm5lbCBjcmFzaC4gVGhlIHBhdGNoIGFkZHMgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgY2hlY2tzIHRvIGVuc3VyZSB0aGUgZGV2aWNlIGlzIGZ1bGx5IHJlZ2lzdGVyZWQgYmVmb3JlIGFjY2Vzc2luZyBpdHMgb3BlcmF0aW9ucyBvciBwcm9wZXJ0aWVzIHZpYSBuZXRsaW5rIG9yIHBpbiByZWdpc3RyYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmODc2MmFjNDczMTMwZjQ5MmM2NjVhMTJiNDBlODJiYmNmZmZlZTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTY6MjY6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jIGIvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXG5pbmRleCA0M2Q1MWQ5NDJlYWRkLi5hMzIwZWViODI5YWQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcbkBAIC04NzYsMTkgJiM0Mzs4NzYsMjUgQEAgaW50XG4gZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRldl9vcHM7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKFdBUk5fT04oIW9wcykgfHxcbiBcdCAgICBXQVJOX09OKCFvcHMtXHUwMDNlc3RhdGVfb25fZHBsbF9nZXQpIHx8XG4gXHQgICAgV0FSTl9PTighb3BzLVx1MDAzZWRpcmVjdGlvbl9nZXQpIHx8XG4tXHQgICAgV0FSTl9PTihvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3JfZ2V0IHx8XG4tXHRcdCAgICAgIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkgfHxcbiBcdCAgICBXQVJOX09OKG9wcy1cdTAwM2VzdXBwb3J0ZWRfZmZvIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWZmb19nZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbiBcbiYjNDM7XHRkZXZfb3BzID0gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO1xuJiM0MztcdGlmIChXQVJOX09OKG9wcy1cdTAwM2VtZWFzdXJlZF9mcmVxX2dldCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoIWRldl9vcHMgfHwgIWRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxuJiM0MztcdFx0ICAgICAhZGV2X29wcy1cdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBGb3IgcGlucyBpZGVudGlmaWVkIHZpYSBmaXJtd2FyZSAocGluLVx1MDAzZWZ3bm9kZSksIGFsbG93IHJlZ2lzdHJhdGlvblxuIFx0ICogZXZlbiBpZiB0aGUgcGluJiMzOTtzIChtb2R1bGUsIGNsb2NrX2lkKSBkaWZmZXJzIGZyb20gdGhlIHRhcmdldCBEUExMLlxuQEAgLTEwODEsMTIgJiM0MzsxMDg3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fcmVmX3N5bmNfcGFpcl9hZGQpO1xuIHN0YXRpYyBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpcbiBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuIHtcbi1cdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbi1cbi1cdHJlZyA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKVx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7XG4tXHRXQVJOX09OKCFyZWcpO1xuLVx0cmV0dXJuIHJlZztcbiYjNDM7XHRyZXR1cm4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKChzdHJ1Y3QgbGlzdF9oZWFkICopXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpO1xuIH1cbiBcbiB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuQEAgLTEwOTQsNiAmIzQzOzEwOTYsOCBAQCB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuIFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuIFxuIFx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpO1xuJiM0MztcdGlmICghcmVnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZXByaXY7XG4gfVxuIFxuQEAgLTExMDIsNiAmIzQzOzExMDYsOCBAQCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpkcGxsX2RldmljZV9vcHMoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuIFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuIFxuIFx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpO1xuJiM0MztcdGlmICghcmVnKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZW9wcztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi45ZTU1NzQ1ZTMzZTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC02Niw2ICYjNDM7NjYsMjIgQEAgc3RhdGljIGJvb2wgZHBsbF9waW5fYXZhaWxhYmxlKHN0cnVjdCBkcGxsX3BpbiAqcGluKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYoc3RydWN0IGRwbGxfcGluICpwaW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpXG4mIzQzO1x0XHRpZiAoZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4mIzQzO1x0XHRcdHJldHVybiByZWY7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlXG4gICogQG1zZzogcG9pbnRlciB0byBza19idWZmIG1lc3NhZ2UgdG8gYXR0YWNoIGEgcGluIGhhbmRsZVxuQEAgLTY1Niw2ICYjNDM7NjcyLDggQEAgZHBsbF9tc2dfYWRkX3Bpbl9kcGxscyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGludCByZXQ7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpbmRleCwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFKTtcbiBcdFx0aWYgKCFhdHRyKVxuIFx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5AQCAtNzAwLDkgJiM0Mzs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4mIzQzO1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0cmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTtcbiBcdGlmICghcmVmKVxuLVx0XHRyZWYgPSBkcGxsX3hhX3JlZl9kcGxsX2ZpcnN0KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuLVx0QVNTRVJUX05PVF9OVUxMKHJlZik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJldCA9IGRwbGxfbXNnX2FkZF9waW5faGFuZGxlKG1zZywgcGluKTtcbiBcdGlmIChyZXQpXG5AQCAtMTA5MSw2ICYjNDM7MTExMCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0fVxuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0IHx8ICFvcHMtXHUwMDNlZnJlcXVlbmN5X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xMTAxLDcgJiM0MzsxMTIyLDcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdH1cbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbiYjNDM7XHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xMTE3LDYgJiM0MzsxMTM4LDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTEzOCw2ICYjNDM7MTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTExNjMsNiAmIzQzOzExODgsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpbnQgcmV0O1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cdTAwM2Vlc3luY19nZXQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlbW9kdWxlID09IHBpbi1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG5AQCAtMTE3Myw3ICYjNDM7MTIwMCw3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuJiM0MztcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTExOTksNiAmIzQzOzEyMjYsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbiBcdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbiBcbiYjNDM7XHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyMjQsNiAmIzQzOzEyNTMsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI2Miw3ICYjNDM7MTI5Myw3IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4mIzQzO1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTI4Myw2ICYjNDM7MTMxNCw4IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpXG4gXHRcdHJldHVybiAwO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMzA3LDYgJiM0MzsxMzQwLDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VyZWZfc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTUwMCw2ICYjNDM7MTUzNSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0fVxuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xNTA5LDcgJiM0MzsxNTQ2LDcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdH1cbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbiYjNDM7XHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xNTI2LDYgJiM0MzsxNTYzLDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4mIzQzO1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTU1MCw2ICYjNDM7MTU4OSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE1ODEsNyAmIzQzOzE2MjIsNyBAQCBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGFyZW50X25lc3QsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cGRwbGxfaWR4ID0gbmxhX2dldF91MzIodGJbRFBMTF9BX1BJTl9QQVJFTlRfSURdKTtcbi1cdGRwbGwgPSB4YV9sb2FkKFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBwZHBsbF9pZHgpO1xuJiM0MztcdGRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTtcbiBcdGlmICghZHBsbCkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3BhcmVudCBkZXZpY2Ugbm90IGZvdW5kXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTg3Myw2ICYjNDM7MTkxNCwxMCBAQCBpbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKHNrYiwgcGluLCBjYi1cdTAwM2VleHRhY2spO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xuJiM0MztcdFx0XHRpZiAocmV0ID09IC1FTk9ERVYpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcGxsX3Bpbl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX3NldF9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBpbiB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIChlLmcuLCBgZHBsbF9waW5fZnJlcV9zZXRgLCBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgKSB0byBza2lwIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhbHNvIHVwZGF0ZXMgYGRwbGxfcGluX3JlZ2lzdGVyYCB0byB2YWxpZGF0ZSBgZGV2X29wc2AgYmVmb3JlIHVzZSwgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERQTEwgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4NzYyYWM0NzMxMzBmNDkyYzY2NWExMmI0MGU4MmJiY2ZmZmVlMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNjoyNjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYwppbmRleCA0M2Q1MWQ5NDJlYWRkLi5hMzIwZWViODI5YWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jCkBAIC04NzYsMTkgJiM0Mzs4NzYsMjUgQEAgaW50CiBkcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCQkgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdikKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZGV2X29wczsKIAlpbnQgcmV0OwogCiAJaWYgKFdBUk5fT04oIW9wcykgfHwKIAkgICAgV0FSTl9PTighb3BzLSZndDtzdGF0ZV9vbl9kcGxsX2dldCkgfHwKIAkgICAgV0FSTl9PTighb3BzLSZndDtkaXJlY3Rpb25fZ2V0KSB8fAotCSAgICBXQVJOX09OKG9wcy0mZ3Q7bWVhc3VyZWRfZnJlcV9nZXQgJmFtcDsmYW1wOwotCQkgICAgKCFkcGxsX2RldmljZV9vcHMoZHBsbCktJmd0O2ZyZXFfbW9uaXRvcl9nZXQgfHwKLQkJICAgICAhZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLSZndDtmcmVxX21vbml0b3Jfc2V0KSkgfHwKIAkgICAgV0FSTl9PTihvcHMtJmd0O3N1cHBvcnRlZF9mZm8gJmFtcDsmYW1wOyAhb3BzLSZndDtmZm9fZ2V0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZhbXA7ZHBsbF9sb2NrKTsKIAomIzQzOwlkZXZfb3BzID0gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpOwomIzQzOwlpZiAoV0FSTl9PTihvcHMtJmd0O21lYXN1cmVkX2ZyZXFfZ2V0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWRldl9vcHMgfHwgIWRldl9vcHMtJmd0O2ZyZXFfbW9uaXRvcl9nZXQgfHwKJiM0MzsJCSAgICAgIWRldl9vcHMtJmd0O2ZyZXFfbW9uaXRvcl9zZXQpKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogRm9yIHBpbnMgaWRlbnRpZmllZCB2aWEgZmlybXdhcmUgKHBpbi0mZ3Q7Zndub2RlKSwgYWxsb3cgcmVnaXN0cmF0aW9uCiAJICogZXZlbiBpZiB0aGUgcGluJiMzOTtzIChtb2R1bGUsIGNsb2NrX2lkKSBkaWZmZXJzIGZyb20gdGhlIHRhcmdldCBEUExMLgpAQCAtMTA4MSwxMiAmIzQzOzEwODcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWZfc3luY19wYWlyX2FkZCk7CiBzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqCiBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKQogewotCXN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZzsKLQotCXJlZyA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKSZhbXA7ZHBsbC0mZ3Q7cmVnaXN0cmF0aW9uX2xpc3QsCi0JCQkJICAgICAgIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpOwotCVdBUk5fT04oIXJlZyk7Ci0JcmV0dXJuIHJlZzsKJiM0MzsJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKSZhbXA7ZHBsbC0mZ3Q7cmVnaXN0cmF0aW9uX2xpc3QsCiYjNDM7CQkJCQlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTsKIH0KIAogdm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKQEAgLTEwOTQsNiAmIzQzOzEwOTYsOCBAQCB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKQogCXN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZzsKIAogCXJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTsKJiM0MzsJaWYgKCFyZWcpCiYjNDM7CQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gcmVnLSZndDtwcml2OwogfQogCkBAIC0xMTAyLDYgJiM0MzsxMTA2LDggQEAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZHBsbF9kZXZpY2Vfb3BzKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKIAlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7CiAKIAlyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7CiYjNDM7CWlmICghcmVnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHJlZy0mZ3Q7b3BzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKaW5kZXggYWZiMzFjMDA0MDM4Mi4uOWU1NTc0NWUzM2U0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwpAQCAtNjYsNiAmIzQzOzY2LDIyIEBAIHN0YXRpYyBib29sIGRwbGxfcGluX2F2YWlsYWJsZShzdHJ1Y3QgZHBsbF9waW4gKnBpbikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkcGxsX2RldmljZV9yZWdpc3RlcmVkKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBkcGxsX2RldmljZV9vcHMoZHBsbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZHBsbF9waW5fcmVmICpkcGxsX3Bpbl9maXJzdF9yZWdpc3RlcmVkX3JlZihzdHJ1Y3QgZHBsbF9waW4gKnBpbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpCiYjNDM7CQlpZiAoZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCXJldHVybiByZWY7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKIC8qKgogICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlCiAgKiBAbXNnOiBwb2ludGVyIHRvIHNrX2J1ZmYgbWVzc2FnZSB0byBhdHRhY2ggYSBwaW4gaGFuZGxlCkBAIC02NTYsNiAmIzQzOzY3Miw4IEBAIGRwbGxfbXNnX2FkZF9waW5fZHBsbHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sCiAJaW50IHJldDsKIAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGluZGV4LCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0UpOwogCQlpZiAoIWF0dHIpCiAJCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtNzAwLDkgJiM0Mzs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sCiAJaW50IHJldDsKIAogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJcmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTsKIAlpZiAoIXJlZikKLQkJcmVmID0gZHBsbF94YV9yZWZfZHBsbF9maXJzdCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzKTsKLQlBU1NFUlRfTk9UX05VTEwocmVmKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwogCiAJcmV0ID0gZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUobXNnLCBwaW4pOwogCWlmIChyZXQpCkBAIC0xMDkxLDYgJiM0MzsxMTEwLDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJfQogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICgoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCB8fCAhb3BzLSZndDtmcmVxdWVuY3lfZ2V0KSAmYW1wOyZhbXA7CiAJCSAgICByZWYtJmd0O2RwbGwtJmd0O21vZHVsZSA9PSBwaW4tJmd0O21vZHVsZSAmYW1wOyZhbXA7CkBAIC0xMTAxLDcgJiM0MzsxMTIyLDcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCX0KIAl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7Ci0JaWYgKCFyZWYpIHsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMTE3LDYgJiM0MzsxMTM4LDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCXJldHVybiAwOwogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtmcmVxdWVuY3lfc2V0KQogCQkJY29udGludWU7CkBAIC0xMTM4LDYgJiM0MzsxMTYxLDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtmcmVxdWVuY3lfc2V0KQogCQkJY29udGludWU7CkBAIC0xMTYzLDYgJiM0MzsxMTg4LDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCWludCByZXQ7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCghb3BzLSZndDtlc3luY19zZXQgfHwgIW9wcy0mZ3Q7ZXN5bmNfZ2V0KSAmYW1wOyZhbXA7CiAJCSAgICByZWYtJmd0O2RwbGwtJmd0O21vZHVsZSA9PSBwaW4tJmd0O21vZHVsZSAmYW1wOyZhbXA7CkBAIC0xMTczLDcgJiM0MzsxMjAwLDcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCQl9CiAJfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwotCWlmICghcmVmKSB7CiYjNDM7CWlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTE5OSw2ICYjNDM7MTIyNiw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKIAkJdm9pZCAqcGluX2RwbGxfcHJpdjsKIAomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xMjI0LDYgJiM0MzsxMjUzLDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtlc3luY19zZXQpCiAJCQljb250aW51ZTsKQEAgLTEyNjIsNyAmIzQzOzEyOTMsNyBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKLQlpZiAoIXJlZikgewomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTEyODMsNiAmIzQzOzEzMTQsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJaWYgKHN0YXRlID09IG9sZF9zdGF0ZSkKIAkJcmV0dXJuIDA7CiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtyZWZfc3luY19zZXQpCiAJCQljb250aW51ZTsKQEAgLTEzMDcsNiAmIzQzOzEzNDAsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtyZWZfc3luY19zZXQpCiAJCQljb250aW51ZTsKQEAgLTE1MDAsNiAmIzQzOzE1MzUsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAl9CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtJmd0O3BoYXNlX2FkanVzdF9nZXQpICZhbXA7JmFtcDsKIAkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7bW9kdWxlID09IHBpbi0mZ3Q7bW9kdWxlICZhbXA7JmFtcDsKQEAgLTE1MDksNyAmIzQzOzE1NDYsNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAkJfQogCX0KIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKLQlpZiAoIXJlZikgewomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE1MjYsNiAmIzQzOzE1NjMsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAkJcmV0dXJuIDA7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQpCiAJCQljb250aW51ZTsKQEAgLTE1NTAsNiAmIzQzOzE1ODksOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKIAkJaWYgKHJlZiA9PSBmYWlsZWQpCiAJCQlicmVhazsKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQpCiAJCQljb250aW51ZTsKQEAgLTE1ODEsNyAmIzQzOzE2MjIsNyBAQCBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGFyZW50X25lc3QsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwZHBsbF9pZHggPSBubGFfZ2V0X3UzMih0YltEUExMX0FfUElOX1BBUkVOVF9JRF0pOwotCWRwbGwgPSB4YV9sb2FkKCZhbXA7ZHBsbF9kZXZpY2VfeGEsIHBkcGxsX2lkeCk7CiYjNDM7CWRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTsKIAlpZiAoIWRwbGwpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BhcmVudCBkZXZpY2Ugbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4NzMsNiAmIzQzOzE5MTQsMTAgQEAgaW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShza2IsIHBpbiwgY2ItJmd0O2V4dGFjayk7CiAJCWlmIChyZXQpIHsKIAkJCWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKJiM0MzsJCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAkJZ2VubG1zZ19lbmQoc2tiLCBoZHIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERQTEwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY2AgYW5kIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgYXR0ZW50aW9uLgoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKWAsIGRlZmluZWQgYXMgbm9uLU5VTEwgYGRwbGxfZGV2aWNlX29wcyhkcGxsKWAuIEl0IGFsc28gYWx0ZXJzIGBkcGxsX2RldmljZV9vcHNgIGFuZCBgZHBsbF9wcml2YCB0byByZXR1cm4gYE5VTExgIGlmIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHJldHVybnMgYE5VTExgLiBGdXJ0aGVyLCBgZHBsbF9jb3JlLmNgIG5vdyB2YWxpZGF0ZXMgYGRldl9vcHNgIGJlZm9yZSBpdCBpcyB1c2VkLiBBbmQgdGhlbiBpbiBgZHBsbF9uZXRsaW5rLmNgLCBpdCBzZWVtcyB0byBiZSBza2lwcGluZyB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzIGluIGEgZmV3IHBsYWNlcyBsaWtlIHRob3NlIGBzZXRgIGZ1bmN0aW9ucy4gQmFzaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBndWFyZGluZyBvcGVyYXRpb25zIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGRvbmUsIGlmIHRoZSBEUExMIGRldmljZSBpc24mIzM5O3QgcHJvcGVybHkgcmVnaXN0ZXJlZC4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIHRoZXJlIGEgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB2aWEgbmV0bGluaz8gWWVzLCBgZHBsbF9uZXRsaW5rLmNgIGlzIGEgbmV0bGluayBmYW1pbHkuIFRoYXQmIzM5O3MgZ29vZDsgbmV0bGluayBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuIFN5emthbGxlciwgaW4gcGFydGljdWxhciwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoYXQuIE5leHQsIGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL2RwbGwvS2NvbmZpZ2AgZm9yIHRoZSBEUExMIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRFBMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9LY29uZmlnPTY9bWVudSBcJiMzNDtEUExMIGRldmljZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2RwbGwvS2NvbmZpZy03LVxuZHJpdmVycy9kcGxsL0tjb25maWc6ODpjb25maWcgRFBMTFxuZHJpdmVycy9kcGxsL0tjb25maWctOS1cdGJvb2xcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEwLVxuZHJpdmVycy9kcGxsL0tjb25maWc6MTE6Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEyLVx0Ym9vbCBcJiMzNDtEUExMIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYSBDb25maWd1cmF0aW9uIEZsYWcqKgoKUmlnaHQsIGEgYGNvbmZpZyBEUExMYCBzZXR0aW5nIGp1c3QgYXBwZWFyZWQgaW4gdGhlIGNvZGUsIGFuZCBpdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGJvb2xlYW4gd2l0aG91dCBhbnkgYWNjb21wYW55aW5nIHByb21wdCBvciBkZWZhdWx0IHZhbHVlLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgRFBMTCBkcml2ZXIuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgZGVmaW5lZCB0aGVyZSwgYW5kIGhvcGVmdWxseSB0aGUgY29udGV4dCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiAqd2h5KiBpdCYjMzk7cyBjb25maWd1cmVkIHRoZSB3YXkgaXQgaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGdlbmVyYWxseSwgaG93IHRoaXMgYGNvbmZpZyBEUExMYCBmbGFnIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZS4gS25vd2luZyB0aGF0IHRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCwgaXMgZ29pbmcgdG8gYmUgaGVscGZ1bC4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEdlbmVyaWMgRFBMTCBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtEUExMIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIERQTExcbiAgIDk6XHRcdGJvb2xcbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgRFBMTF9SRUZDTlRfVFJBQ0tFUlxuICAxMjpcdFx0Ym9vbCBcJiMzNDtEUExMIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZ1wmIzM0O1xuICAxMzpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcdTAwMjZcdTAwMjYgRFBMTFxuICAxNDpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIEVuYWJsZSByZWZlcmVuY2UgY291bnQgdHJhY2tpbmcgZm9yIERQTEwgZGV2aWNlcyBhbmQgcGlucy5cbiAgMTc6XHRcdCAgVGhpcyBoZWxwcyBkZWJ1Z2dpbmcgcmVmZXJlbmNlIGxlYWtzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzXG4gIDE4Olx0XHQgIGJ5IHJlY29yZGluZyBzdGFjayB0cmFjZXMgZm9yIGVhY2ggZ2V0L3B1dCBvcGVyYXRpb24uXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMzAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRQTEwgRHJpdmVyIFNlbGVjdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGUgRFBMTCAoRGF2aXPigJNQdXRuYW3igJNMb2dlbWFubuKAk0xvdmVsYW5kKSBhbGdvcml0aG0gaGFzIGJlZW4gY2hvc2VuIGJ5IHNvbWUgb3RoZXIgZHJpdmVyIGluIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBmYWN0b3IgaGVyZT8gSXMgaXQgYSBzcGVjaWZpYyBwcm9ibGVtIHR5cGUsIGEgc2l6ZSB0aHJlc2hvbGQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHRoYXQmIzM5O3MgZGljdGF0aW5nIHRoaXMgc2VsZWN0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGV4ZWN1dGlvbiBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGRlY2lzaW9uIGFuZCB0aGUgcmF0aW9uYWxlIGZvciB1c2luZyBEUExMIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aG8mIzM5O3MgY2FsbGluZyB0aGUgc2hvdHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRFBMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzo2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNy1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cdHNlbGVjdCBQTERNRldcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzA2Olx0c2VsZWN0IERQTExcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTIwMz1jb25maWcgTUxYNV9EUExMXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNTFg1X0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjIwNjpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMDctXHRoZWxwXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZz0yMTA9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVx0c2VsZWN0IENSQzE2XG5kcml2ZXJzL3B0cC9LY29uZmlnOjIyMDpcdHNlbGVjdCBEUExMXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzUyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFpMMzA3M1ggRFBMTCBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgYFpMMzA3M1hgIG1lbnRpb25lZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhY3RpbmcgYXMgYSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHBsYWNlIHdoZXJlIHRoZSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaW50ZW5kZWQgdXNlLCBzaG91bGQgYmUgY2xlYXJseSBkb2N1bWVudGVkLiBJIGV4cGVjdCB0byBmaW5kIGNvbmZpcm1hdGlvbiB0aGVyZSBhYm91dCBpdHMgRFBMTCBuYXR1cmUgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhhdCBwYXJ0aWN1bGFyIGRldmljZS4gVGltZSB0byB0YWtlIGEgbG9vayBhbmQgY29uZmlybSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFpMMzA3M1hcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVFxuICAgNjpcdFx0c2VsZWN0IERQTExcbiAgIDc6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAgODpcdFx0c2VsZWN0IFJFR01BUFxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcbiAgMTE6XHRcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxuICAxMjpcdFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAxNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBaTDMwNzNYX0kyQ1xuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLY29uZmlnIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFpMMzA3M1hgIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBjb25kaXRpb25hbCwgb25seSBzaG93aW5nIHVwIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQuIEJ1dCB3YWl0LCBpcyBpdCBqdXN0IGEgcGxhaW4gYHNlbGVjdGAgc3RhdGVtZW50IG9yIGEgYHRyaXN0YXRlYD8gQWgsIGl0IGxvb2tzIGxpa2UgYSBgdHJpc3RhdGUgJiMzNDtNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzJiMzNDsgaWYgQ09NUElMRV9URVNUYC4gU28sIHRoYXQgbWVhbnMgdGhpcyBlbnRpcmUgc2VjdGlvbiAqb25seSogYmVjb21lcyB2aXNpYmxlIGluIHRoZSBtZW51IGlmIGBDT01QSUxFX1RFU1RgIGlzIHRydWUuIElmIG5vdCwgaXQmIzM5O3MgaGlkZGVuIGZyb20gdmlldy4gV2hpY2ggYWxzbyBtZWFucyBpdCYjMzk7cyBzZWxlY3RhYmxlIGFzICYjMzQ7eSYjMzQ7LCAmIzM0O20mIzM0OyBvciAmIzM0O24mIzM0OyBpZiB0aGUgdmlzaWJpbGl0eSBpcyB0cnVlLgoKQnV0IGhvbGQgb24sIHRoYXQgZG9lc24mIzM5O3QgdXN1YWxseSBsb29rIGxpa2UgbXkgb3RoZXIgS2NvbmZpZyBvcHRpb25zLiBUeXBpY2FsbHksIEkmIzM5O2Qgc2VlIHNvbWV0aGluZyBsaWtlIGBkZXBlbmRzIG9uIEkyQ2Agb3Igc2ltaWxhciB0byBnYXRlIHRoZSBvcHRpb24gYmFzZWQgb24gdW5kZXJseWluZyBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgdHlwaWNhbCBwYXR0ZXJuIHVzZWQgaW4gdGhlIFBUUCBkcml2ZXIsIHNvIGxldCBtZSBxdWlja2x5IG5hdmlnYXRlIHRvIGBkcml2ZXJzL3B0cC9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIHNvbWV0aGluZyBsaWtlIGBQVFBfMTU4OF9DTE9DS19PQ1BgLiBKdXN0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIDIxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4gMjEyOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gMjEzOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgUENJXG4gMjE0Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTVREXG4gMjE1Olx0XHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXG4gMjE2Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gMjE3Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAyMTg6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDIxOTpcdFx0c2VsZWN0IENSQzE2XG4gMjIwOlx0XHRzZWxlY3QgRFBMTFxuIDIyMTpcdFx0aGVscFxuIDIyMjpcdFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cbiAyMjM6XHRcbiAyMjQ6XHRcdCAgVGhlIE9wZW5Db21wdXRlIHRpbWUgY2FyZCBpcyBhbiBhdG9taWMgY2xvY2sgYWxvbmcgd2l0aFxuIDIyNTpcdFx0ICBhIEdQUyByZWNlaXZlciB0aGF0IHByb3ZpZGVzIGEgR3JhbmRtYXN0ZXIgY2xvY2sgc291cmNlXG4gMjI2Olx0XHQgIGZvciBhIFBUUCBlbmFibGVkIG5ldHdvcmsuXG4gMjI3Olx0XG4gMjI4Olx0XHQgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudGltaW5nY2FyZC5jb20vXG4gMjI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRFBMTCBEcml2ZXIgU2VsZWN0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGFsbCB0aGUgcG9zc2libGUgcGF0aHMgdG8gc2VsZWN0IGEgRFBMTCBkcml2ZXIuIExldCBtZSBzZWUuLi4gSSYjMzk7dmUgZ290IHRoZXNlIGRyaXZlcnMgaWRlbnRpZmllZDogYElDRWAsIGBNTFg1X0RQTExgLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgYW5kIGBaTDMwNzNYYC4gUmlnaHQsIHRoZSBmaXJzdCB0d28sIGBJQ0VgIGFuZCBgTUxYNV9EUExMYCwgc2VlbSBzdHJhaWdodGZvcndhcmQgZm9yIHNwZWNpZmljIGhhcmR3YXJlLgoKSG9sZCBvbiwgSSBzZWUgdGhhdCBlbmFibGluZyBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCAqYWxzbyogZW5hYmxlcyBgRFBMTGAhIEludGVyZXN0aW5nLiBDYW4gSSBnZXQgYXdheSB3aXRoIGp1c3QgZGlyZWN0bHkgZW5hYmxpbmcgYERQTExgPyBOb3BlLCBpdCBsb29rcyBsaWtlIGBEUExMYCBpcyBqdXN0IGEgYm9vbGVhbiwgbm8gY29uZmlnIG9wdGlvbiwgc28gbm8gZGlyZWN0IHNlbGVjdGlvbi4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIGBQVFBfMTU4OF9DTE9DS19PQ1BgIHRoZW4uIEhtbSwgdGhhdCBvbmUgaGFzIGEgd2hvbGUgc2xldyBvZiBkZXBlbmRlbmNpZXM6IGBQQ0lgLCBgSTJDYCwgYE1URGAsIGBTRVJJQUxfODI1MGAsIGFuZCBgQ09NTU9OX0NMS2AuCgpOb3csIHdoYXQgYWJvdXQgYFpMMzA3M1hgPyBJdCByZXF1aXJlcyBgTkVUYC4gQnV0IHdhaXQgYSBzZWNvbmQsIHRoZXJlJiMzOTtzIHRoYXQgYHRyaXN0YXRlYCBkZWNsYXJhdGlvbiB3aXRoIGFuIGBpZiBDT01QSUxFX1RFU1RgLiBUaGF0JiMzOTtzIHdlaXJkLiBEb2VzIHRoYXQgbWVhbiBpdCYjMzk7cyBvbmx5IHNlbGVjdGFibGUgaWYgSSYjMzk7dmUgZW5hYmxlZCBgQ09NUElMRV9URVNUYD8gTm8sIG5vLCBgaWYgQ09NUElMRV9URVNUYCBqdXN0IG1lYW5zIHRoZSAqcHJvbXB0KiBpcyB2aXNpYmxlIG9ubHkgd2hlbiBgQ09NUElMRV9URVNUYCBpcyB0cnVlLiBJZiBgQ09NUElMRV9URVNUYCBpcyBmYWxzZSwgaXQmIzM5O3Mgbm90IHZpc2libGUsIGJ1dCBpdCB3b24mIzM5O3QgYmUgc2VsZWN0YWJsZSAqYW55d2F5Ki4gQnV0IHdoeSB3b3VsZG4mIzM5O3QgaXQgdXNlIHNvbWV0aGluZyBsaWtlIGBkZXBlbmRzIG9uIENPTVBJTEVfVEVTVCB8fCAuLi5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFpMMzA3M1hcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVFxuICAgNjpcdFx0c2VsZWN0IERQTExcbiAgIDc6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAgODpcdFx0c2VsZWN0IFJFR01BUFxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNaWNyb2NoaXAgQXp1cml0ZSBmYW1pbHkgRFBMTC9QVFAvU3luY0VcbiAgMTE6XHRcdCAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgdXAgdG8gNSBpbmRlcGVuZGVudCBEUExMIGNoYW5uZWxzLFxuICAxMjpcdFx0ICAxMCBpbnB1dCBwaW5zIGFuZCB1cCB0byAyMCBvdXRwdXQgcGlucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAxNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBaTDMwNzNYX0kyQ1xuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuICAyMDpcdFx0c2VsZWN0IFJFR01BUF9JMkNcbiAgMjE6XHRcdHNlbGVjdCBaTDMwNzNYXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0VcbiAgMjQ6XHRcdCAgZGV2aWNlcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI3Olx0XHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgWkwzMDczWF9TUElcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1NQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyOTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBEUExMIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgWkwzMDczWF9JMkNgLiBJdCAqc2VsZWN0cyogYFpMMzA3M1hgLCB3aGljaCwgaW4gdHVybiwgc2VsZWN0cyB0aGUgYERQTExgIGZlYXR1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGNhc2NhZGluZyBkb3duIHRoZSBsaW5lLiBJIHNlZSB0aGF0IGBaTDMwNzNYX0kyQ2AgcmVsaWVzIG9uIGJvdGggYEkyQ2AgYW5kIGBORVRgIGJlaW5nIGVuYWJsZWQuIFNvLCB0aGUgb2J2aW91cyBhcHByb2FjaCBpcyB0byBzaW1wbHkgZW5hYmxlIGBaTDMwNzNYX0kyQ2AsIHdoaWNoIHNob3VsZCBnaXZlIHVzIHRoZSBgRFBMTGAgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgYWZ0ZXIuCgpCdXQsIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzOiBjYW4gd2UgYWN0dWFsbHkgKnVzZSogdGhlIGBEUExMYCBmcm9tIHVzZXJzcGFjZT8gV2UgbmVlZCB0aGF0IGxldmVsIG9mIGFjY2VzcyB0byBiZSB1c2VmdWwuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IG5ldGxpbmssIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBBaCwgeWVzISBgZHBsbF9uZXRsaW5rLmNgIGlzIHJpbmdpbmcgYSBiZWxsIC0gdGhhdCBzdWdnZXN0cyBpdCByZWdpc3RlcnMgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHdlIG5lZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIHBhdGggb2YgaW50ZXJhY3Rpb24gdG8gdXNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5sX3JlZ2lzdGVyX2ZhbWlseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTExODY9c3RhdGljIGludCBfX2luaXQgZHBsbF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExODktXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE5MDpcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmRwbGxfbmxfZmFtaWx5KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTkxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIERQTEwgS2VybmVsIE1vZHVsZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgZHBsbF9pbml0YCwgcmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIG9uZSB0aGF0IGhhbmRsZXMgcmVnaXN0ZXJpbmcgdGhlIG5ldGxpbmsgZmFtaWx5LCB5ZXMsIHRoYXQgc291bmRzIHJpZ2h0LiBHb29kLiBBbmQgc2luY2UgYERQTExgIGl0c2VsZiBpcyBqdXN0IGEgYm9vbGVhbiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXRzIHByZXNlbmNlIGluIHRoZSBrZXJuZWwgY29tZXMgZG93biB0byB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBzZWxlY3RlZCBkdXJpbmcgY29tcGlsYXRpb24g4oCTIGEgY2xhc3NpYyBjb25maWd1cmF0aW9uIGZsYWcuIEhtbSwgaG9sZCBvbiBhIHNlY29uZC4uLiBgZHBsbF9pbml0YCByaW5ncyBhIGJlbGwgYXMgYW4gYGluaXRjYWxsYC4gUmlnaHQsIG9mIGNvdXJzZSwgaXQgbWFrZXMgc2Vuc2UgaXQgd291bGQgYmUuIFRoYXQgd291bGQgYmUgaG93IGl0JiMzOTtzIGJyb3VnaHQgaW50byBhY3Rpb24uIE9rYXksIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXQgbWlnaHQgYmUgd29ydGggYSBxdWljayBsb29rIGF0IHRoZSBgZHJpdmVycy9kcGxsL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGF0IHNob3VsZCBoYXZlIGFsbCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIERQTEwgZHJpdmVycy5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0RQTEwpICAgICAgJiM0Mzs9IGRwbGwub1xuICAgNzpcdGRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX2NvcmUub1xuICAgODpcdGRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX25ldGxpbmsub1xuICAgOTpcdGRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX25sLm9cbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgRFBMTCBOZXRsaW5rIEludGVyZmFjZSoqCgpPa2F5LCBzbyBgQ09ORklHX0RQTExgIGVuYWJsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBkcGxsX2NvcmUub2AgYW5kIGBkcGxsX25ldGxpbmsub2AuIFRoaXMgcGF0Y2ggdG91Y2hlcyBib3RoIG9mIHRob3NlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBkcGxsX2NvcmUuY2AgYW5kIGBkcGxsX25ldGxpbmsuY2AuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBjbHVzdGVyZWQgYXJvdW5kIGBkcGxsX3Bpbl9yZWdpc3RlcmAsIGBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3RgLCBgZHBsbF9wcml2YCwgYGRwbGxfZGV2aWNlX29wc2AsIGFuZCB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIHdpdGhpbiBgZHBsbF9uZXRsaW5rLmNgLgoKQWhhLCB0aG9zZSBuZXRsaW5rIGNhbGxiYWNrcyBhcmUgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzLCBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aGVyZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzIHdlcmUgYmVpbmcgYWNjZXNzZWQsIGJ5IGFkZGluZyBhIGNoZWNrIHRvIHNraXAgdGhlbSAoaS5lLiwgd2hlbiBgZHBsbF9kZXZpY2Vfb3BzKGRwbGwpID09IE5VTExgKS4gVGhhdCBzb3VuZHMgbGlrZSBhIGJ1ZyBmaXgsIGFuZCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LiBJdCYjMzk7cyBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjYWxsYmFja3MgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgLCBgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXRgLCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLgoKTm93LCBiZWZvcmUgSSBkaWcgaW50byBjcmFmdGluZyBmdXp6aW5nIGhhcm5lc3NlcywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHRvIGVuc3VyZSBJJiMzOTttIHRhcmdldGluZyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAgaXMgdXAgZmlyc3QuLi4gYW5kIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9jbWRfcGluX2dldF9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTcxMj1zdGF0aWMgaW50XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NzEzOmRwbGxfY21kX3Bpbl9nZXRfb25lKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTcxNC1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTkxMD1kcGxsX3Bpbl9ldmVudF9zZW5kKGVudW0gZHBsbF9jbWQgZXZlbnQsIHN0cnVjdCBkcGxsX3BpbiAqcGluKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy05MjUtXHRcdGdvdG8gZXJyX2ZyZWVfbXNnO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjkyNjpcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKG1zZywgcGluLCBOVUxMKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy05MjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xODY1PWludCBkcGxsX25sX3Bpbl9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODgyLVx0fVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE4ODM6XHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgaW5mby1cdTAwM2VleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4ODQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE4OTM9aW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTEzLVx0XHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTkxNDpcdFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLVx1MDAzZWV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkxNS1cdFx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkNvbnNpZGVyaW5nIERQTEwgUGluIEFjY2VzcyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIERQTEwgcGluIGFjY2VzcyBmdW5jdGlvbnMuIEkgc2VlIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAgYW5kIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dhaXQgYSBtaW51dGUsIHRoYXQmIzM5O3Mgc3RhdGljLCBpc24mIzM5O3QgaXQ/JiMzNDsgQW5kIHRoYXQmIzM5O3MgdXN1YWxseSBhIHJlZCBmbGFnIGZvciBtZS4gV2UgZ2VuZXJhbGx5IHdhbnQgdG8gdXRpbGl6ZSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIGJldHRlciBmbGV4aWJpbGl0eSBhbmQgcmV1c2FiaWxpdHksIGZvciBlYXNpZXIgaW50ZWdyYXRpb24gaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBTbywgSSYjMzk7bSBnb2luZyB0byBzdGVlciBjbGVhciBvZiB0aGF0IG9uZSBpZiBhdCBhbGwgcG9zc2libGUuCgpOb3csIGxldCBtZSBjb21wYXJlIHRoYXQgdG8gYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLiBUaG9zZSBhcmUgKm5vbiotc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gVGhvc2UgYXJlIHRoZSBvbmVzIEkmIzM5O2xsIGJlIGxlYW5pbmcgdG93YXJkcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRob3NlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGNhbGxzLgoKVG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoZSBmcmVxdWVuY3kgaXMgc2V0LiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcGxsX3Bpbl9mcmVxX3NldGAgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSB0aGF0IG9uZSBwbGF5cyBuaWNlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfcGluX2ZyZXFfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMDk2PXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDk3OmRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwOTgtXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNjg0PWRwbGxfcGluX3NldF9mcm9tX25sYXR0cihzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTY5Mi1cdFx0Y2FzZSBEUExMX0FfUElOX0ZSRVFVRU5DWTpcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNjkzOlx0XHRcdHJldCA9IGRwbGxfcGluX2ZyZXFfc2V0KHBpbiwgYSwgaW5mby1cdTAwM2VleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2OTQtXHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipTdGF0aWMgRnVuY3Rpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgLiBTaW5jZSBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIHN0YXRpYywgSSBpbW1lZGlhdGVseSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdHMgY2FsbGluZyBmdW5jdGlvbiwgYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAsIGlzIGFsc28gZGVjbGFyZWQgc3RhdGljLiBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0aWMgZGVzaWduYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSByb3V0aW5lcyBmaXQgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgZGljdGF0ZXMgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVjbGFyYXRpb24uLi4ganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE2ODM9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE2ODQ6ZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2ODUte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xOTM0PWludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTM3LVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE5Mzg6XHRyZXR1cm4gZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyKHBpbiwgaW5mbyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRFBMTCBNb2R1bGUgVGhvdWdodHMqKgoKT2theSwgc28gYGRwbGxfbmxfcGluX3NldF9kb2l0YCBpcyB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBwaW4tc2V0dGluZyBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgY29uZmlndXJhdGlvbnMgYXJlIG1hZGUuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGUgZmxvdy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgZmV3IGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHBpbiBzZXR0aW5nczogYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgLCBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGAsIGFuZCBgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXRgLiBNeSBodW5jaCBpcyB0aGF0IHRoZXkmIzM5O3JlIGFsbCBjYWxsZWQgZnJvbSB3aXRoaW4gYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCBgbmxhdHRyYCBpcyB0aGUgTmV0bGluayBhdHRyaWJ1dGUgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGxpa2VseSBob3cgdGhlIGRyaXZlciBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gc2V0IHVwIHRob3NlIHBpbnMgZnJvbSB0aGUgYXBwbGljYXRpb24gbGF5ZXIuCgpBbmQsIG9mIGNvdXJzZSwgdG8gY29tcGxldGUgdGhlIHBpY3R1cmUsIEkgc2hvdWxkIGFsc28gbG9vayBhdCBgZHBsbF9waW5fcmVnaXN0ZXJgLiBJdCB3b3VsZCBjb250YWluIGFsbCB0aGUgZGF0YSByZWdhcmRpbmcgYXZhaWxhYmxlIHBpbnMsIHRoZWlyIHBvc3NpYmxlIHNldHRpbmdzLCBhbmQgdGhlaXIgcGFyZW50IGRldmljZXMuIEl0IHdvdWxkIGJlIG15IGZpcnN0IHN0b3AgZm9yIHJldmVyc2UtZW5naW5lZXJpbmcgdGhlIGF2YWlsYWJsZSBwaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9ODQxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo4NDI6X19kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg0My1cdFx0ICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdiwgdm9pZCAqY29va2llKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NjMtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6ODY0OiAqIGRwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgcGluIGluIHRoZSBzdWJzeXN0ZW1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NjUtICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTg3NT1pbnRcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo4NzY6ZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NzctXHRcdCAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05MDktXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTEwOlx0cmV0ID0gX19kcGxsX3Bpbl9yZWdpc3RlcihkcGxsLCBwaW4sIG9wcywgcHJpdiwgTlVMTCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTExLW91dF91bmxvY2s6XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxNS19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTE2OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfcGluX3JlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05MTctXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTk4NT1pbnQgZHBsbF9waW5fb25fcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX3BpbiAqcGFyZW50LCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTAwNC1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBhcmVudC1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwMDU6XHRcdHJldCA9IF9fZHBsbF9waW5fcmVnaXN0ZXIocmVmLVx1MDAzZWRwbGwsIHBpbiwgb3BzLCBwcml2LCBwYXJlbnQpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMDYtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERQTEwgUGluIFJlZ2lzdHJhdGlvbiBhbmQgTmV0bGluayBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgZHJpdmVycywgbWFraW5nIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCB0aHVzLCBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZSBuZXRsaW5rIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggaXQuCgpNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6CgoqICAgYGRwbGxfbmxfcGluX2dldF9kb2l0YAoqICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgCiogICBgZHBsbF9ubF9waW5fc2V0X2RvaXRgCiogICBgZHBsbF9waW5fcmVnaXN0ZXJgCgpMZXQgbWUgbWFrZSBzdXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIG5ldGxpbmsgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIGFmZmVjdGVkLiBBaCwgaW4gYGRwbGxfbmV0bGluay5jYCwgSSBzZWUgdGhhdCBgZHBsbF9tc2dfYWRkX3Bpbl9kcGxsc2AgaGFzIGJlZW4gbW9kaWZpZWQuIFJpZ2h0LCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBpbnZva2VkIGJ5IGJvdGggYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLiBJdCBsb29rcyBsaWtlIGBkcGxsX3Bpbl9ldmVudF9zZW5kYCBhbHNvIGNhbGxzIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAuIENvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llcywgbXkgaW5pdGlhbCBjaG9pY2VzIGZvciB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYWNjdXJhdGUuCgpXYWl0IGEgbW9tZW50Li4uIHdoYXQgYWJvdXQgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGA/IElzIHRoYXQgcmVsZXZhbnQ/IE9oLCBpdCYjMzk7cyBzdGF0aWMuIFByb2JhYmx5IG5vdCBhIGZvY3VzLiBBbmQgd2hhdCBhYm91dCBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2A/IFRob3NlIGFyZSBleHBvcnRlZCwgc28gdGhleSBtaWdodCBwbGF5IGEgcm9sZSBpbiB0aGUgc3lzdGVtLiBCdXQgdGhlIG1haW4gaW50ZXJhY3Rpb24gc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgcGluLXJlbGF0ZWQgb3BlcmF0aW9ucyB3aXRoIG5ldGxpbmssIHdoaWNoIG1ha2UgYGRwbGxfbmxfcGluX2dldF9kb2l0YCwgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLCBhbmQgYGRwbGxfcGluX3JlZ2lzdGVyYCB0aGUgcHJpbWFyeSBjYW5kaWRhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwoZHBsbF9wcml2XFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3ODQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGRwbGxfcHJpdmAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGRwbGxfcHJpdmAuIFdlJiMzOTtyZSBsaWtlbHkgYXQgYSBwb2ludCB3aGVyZSB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhpcyBwcml2YXRlIGZ1bmN0aW9uIG9yIG1vZHVsZS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7dmUgaXNvbGF0ZWQgYSBwcm9ibGVtIGFyZWEsIGFuZCBgZHBsbF9wcml2YCBpcyBhIGtleSBjb21wb25lbnQgd2l0aGluIGl0LiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBlaXRoZXIgY29uZmlybSBhIGh5cG90aGVzaXMgYWJvdXQgaXRzIHJvbGUsIG9yIHRvIGhvcGVmdWxseSB1bmNvdmVyIHNvbWUgZnVydGhlciBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChkcGxsX3ByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRFBMTCBQcml2YXRlIEZ1bmN0aW9uIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgZHBsbF9jb3JlLmNgIGZpbGUgYWdhaW4uIFRpbWUgdG8gZ2V0IGRvd24gYW5kIGRpcnR5IHdpdGggYGRwbGxfcHJpdmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyDigJMgc3BlY2lmaWNhbGx5LCBob3cgdGhleeKAmXJlIGhhbmRsaW5nIHByaXZhdGUgdmFyaWFibGVzLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBpbiB0aGF0IERQTEwgY29yZS4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgbnVhbmNlIGhlcmUgcmVnYXJkaW5nIGNsYXVzZSBzZWxlY3Rpb24sIGNvbmZsaWN0IGFuYWx5c2lzLCBvciBwZXJoYXBzIGV2ZW4gdGhlIGxpdGVyYWwgYXNzaWdubWVudCBzdHJhdGVnaWVzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIHB1YmxpYyBpbnRlcmZhY2UuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgdGhlIGRldGFpbHMgdGhhdCBhcmUgaGlkZGVuIGZyb20gY2FzdWFsIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfcHJpdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTA4OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDkzLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwOTQ6dm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDk1LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTExNT1kcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMjU6dm9pZCAqZHBsbF9waW5fb25fZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI2LVx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0ODIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRQTExfUFJJViBBY2Nlc3MgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgZHBsbF9wcml2YCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBub3QgZXhwb3J0ZWQuIFRoYXQgc3RyaWtlcyBtZSBhcyBvZGQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQmIzM5O3MgaW50ZW50aW9uYWwgb3IgaWYgc29tZXRoaW5nJiMzOTtzIGdvbmUgYXdyeS4gTXkgaW5zdGluY3QgaXMgdG8gcXVpY2tseSBjaGVjayB0aGUgZW5kIG9mIHRoZSBgZHBsbF9wcml2YCBkZWNsYXJhdGlvbi4gVGhpcyBzaG91bGQgaW1tZWRpYXRlbHkgdGVsbCBtZSBpZiBpdCYjMzk7cyBnb3QgdGhlIHVzdWFsIGV4dGVybiAmIzM0O0MmIzM0OyB2aXNpYmlsaXR5LCBvciBwZXJoYXBzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgcmVhc29uIGl0JiMzOTtzIHNjb3BlZCB0aGF0IHRpZ2h0bHkuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHdoeSBpdCYjMzk7cyBiZWhhdmluZyB0aGlzIHdheS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZWZpbml0aW9uIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTQ6XHR2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuMTA5NTpcdHtcbjEwOTY6XHRcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbjEwOTc6XHRcbjEwOTg6XHRcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcbjEwOTk6XHRcdGlmICghcmVnKVxuMTEwMDpcdFx0XHRyZXR1cm4gTlVMTDtcbjExMDE6XHRcdHJldHVybiByZWctXHUwMDNlcHJpdjtcbjExMDI6XHR9XG4xMTAzOlx0XG4xMTA0Olx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZHBsbF9kZXZpY2Vfb3BzKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbjExMDU6XHR7XG4xMTA2Olx0XHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4xMTA3Olx0XG4xMTA4Olx0XHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XG4xMTA5Olx0XHRpZiAoIXJlZylcbjExMTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTExOlx0XHRyZXR1cm4gcmVnLVx1MDAzZW9wcztcbjExMTI6XHR9XG4xMTEzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgdGhlIEV4cG9ydCBvZiBEUExMIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgRFBMTCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGUgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGV5JiMzOTtyZSAqbm90KiBleHBvcnRlZCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3QgY2hlY2suIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGVyZSAqYXJlKiB0aGV5IGRlZmluZWQ/IEhtbSwgbGV0IG1lIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIEFoLCByaWdodCwgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBkZWNsYXJlZCB3aXRoaW4gYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaGAuIFRoYXQgY291bGQgY2hhbmdlIHRoaW5ncy4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgbGlua2FnZSB3b3JrcyBmcm9tIHRoYXQgaGVhZGVyLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgbWFjcm8gb3IgaW5saW5lIGRlZmluaXRpb24gaW4gdGhlcmUsIG9yIG1heWJlIHRoZSBjb3JlIGl0c2VsZiBpcyBub3QgdGhlIHByb2JsZW0sIGJ1dCBpbnN0ZWFkIGFuIGltcG9ydCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9wcml2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTY4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTA4OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDkzLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwOTQ6dm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDk1LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTExNT1kcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmlyc3Qoc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMjU6dm9pZCAqZHBsbF9waW5fb25fZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI2LVx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmg9ODE9c3RydWN0IGRwbGxfcGluX3JlZiB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oLTg5LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oOjkwOnZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oOjkxOnZvaWQgKmRwbGxfcGluX29uX2RwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaC05Mi12b2lkICpkcGxsX3Bpbl9vbl9waW5fcHJpdihzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4pO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMTU9ZHBsbF9tc2dfYWRkX21vZGUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjEtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIyOlx0cmV0ID0gb3BzLVx1MDAzZW1vZGVfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2bW9kZSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMzI9ZHBsbF9tc2dfYWRkX21vZGVfc3VwcG9ydGVkKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTQwLVx0aWYgKG9wcy1cdTAwM2VzdXBwb3J0ZWRfbW9kZXNfZ2V0KSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQxOlx0XHRyZXQgPSBvcHMtXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG1vZGVzLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0Mi1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0OC1cdFx0ICovXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ5Olx0XHRyZXQgPSBvcHMtXHUwMDNlbW9kZV9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZtb2RlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1MC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTY0PWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXRfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3MS1cdGlmIChvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3Jfc2V0IFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3JfZ2V0KSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTcyOlx0XHRyZXQgPSBvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNzMtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNnN0YXRlLCBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xODQ9ZHBsbF9tc2dfYWRkX2ZyZXFfbW9uaXRvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MS1cdGlmIChvcHMtXHUwMDNlZnJlcV9tb25pdG9yX3NldCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9nZXQpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTI6XHRcdHJldCA9IG9wcy1cdTAwM2VmcmVxX21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTMtXHRcdFx0XHRcdCAgICBcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjA0PWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXRfYXZnX2ZhY3RvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMTItXHRpZiAob3BzLVx1MDAzZXBoYXNlX29mZnNldF9hdmdfZmFjdG9yX2dldCkge1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIxMzpcdFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX29mZnNldF9hdmdfZmFjdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjE0LVx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZmYWN0b3IsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTIyNT1kcGxsX21zZ19hZGRfbG9ja19zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMzItXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjMzOlx0cmV0ID0gb3BzLVx1MDAzZWxvY2tfc3RhdHVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNnN0YXR1cyxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMzQtXHRcdFx0XHQgICBcdTAwMjZzdGF0dXNfZXJyb3IsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTI0OT1kcGxsX21zZ19hZGRfdGVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTI1Ny1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjU4Olx0cmV0ID0gb3BzLVx1MDAzZXRlbXBfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2dGVtcCwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0yNjg9ZHBsbF9tc2dfYWRkX2Nsb2NrX3F1YWxpdHlfbGV2ZWwoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNzctXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjI3ODpcdHJldCA9IG9wcy1cdTAwM2VjbG9ja19xdWFsaXR5X2xldmVsX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHFscywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0yODk9ZHBsbF9tc2dfYWRkX3Bpbl9wcmlvKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yOTktXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMDpcdHJldCA9IG9wcy1cdTAwM2VwcmlvX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMTpcdFx0XHQgICAgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZwcmlvLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTMwMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTMxMT1kcGxsX21zZ19hZGRfcGluX29uX2RwbGxfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTMyMS1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzIyOlx0cmV0ID0gb3BzLVx1MDAzZXN0YXRlX29uX2RwbGxfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzIzOlx0XHRcdFx0ICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNnN0YXRlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTMyNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTMzMz1kcGxsX21zZ19hZGRfcGluX29wZXJzdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ0LVx0cmV0ID0gb3BzLVx1MDAzZW9wZXJzdGF0ZV9vbl9kcGxsX2dldChwaW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzQ1Olx0XHRcdFx0XHQgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM0NjpcdFx0XHRcdFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ3LVx0XHRcdFx0XHQgIFx1MDAyNm9wZXJzdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MzU3PWRwbGxfbXNnX2FkZF9waW5fZGlyZWN0aW9uKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zNjUtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzY2Olx0cmV0ID0gb3BzLVx1MDAzZWRpcmVjdGlvbl9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzozNjc6XHRcdFx0XHQgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZkaXJlY3Rpb24sIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9Mzc3PWRwbGxfbXNnX2FkZF9waW5fcGhhc2VfYWRqdXN0KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zODctXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM4ODpcdHJldCA9IG9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6Mzg5Olx0XHRcdFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zOTAtXHRcdFx0XHQgICAgXHUwMDI2cGhhc2VfYWRqdXN0LCBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz00MDA9ZHBsbF9tc2dfYWRkX3BoYXNlX29mZnNldChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDEwLVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MTE6XHRyZXQgPSBvcHMtXHUwMDNlcGhhc2Vfb2Zmc2V0X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQxMjpcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNnBoYXNlX29mZnNldCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MTMtXHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NDIzPXN0YXRpYyBpbnQgZHBsbF9tc2dfYWRkX2ZmbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDMzLVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MzQ6XHRyZXQgPSBvcHMtXHUwMDNlZmZvX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihyZWYtXHUwMDNlZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MzU6XHRcdFx0ICAgcmVmLVx1MDAzZWRwbGwsIGRwbGxfcHJpdihyZWYtXHUwMDNlZHBsbCksIFx1MDAyNmZmbywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MzYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTQ0OT1zdGF0aWMgaW50IGRwbGxfbXNnX2FkZF9tZWFzdXJlZF9mcmVxKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00NjEtXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2MjpcdHJldCA9IGRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDYzLVx0XHRcdFx0XHRcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDY3LVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0Njg6XHRyZXQgPSBvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0Njk6XHRcdFx0XHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZtZWFzdXJlZF9mcmVxLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTQ3MC1cdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz00ODI9ZHBsbF9tc2dfYWRkX3Bpbl9mcmVxKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00OTItXHRcdHJldHVybiAwO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ5MzpcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NDk0Olx0XHRcdFx0IGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2ZnJlcSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00OTUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz01MjM9ZHBsbF9tc2dfYWRkX3Bpbl9lc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTMzLVx0XHRyZXR1cm4gMDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1MzQ6XHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTM1Olx0XHRcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZlc3luYywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy01MzYtXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz01Njg9ZHBsbF9tc2dfYWRkX3Bpbl9yZWZfc3luYyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTgwLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjU4MTpcdHBpbl9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTgyLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZXJlZl9zeW5jX3BpbnMsIGluZGV4LCByZWZfc3luY19waW4pIHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTg0LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjU4NTpcdFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy01ODYtXHRcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTYyMz1kcGxsX21zZ19hZGRfcGluX3BhcmVudHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTYzOC1cdFx0cHBpbiA9IHJlZi1cdTAwM2VwaW47XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NjM5Olx0XHRwYXJlbnRfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsX3JlZi1cdTAwM2VkcGxsLCBwcGluKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy02NDAtXHRcdHJldCA9IG9wcy1cdTAwM2VzdGF0ZV9vbl9waW5fZ2V0KHBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9OTkwPWRwbGxfbW9kZV9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDAzLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwMDQ6XHRyZXQgPSBvcHMtXHUwMDNlbW9kZV9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZvbGRfbW9kZSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDA1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDEyLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwMTM6XHRyZXQgPSBvcHMtXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG1vZGVzLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwMTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwMjQtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTAyNTpcdHJldHVybiBvcHMtXHUwMDNlbW9kZV9zZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBtb2RlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwMjYtfVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMDI5PWRwbGxfcGhhc2Vfb2Zmc2V0X21vbml0b3Jfc2V0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IG5sYXR0ciAqYSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAzOS1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDQwOlx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX29mZnNldF9tb25pdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9zdGF0ZSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDQxLVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA0OC1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDQ5Olx0cmV0dXJuIG9wcy1cdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9zZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBzdGF0ZSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDUwLVx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwNTQ9ZHBsbF9waGFzZV9vZmZzZXRfYXZnX2ZhY3Rvcl9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDY1LVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNjY6XHRyZXR1cm4gb3BzLVx1MDAzZXBoYXNlX29mZnNldF9hdmdfZmFjdG9yX3NldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIGZhY3RvcixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDY3LVx0XHRcdFx0XHRcdGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwNzE9ZHBsbF9mcmVxX21vbml0b3Jfc2V0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IG5sYXR0ciAqYSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA4Mi1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDgzOlx0cmV0ID0gb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZvbGRfc3RhdGUsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA4NC1cdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDkyLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwOTM6XHRyZXR1cm4gb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9zZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBzdGF0ZSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDk0LX1cbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA5Nz1kcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMC1cdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMxOlx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMyOlx0XHRcdFx0IGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2b2xkX2ZyZXEsIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMy1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTE0Ni1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjExNDc6XHRcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTE0ODpcdFx0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMTQ5LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNjktXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTcwOlx0XHRpZiAob3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTcxOlx0XHRcdFx0ICAgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX2ZyZXEsIGV4dGFjaykpXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTE3Mi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NldCBmcmVxdWVuY3kgcm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTE3OD1kcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyMDgtXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIwOTpcdHJldCA9IG9wcy1cdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjEwOlx0XHRcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBcdTAwMjZlc3luYywgZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjExLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjI2LVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIyNzpcdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjI4LVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjM0LVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIzNTpcdFx0cGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMzY6XHRcdHJldCA9IG9wcy1cdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTIzNy1cdFx0XHRcdCAgICAgIGZyZXEsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTEtXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjUyOlx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTMtXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNjEtXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjYyOlx0XHRwaW5fZHBsbF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTI2MzpcdFx0aWYgKG9wcy1cdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI2NC1cdFx0XHRcdCAgIGVzeW5jLmZyZXEsIGV4dGFjaykpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEyNzE9ZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzA1LVx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMDY6XHRyZXQgPSBvcHMtXHUwMDNlcmVmX3N5bmNfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMwNy1cdFx0XHRcdHJlZl9zeW5jX3BpbixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMzA4Olx0XHRcdFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMwOS1cdFx0XHRcdFx1MDAyNm9sZF9zdGF0ZSwgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMyMi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMjM6XHRcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzI0LVx0XHRcdFx0XHRyZWZfc3luY19waW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTMyNTpcdFx0XHRcdFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMyNi1cdFx0XHRcdFx0XHRcdCAgICAgIHJlZl9zeW5jX3BpbiksXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNDgtXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMzQ5Olx0XHRpZiAob3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNTAtXHRcdFx0XHQgICAgICByZWZfc3luY19waW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTM1MTpcdFx0XHRcdCAgICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNTItXHRcdFx0XHQgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEzODQ9ZHBsbF9waW5fb25fcGluX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdTMyIHBhcmVudF9pZHgsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0MTQtXHRcdHBpbl9wcml2ID0gZHBsbF9waW5fb25fcGluX3ByaXYocGFyZW50LCBwaW4pO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0MTU6XHRcdHBhcmVudF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGxfcmVmLVx1MDAzZWRwbGwsIHBhcmVudCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTQxNi1cdFx0cmV0ID0gb3BzLVx1MDAzZXN0YXRlX29uX3Bpbl9zZXQocGluLCBwaW5fcHJpdiwgcGFyZW50LCBwYXJlbnRfcHJpdixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQyNz1kcGxsX3Bpbl9zdGF0ZV9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTQ0Ny1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0NDg6XHRyZXQgPSBvcHMtXHUwMDNlc3RhdGVfb25fZHBsbF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDQ5Olx0XHRcdFx0ICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHN0YXRlLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NTAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNDU4PWRwbGxfcGluX3ByaW9fc2V0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NzQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDc1Olx0cmV0ID0gb3BzLVx1MDAzZXByaW9fc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ3NjpcdFx0XHQgICAgZHBsbF9wcml2KGRwbGwpLCBwcmlvLCBleHRhY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NzctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNDg1PWRwbGxfcGluX2RpcmVjdGlvbl9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUwMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDM6XHRyZXQgPSBvcHMtXHUwMDNlZGlyZWN0aW9uX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDQ6XHRcdFx0XHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBkaXJlY3Rpb24sIGV4dGFjayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUwNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE1MTM9ZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1NTQtXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU1NTpcdHJldCA9IG9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU1NjpcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9waGFzZV9hZGosXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU1Ny1cdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTcyLVx0XHRyZXQgPSBvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldChwaW4sXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU3MzpcdFx0XHRcdFx0ICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1NzQ6XHRcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaixcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTc1LVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU5Ny1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1OTg6XHRcdGlmIChvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1OTk6XHRcdFx0XHRcdCAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBvbGRfcGhhc2VfYWRqLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2MDAtXHRcdFx0XHRcdCAgZXh0YWNrKSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTY9emwzMDczeF9kcGxsX3Bpbl9kaXJlY3Rpb25fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sIHZvaWQgKnBpbl9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjk3Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05OC1cdFx0XHQgICAgICAgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gKmRpcmVjdGlvbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTIzPXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZXN5bmNfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTI2Olx0XHRcdFx0IHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjctXHRcdFx0XHQgc3RydWN0IGRwbGxfcGluX2VzeW5jICplc3luYyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI5LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMzA6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTMxLVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2MD16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2VzeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2MzpcdFx0XHRcdCB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NC1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTY1LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNjY6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTY3LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI5Nj16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2Zmb19nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbiwgdm9pZCAqcGluX3ByaXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mjk3Olx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yOTgtXHRcdFx0ICAgICAgIHN0cnVjdCBkcGxsX2Zmb19wYXJhbSAqZmZvLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMTI9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9tZWFzdXJlZF9mcmVxX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMTQtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MzE1Olx0XHRcdFx0XHQgdm9pZCAqZHBsbF9wcml2LCB1NjQgKm1lYXN1cmVkX2ZyZXEsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzE2LVx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMjc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMyOS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjMzMDpcdFx0XHRcdCAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgKmZyZXF1ZW5jeSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzEtXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzIte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjMzMzpcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzQtXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTM0ND16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzQ2LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MzQ3Olx0XHRcdFx0ICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzQ4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzQ5LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozNTA6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzUxLVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTM5MT16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3BoYXNlX29mZnNldF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzkzLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mzk0Olx0XHRcdFx0XHR2b2lkICpkcGxsX3ByaXYsIHM2NCAqcGhhc2Vfb2Zmc2V0LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5NS1cdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5Ni17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mzk3Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5OC1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz00NDc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ0OS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjQ1MDpcdFx0XHRcdFx0dm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ1MS1cdFx0XHRcdFx0czMyICpwaGFzZV9hZGp1c3QsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ1My17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDU0Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ1NS1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz00ODA9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9waGFzZV9hZGp1c3Rfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ4Mi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjQ4MzpcdFx0XHRcdFx0dm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTQ4NC1cdFx0XHRcdFx0czMyIHBoYXNlX2FkanVzdCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg2LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo0ODc6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg4LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTU0Nz16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3N0YXRlX29uX2RwbGxfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU0OS1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo1NTA6XHRcdFx0XHRcdCB2b2lkICpkcGxsX3ByaXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNTUxLVx0XHRcdFx0XHQgZW51bSBkcGxsX3Bpbl9zdGF0ZSAqc3RhdGUsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU1My17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NTU0Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU1NS1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NTg1PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fb3BlcnN0YXRlX29uX2RwbGxfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU4Ny1cdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NTg4Olx0XHRcdFx0XHQgICAgIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01ODktXHRcdFx0XHRcdCAgICAgZW51bSBkcGxsX3Bpbl9vcGVyc3RhdGUgKm9wZXJzdGF0ZSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NTk4PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fc3RhdGVfb25fZHBsbF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjAwLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjYwMTpcdFx0XHRcdFx0IHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDItXHRcdFx0XHRcdCBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDQte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjYwNTpcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDYtXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTY4NT16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3ByaW9fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sIHZvaWQgKnBpbl9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjY4NjpcdFx0XHRcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTY4Ny1cdFx0XHRcdHUzMiAqcHJpbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz02OTc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9wcmlvX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLCB2b2lkICpwaW5fcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo2OTg6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02OTktXHRcdFx0XHR1MzIgcHJpbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NzAxOlx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMi1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NzI3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03MjktXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo3MzA6XHRcdFx0XHQgIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03MzEtXHRcdFx0XHQgIHN0cnVjdCBkcGxsX3Bpbl9lc3luYyAqZXN5bmMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczMy17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NzM0Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczNS1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz03ODU9emwzMDczeF9kcGxsX291dHB1dF9waW5fZXN5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTc4Ny1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjc4ODpcdFx0XHRcdCAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03ODktXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTAte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjc5MTpcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTItXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9ODQyPXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODQ0LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjg0NTpcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0ICpmcmVxdWVuY3ksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODQ2LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0Ny17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6ODQ4Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0OS1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9ODU3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODU5LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjg2MDpcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODYyLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo4NjM6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODY0LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTkzMT16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzMy1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5MzQ6XHRcdFx0XHRcdCB2b2lkICpkcGxsX3ByaXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTM1LVx0XHRcdFx0XHQgczMyICpwaGFzZV9hZGp1c3QsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzNy17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTM4Olx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzOS1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz05NTQ9emwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NTYtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTU3Olx0XHRcdFx0XHQgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk1OC1cdFx0XHRcdFx0IHMzMiBwaGFzZV9hZGp1c3QsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk2MC17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTYxOlx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk2Mi1cdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz05Nzg9emwzMDczeF9kcGxsX291dHB1dF9waW5fc3RhdGVfb25fZHBsbF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTgwLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5ODE6XHRcdFx0XHRcdCAgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk4Mi1cdFx0XHRcdFx0ICBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTkxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5OTI6emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk5My1cdFx0ICAgICAgczMyICp0ZW1wLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTk0LXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5OTU6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTk2LVx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEwMTA9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEwMTE6emwzMDczeF9kcGxsX2xvY2tfc3RhdHVzX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMDEyLVx0XHRcdCAgICAgZW51bSBkcGxsX2xvY2tfc3RhdHVzICpzdGF0dXMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEwMTUte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEwMTY6XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4ODcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRQTEwgSW52ZXN0aWdhdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgc2VlIGBkcGxsX3ByaXZgIGlzIGRlY2xhcmVkIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmhgLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBIb3dldmVyLCBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gU28sIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmU6CgoqICAgYGRwbGxfbmxfcGluX2dldF9kb2l0YAoqICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgCiogICBgZHBsbF9ubF9waW5fc2V0X2RvaXRgCiogICBgZHBsbF9waW5fcmVnaXN0ZXJgCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIENoZWNraW5nIGBkcGxsX25ldGxpbmsuY2AsIEkgZmluZDoKCiogICBgZHBsbF9tc2dfYWRkX3Bpbl9kcGxsc2AgaXMgc3RhdGljLgoqICAgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBpcyBzdGF0aWMuCiogICBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX3Bpbl9lc3luY19zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCBpcyBzdGF0aWMuCiogICBgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXRgIGlzIHN0YXRpYy4KKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCBpcyBub24tc3RhdGljLgoKV2FpdCBhIHNlY29uZCwgYWx0aG91Z2ggYGRwbGxfbmxfcGluX2dldF9kdW1waXRgIGlzIG5vbi1zdGF0aWMsIHdoYXQgYWJvdXQgYGRwbGxfbmxfcGluX3NldF9kb2l0YD8gQWx0aG91Z2ggaXQmIzM5O3Mgbm90IGRpcmVjdGx5IG1vZGlmaWVkLCBpdCBjYWxscyBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgd2hpY2ggdGhlbiBpbiB0dXJuIGNhbGxzIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAgaXMgYWJzb2x1dGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLgoKTGV0IG1lIGV4YW1pbmUgYGRwbGxfZGV2aWNlX29wc2AgYW5kIGBkcGxsX3ByaXZgIGluIGBkcGxsX2NvcmUuY2Agbm93LiBUaGV5JiMzOTtyZSBub3QgZXhwb3J0ZWQgdGhlbXNlbHZlcywgYnV0IHRoZXkgYXJlIGNhbGxlZCB3aXRoaW4gYGRwbGxfbmV0bGluay5jYCBhbmQgYGRwbGxfY29yZS5jYC4gQWgsIGJ1dCBgZHBsbF9kZXZpY2Vfb3BzYCBpcyB1c2VkIGJ5IGBkcGxsX3Bpbl9yZWdpc3RlcmAsIHdoaWNoICppcyogZXhwb3J0ZWQsIHNvIHRoYXQmIzM5O3MgcmVsZXZhbnQuCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3Mgd2UmIzM5O2xsIG5lZWQuIGBEUExMYCBpcyBhIGJvb2xlYW4sIHNvIHdlIGNhbiYjMzk7dCBlbmFibGUgaXQgZGlyZWN0bHkuIFdlIG5lZWQgYSBkcml2ZXIgdGhhdCBzZWxlY3RzIGl0LiBJIHNlZSB0aGF0IGBaTDMwNzNYX0kyQ2Agc2VsZWN0cyBgWkwzMDczWGAsIHdoaWNoIHRoZW4gc2VsZWN0cyBgRFBMTGAuIExldCBtZSBzZWUsIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDYCBhbmQgYE5FVGAsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIEJhY2sgdG8gYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgLiBgY29uZmlnIFpMMzA3M1hgIHNlbGVjdHMgYERQTExgLiBgY29uZmlnIFpMMzA3M1hfSTJDYCBzZWxlY3RzIGBaTDMwNzNYYC4gU28sIHdlIGNhbiBlbmFibGUgYFpMMzA3M1hfSTJDYC4gSG1tLCB3YWl0LCBJIHNlZSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBhbHNvIHNlbGVjdHMgYERQTExgLiBDaGVja2luZyBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgZm9yIGBQVFBfMTU4OF9DTE9DS19PQ1BgLCBpdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIGBIQVNfSU9NRU1gLCBgUENJYCwgYEkyQ2AsIGBNVERgLCBgU0VSSUFMXzgyNTBgLCBgIVMzOTBgLCBhbmQgYENPTU1PTl9DTEtgLiBUaGF0IGxvb2tzIHNpZ25pZmljYW50bHkgbW9yZSBpbnZvbHZlZCB0aGFuIGBaTDMwNzNYX0kyQ2AsIHNvIGxldCYjMzk7cyBzdGljayB3aXRoIHRoYXQgZm9yIG5vdy4gTGV0IG1lIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIG9uZSBtb3JlIHRpbWUsIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDICZhbXA7JmFtcDsgTkVUYC4gU28gdGhhdCYjMzk7cyBjb25maXJtZWQuIEkmIzM5O2xsIGFkZCBgWkwzMDczWF9JMkNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIE9oIHdhaXQsIGBaTDMwNzNYYCBpcyB0cmlzdGF0ZSBpZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCBidXQgZXZlbiBpZiBgQ09NUElMRV9URVNUYCBpc24mIzM5O3QgZW5hYmxlZCwgYFpMMzA3M1hfSTJDYCB3aWxsIHN0aWxsIHNlbGVjdCBpdC4gUGVyZmVjdC4gQmVjYXVzZSBgWkwzMDczWF9JMkNgIGhhcyBgc2VsZWN0IFpMMzA3M1hgLgoKTGV0IG1lIGFsc28gY2hlY2sgYE1MWDVfRFBMTGAuIEl0IGRlcGVuZHMgb24gYE5FVERFVklDRVMgJmFtcDsmYW1wOyBFVEhFUk5FVCAmYW1wOyZhbXA7IFBDSSAmYW1wOyZhbXA7IE1MWDVfQ09SRWAsIGFuZCBhbHNvIGBzZWxlY3QgRFBMTGAuIFRoZW4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgzMD1pbnQgZHBsbF9ubF9waW5faWRfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTg2NC1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxODY1OmludCBkcGxsX25sX3Bpbl9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4NjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ1MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pY3Mgb2YgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByb2Nlc3NpbmcgdGhpc+KAlHllcywgdGhlIG5hdHVyZSBvZiB0aGlzIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGxpbmUgb2YgdGhvdWdodC4uLiB3aGF0IGFib3V0IGBkcGxsX25sX3Bpbl9zZXRfZG9pdGA/IEkmIzM5O20gd29uZGVyaW5nIGhvdyB0aGF0IGZ1bmN0aW9uIGZpdHMgaW50byB0aGlzIGV2b2x2aW5nIHNjZW5hcmlvLiBXaGVyZSBkb2VzIGl0IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgcGljdHVyZT8gSXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYW5kIGNvbnNpZGVyIGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX25sX3Bpbl9zZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTg5Mz1pbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MzMtXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTkzNDppbnQgZHBsbF9ubF9waW5fc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3OTcKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEUExMIFN1YnN5c3RlbSBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3AgKERQTEwpIHN1YnN5c3RlbS4gVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlaXIgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBGaXJzdCwgaXQmIzM5O3MgY2xlYXIgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmVuJiMzOTt0IHN0YXRpYzsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGNhbGxlZCBieSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zLiBgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0YCBoYXMgYmVlbiBjaGFuZ2VkLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYC4gVGhvc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHF1aXRlIGEgZmV3IG5ldGxpbmsgY2FsbGJhY2tzLiBBZGRpdGlvbmFsbHksIGBkcGxsX3Bpbl9yZWdpc3RlcmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZCBhbmQgZXhwb3J0ZWQuCgpUaGUgY29yZSBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uIGFyZTogYGRwbGxfcGluX3JlZ2lzdGVyYCwgYGRwbGxfbmxfcGluX2dldF9kb2l0YCwgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLCBhbmQgYGRwbGxfbmxfcGluX3NldF9kb2l0YC4KCmBkcGxsX3Bpbl9yZWdpc3RlcmAgaXMgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIOKAkyBkcml2ZXJzIGNhbGwgaXQgZHVyaW5nIHByb2JlIOKAkyBidXQgaXTigJlzIGEgY29yZSBrZXJuZWwgQVBJLCBzbyBpdHMgaW5jbHVzaW9uIGluIHRoZSBmdXp6aW5nIHNjb3BlIGlzIGp1c3RpZmllZC4gVGhlIG5ldGxpbmsgY2FsbGJhY2tzLCBob3dldmVyLCBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQuCgpUaGUgcGF0Y2ggZXNzZW50aWFsbHkgaW1wcm92ZXMgaG93IHRoZSBEUExMIHN1YnN5c3RlbSBoYW5kbGVzIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIHVzaW5nIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIHdpdGhpbiB0aGUgbmV0bGluayBjYWxsYmFja3MgKGxpa2UgYGRwbGxfcGluX2ZyZXFfc2V0YCwgZXRjLikgdG8gYXZvaWQgb3BlcmF0aW9ucyBvbiB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGRzIHZhbGlkYXRpb24gb2YgYGRldl9vcHNgIGluIGBkcGxsX3Bpbl9yZWdpc3RlcmAgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGZvciB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBrZXJuZWwgY29kZSB0aGF0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgRFBMTCBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBUaGlzIGlzIHNpZ25pZmljYW50LCBhbmQgdGhleSB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4KCk5vdywgd2hpY2ggY29uZmlncyBtYWtlIHNlbnNlIHRvIGVuYWJsZT8gV2Uga25vdyBgWkwzMDczWF9JMkNgIHNlbGVjdHMgYFpMMzA3M1hgLCB3aGljaCBpbiB0dXJuIHNlbGVjdHMgYERQTExgLiBgSUNFYCBhbHNvIHNlbGVjdHMgYERQTExgLCBhcyBkb2VzIGBNTFg1X0RQTExgLiBCdXQgYE1MWDVfRFBMTGAgaXMgY29udGluZ2VudCBvbiBgTUxYNV9DT1JFYCwgYW5kIGBJQ0VgIGRlcGVuZHMgb24gYFBDSWAuIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDICZhbXA7JmFtcDsgTkVUYC4gSSYjMzk7bGwganVzdCBmb2N1cyBvbiBlbmFibGluZyBgWkwzMDczWF9JMkNgIGFuZCBgSUNFYCB0byBndWFyYW50ZWUgdGhhdCB0aGUgYERQTExgIGNvbmZpZyBpcyBlbmFibGVkLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBgWkwzMDczWF9JMkNgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQgZGVwZW5kcyBvbiBgSTJDICZhbXA7JmFtcDsgTkVUYC4gYEkyQ2AgaXMgY29tbW9uIGluIHRoZSBzeXprYWxsZXIgY29uZmlncywgYW5kIGBORVRgIGlzIGRlZmluaXRlbHkgaW5jbHVkZWQuIFBlcmZlY3QuIGBaTDMwNzNYX0kyQ2Agc2VlbXMgaWRlYWwuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXM6IGBkcGxsX3Bpbl9yZWdpc3RlcmAgaXMgYSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgaW50IGRwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdilgLgoKQW5kIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAsIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCwgYW5kIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAgYXJlIGFsc28gbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBkcGxsX25ldGxpbmsuY2AuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgZnV6emluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pMMzA3M1hfSTJDJiMzNDssCiAgICAmIzM0O0lDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RwbGxfcGluX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kb2l0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX2dldF9kdW1waXQmIzM0OywKICAgICYjMzQ7ZHBsbF9ubF9waW5fc2V0X2RvaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERQTEwgKERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3ApIHN1YnN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgdW5yZWdpc3RlcmVkIERQTEwgZGV2aWNlcy4gSXQgYWRkcyBjaGVja3MgZm9yIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGluIHZhcmlvdXMgbmV0bGluayBjYWxsYmFja3MgKGUuZy4sIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGApIHRvIHNraXAgdW5yZWdpc3RlcmVkIGRldmljZXMuIEl0IGFsc28gdXBkYXRlcyBgZHBsbF9waW5fcmVnaXN0ZXJgIHRvIHZhbGlkYXRlIGBkZXZfb3BzYCBiZWZvcmUgdXNlLCBhbmQgbW9kaWZpZXMgYGRwbGxfcHJpdmAgYW5kIGBkcGxsX2RldmljZV9vcHNgIHRvIHJldHVybiBgTlVMTGAgaWYgdGhlIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgRFBMTCBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaTDMwNzNYX0kyQyYjMzQ7LAogICAgJiMzNDtJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcGxsX3Bpbl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtkcGxsX25sX3Bpbl9nZXRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RwbGxfbmxfcGluX3NldF9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBpbiB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIChlLmcuLCBgZHBsbF9waW5fZnJlcV9zZXRgLCBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgKSB0byBza2lwIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhbHNvIHVwZGF0ZXMgYGRwbGxfcGluX3JlZ2lzdGVyYCB0byB2YWxpZGF0ZSBgZGV2X29wc2AgYmVmb3JlIHVzZSwgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERQTEwgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNjoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGNoZWNrcyBpbiB0aGUgRFBMTCBzdWJzeXN0ZW0uIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGBkcGxsX2RldmljZV9vcHMoKWAgYW5kIGBkcGxsX3ByaXYoKWAgY291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIERQTEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBsaXN0IHdhcyBlbXB0eSwgbGVhZGluZyB0byBhIGtlcm5lbCBjcmFzaC4gVGhlIHBhdGNoIGFkZHMgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgY2hlY2tzIHRvIGVuc3VyZSB0aGUgZGV2aWNlIGlzIGZ1bGx5IHJlZ2lzdGVyZWQgYmVmb3JlIGFjY2Vzc2luZyBpdHMgb3BlcmF0aW9ucyBvciBwcm9wZXJ0aWVzIHZpYSBuZXRsaW5rIG9yIHBpbiByZWdpc3RyYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmODc2MmFjNDczMTMwZjQ5MmM2NjVhMTJiNDBlODJiYmNmZmZlZTBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTY6MjY6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMKaW5kZXggNDNkNTFkOTQyZWFkZC4uYTMyMGVlYjgyOWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYwpAQCAtODc2LDE5ICYjNDM7ODc2LDI1IEBAIGludAogZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAkJICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRldl9vcHM7CiAJaW50IHJldDsKIAogCWlmIChXQVJOX09OKCFvcHMpIHx8CiAJICAgIFdBUk5fT04oIW9wcy0mZ3Q7c3RhdGVfb25fZHBsbF9nZXQpIHx8CiAJICAgIFdBUk5fT04oIW9wcy0mZ3Q7ZGlyZWN0aW9uX2dldCkgfHwKLQkgICAgV0FSTl9PTihvcHMtJmd0O21lYXN1cmVkX2ZyZXFfZ2V0ICZhbXA7JmFtcDsKLQkJICAgICghZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLSZndDtmcmVxX21vbml0b3JfZ2V0IHx8Ci0JCSAgICAgIWRwbGxfZGV2aWNlX29wcyhkcGxsKS0mZ3Q7ZnJlcV9tb25pdG9yX3NldCkpIHx8CiAJICAgIFdBUk5fT04ob3BzLSZndDtzdXBwb3J0ZWRfZmZvICZhbXA7JmFtcDsgIW9wcy0mZ3Q7ZmZvX2dldCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYW1wO2RwbGxfbG9jayk7CiAKJiM0MzsJZGV2X29wcyA9IGRwbGxfZGV2aWNlX29wcyhkcGxsKTsKJiM0MzsJaWYgKFdBUk5fT04ob3BzLSZndDttZWFzdXJlZF9mcmVxX2dldCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFkZXZfb3BzIHx8ICFkZXZfb3BzLSZndDtmcmVxX21vbml0b3JfZ2V0IHx8CiYjNDM7CQkgICAgICFkZXZfb3BzLSZndDtmcmVxX21vbml0b3Jfc2V0KSkpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIEZvciBwaW5zIGlkZW50aWZpZWQgdmlhIGZpcm13YXJlIChwaW4tJmd0O2Z3bm9kZSksIGFsbG93IHJlZ2lzdHJhdGlvbgogCSAqIGV2ZW4gaWYgdGhlIHBpbiYjMzk7cyAobW9kdWxlLCBjbG9ja19pZCkgZGlmZmVycyBmcm9tIHRoZSB0YXJnZXQgRFBMTC4KQEAgLTEwODEsMTIgJiM0MzsxMDg3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fcmVmX3N5bmNfcGFpcl9hZGQpOwogc3RhdGljIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKgogZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKIHsKLQlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7Ci0KLQlyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKikmYW1wO2RwbGwtJmd0O3JlZ2lzdHJhdGlvbl9saXN0LAotCQkJCSAgICAgICBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTsKLQlXQVJOX09OKCFyZWcpOwotCXJldHVybiByZWc7CiYjNDM7CXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKikmYW1wO2RwbGwtJmd0O3JlZ2lzdHJhdGlvbl9saXN0LAomIzQzOwkJCQkJc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7CiB9CiAKIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpCkBAIC0xMDk0LDYgJiM0MzsxMDk2LDggQEAgdm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCkKIAlzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7CiAKIAlyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7CiYjNDM7CWlmICghcmVnKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHJlZy0mZ3Q7cHJpdjsKIH0KIApAQCAtMTEwMiw2ICYjNDM7MTEwNiw4IEBAIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRwbGxfZGV2aWNlX29wcyhzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpCiAJc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnOwogCiAJcmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpOwomIzQzOwlpZiAoIXJlZykKJiM0MzsJCXJldHVybiBOVUxMOwogCXJldHVybiByZWctJmd0O29wczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jCmluZGV4IGFmYjMxYzAwNDAzODIuLjllNTU3NDVlMzNlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKQEAgLTY2LDYgJiM0Mzs2NiwyMiBAQCBzdGF0aWMgYm9vbCBkcGxsX3Bpbl9hdmFpbGFibGUoc3RydWN0IGRwbGxfcGluICpwaW4pCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpCiYjNDM7ewomIzQzOwlyZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYoc3RydWN0IGRwbGxfcGluICpwaW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKQomIzQzOwkJaWYgKGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQlyZXR1cm4gcmVmOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGRwbGxfbXNnX2FkZF9waW5faGFuZGxlIC0gYXR0YWNoIHBpbiBoYW5kbGUgYXR0cmlidXRlIHRvIGEgZ2l2ZW4gbWVzc2FnZQogICogQG1zZzogcG9pbnRlciB0byBza19idWZmIG1lc3NhZ2UgdG8gYXR0YWNoIGEgcGluIGhhbmRsZQpAQCAtNjU2LDYgJiM0Mzs2NzIsOCBAQCBkcGxsX21zZ19hZGRfcGluX2RwbGxzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCWludCByZXQ7CiAKIAl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpbmRleCwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFKTsKIAkJaWYgKCFhdHRyKQogCQkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTcwMCw5ICYjNDM7NzE4LDEwIEBAIGRwbGxfY21kX3Bpbl9nZXRfb25lKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCWludCByZXQ7CiAKIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCXJlZiA9IGRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHBpbik7CiAJaWYgKCFyZWYpCi0JCXJlZiA9IGRwbGxfeGFfcmVmX2RwbGxfZmlyc3QoJmFtcDtwaW4tJmd0O2RwbGxfcmVmcyk7Ci0JQVNTRVJUX05PVF9OVUxMKHJlZik7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldCA9IGRwbGxfbXNnX2FkZF9waW5faGFuZGxlKG1zZywgcGluKTsKIAlpZiAocmV0KQpAQCAtMTA5MSw2ICYjNDM7MTExMCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCX0KIAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoKCFvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQgfHwgIW9wcy0mZ3Q7ZnJlcXVlbmN5X2dldCkgJmFtcDsmYW1wOwogCQkgICAgcmVmLSZndDtkcGxsLSZndDttb2R1bGUgPT0gcGluLSZndDttb2R1bGUgJmFtcDsmYW1wOwpAQCAtMTEwMSw3ICYjNDM7MTEyMiw3IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCQl9CiAJfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwotCWlmICghcmVmKSB7CiYjNDM7CWlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTExNyw2ICYjNDM7MTEzOCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCQlyZXR1cm4gMDsKIAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCkKIAkJCWNvbnRpbnVlOwpAQCAtMTEzOCw2ICYjNDM7MTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewogCQlpZiAocmVmID09IGZhaWxlZCkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCkKIAkJCWNvbnRpbnVlOwpAQCAtMTE2Myw2ICYjNDM7MTE4OCw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAlpbnQgcmV0OwogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICgoIW9wcy0mZ3Q7ZXN5bmNfc2V0IHx8ICFvcHMtJmd0O2VzeW5jX2dldCkgJmFtcDsmYW1wOwogCQkgICAgcmVmLSZndDtkcGxsLSZndDttb2R1bGUgPT0gcGluLSZndDttb2R1bGUgJmFtcDsmYW1wOwpAQCAtMTE3Myw3ICYjNDM7MTIwMCw3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAkJfQogCX0KIAlyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTsKLQlpZiAoIXJlZikgewomIzQzOwlpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTExOTksNiAmIzQzOzEyMjYsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCXZvaWQgKnBpbl9kcGxsX3ByaXY7CiAKJiM0MzsJCWlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtJmd0O2RwbGwpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKIAkJaWYgKCFvcHMtJmd0O2VzeW5jX3NldCkKIAkJCWNvbnRpbnVlOwpAQCAtMTIyNCw2ICYjNDM7MTI1Myw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAogCQlpZiAocmVmID09IGZhaWxlZCkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xMjYyLDcgJiM0MzsxMjkzLDcgQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7Ci0JaWYgKCFyZWYpIHsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMjgzLDYgJiM0MzsxMzE0LDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCWlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpCiAJCXJldHVybiAwOwogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xMzA3LDYgJiM0MzsxMzQwLDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLAogCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewogCQlpZiAocmVmID09IGZhaWxlZCkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi0mZ3Q7ZHBsbCkpCiYjNDM7CQkJY29udGludWU7CiAJCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwogCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQogCQkJY29udGludWU7CkBAIC0xNTAwLDYgJiM0MzsxNTM1LDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJfQogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICgoIW9wcy0mZ3Q7cGhhc2VfYWRqdXN0X3NldCB8fCAhb3BzLSZndDtwaGFzZV9hZGp1c3RfZ2V0KSAmYW1wOyZhbXA7CiAJCSAgICByZWYtJmd0O2RwbGwtJmd0O21vZHVsZSA9PSBwaW4tJmd0O21vZHVsZSAmYW1wOyZhbXA7CkBAIC0xNTA5LDcgJiM0MzsxNTQ2LDcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCX0KIAl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7Ci0JaWYgKCFyZWYpIHsKJiM0MzsJaWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kJiMzNDspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xNTI2LDYgJiM0MzsxNTYzLDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCXJldHVybiAwOwogCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0KQogCQkJY29udGludWU7CkBAIC0xNTUwLDYgJiM0MzsxNTg5LDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7CiAJCWlmIChyZWYgPT0gZmFpbGVkKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKSkKJiM0MzsJCQljb250aW51ZTsKIAkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7CiAJCWlmICghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0KQogCQkJY29udGludWU7CkBAIC0xNTgxLDcgJiM0MzsxNjIyLDcgQEAgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBhcmVudF9uZXN0LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcGRwbGxfaWR4ID0gbmxhX2dldF91MzIodGJbRFBMTF9BX1BJTl9QQVJFTlRfSURdKTsKLQlkcGxsID0geGFfbG9hZCgmYW1wO2RwbGxfZGV2aWNlX3hhLCBwZHBsbF9pZHgpOwomIzQzOwlkcGxsID0gZHBsbF9kZXZpY2VfZ2V0X2J5X2lkKHBkcGxsX2lkeCk7CiAJaWYgKCFkcGxsKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwYXJlbnQgZGV2aWNlIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODczLDYgJiM0MzsxOTE0LDEwIEBAIGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJcmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLSZndDtleHRhY2spOwogCQlpZiAocmV0KSB7CiAJCQlnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7CiYjNDM7CQkJaWYgKHJldCA9PSAtRU5PREVWKSB7CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODEKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogMTA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBEUExMIERldmljZSBSZWdpc3RyYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGRldmljZSByZWdpc3RyYXRpb24gYW5kIGhhbmRsaW5nIG9mIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGlzc3VlIGlzIHByZXZlbnRpbmcgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGEgRFBMTCBkZXZpY2UgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkIG9yIHJlZ2lzdGVyZWQuCgpJIHNlZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNgIGFuZCBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG5ldGxpbmsgaW50ZXJhY3Rpb24gYW5kIGNvcmUgRFBMTCBkZXZpY2UgbWFuYWdlbWVudC4gVGhlIGtleSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLSZndDtkcGxsKWAgY2hlY2tzLiBUaGlzIGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBkZWZpbmVkIGFzIGByZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO2AsIGFjdHMgYXMgYSBnYXRla2VlcGVyLCB2ZXJpZnlpbmcgdGhhdCB0aGUgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHZhbGlkIGJlZm9yZSB0aGV5IGFyZSB1c2VkLgoKTG9va2luZyBkZWVwZXIsIHRoZSBwYXRjaCBhbHRlcnMgYGRwbGxfZGV2aWNlX29wc2AgYW5kIGBkcGxsX3ByaXZgIHRvIHJldHVybiBgTlVMTGAgaWYgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKWAgcmV0dXJucyBgTlVMTGAuIFRoaXMgaXMgY3JpdGljYWwuIEJlZm9yZSB0aGlzIHBhdGNoLCBjYWxsaW5nIGBkcGxsX2RldmljZV9vcHNgIHdvdWxkIHRyeSB0byBhY2Nlc3MgdGhlIGBvcHNgIGZpZWxkIG9mIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLCBldmVuIGlmIHRoYXQgc3RydWN0dXJlIHdhcyBOVUxMLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgY2xhc3NpYyBrZXJuZWwgcGFuaWMuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoYXQgYnkgZ3JhY2VmdWxseSByZXR1cm5pbmcgYE5VTExgIHdoZW4gdGhlIGRldmljZSBpc24mIzM5O3QgcmVnaXN0ZXJlZC4gSXQgc2VlbXMgdGhlIG1haW4gaXNzdWUgaXMgYSBtaXNzaW5nIGNoZWNrIGluIHRoZSBjb2RlIHBhdGguCgpGdXJ0aGVybW9yZSwgYGRwbGxfcGluX3JlZ2lzdGVyYCBub3cgZGlyZWN0bHkgY2hlY2tzIGBkZXZfb3BzYCAod2hpY2ggcG90ZW50aWFsbHkgY291bGQgYmUgTlVMTCksIGluc3RlYWQgb2YgY2FsbGluZyBgZHBsbF9kZXZpY2Vfb3BzKGRwbGwpYCBhbmQgaGFuZGxlcyB0aGUgYE5VTExgIGNhc2UuIFRoaXMgaXMgYSBuaWNlLCBwcm9hY3RpdmUgY2hhbmdlLiBJbiBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAsIHRoZSBjb2RlIG5vdyBpZ25vcmVzIGAtRU5PREVWYCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIGxpa2VseSB0byBoYW5kbGUgdGhlIHNhbWUgdW5yZWdpc3RlcmVkIGRldmljZSBzY2VuYXJpby4gQWxzbywgaW4gYGRwbGxfcGluX3BhcmVudF9kZXZpY2Vfc2V0YCB3ZSBub3cgdXNlIGBkcGxsX2RldmljZV9nZXRfYnlfaWRgIGluc3RlYWQgb2YgYHhhX2xvYWRgIHdoaWNoIHNlZW1zIHRvIGVuc3VyZSBkZXZpY2UgaW50ZWdyaXR5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBwYXRjaCBpcyBhYm91dCBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IsIG1vcmUgcHJlY2lzZWx5LCBhbiAmIzM0O3VzZS1iZWZvcmUtaW5pdGlhbGl6YXRpb24mIzM0OyBzY2VuYXJpby4gSXTigJlzIGVuc3VyaW5nIHRoYXQgbmV0bGluayBvcGVyYXRpb25zIGFuZCBwaW4gcmVnaXN0cmF0aW9uIGFyZW4mIzM5O3QgcGVyZm9ybWVkIG9uIHBhcnRpYWxseSBvciB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gVGhlIG9sZGVyIGNvZGUgZGlkbuKAmXQgY29ycmVjdGx5IGhhbmRsZSB0aGVzZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCB0aGUgb2xkIGNvZGUmIzM5O3MgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGAgZnVuY3Rpb24gcmV0dXJuZWQgYE5VTExgIGluIHRoZSB1bnJlZ2lzdGVyZWQgY2FzZSwgYW5kIHRoZSBkZXJlZmVyZW5jZSBjYXVzZWQgdGhlIGNyYXNoLiBUaGUgbmV3IGNoZWNrcyBtYWtlIHRoZSBjb2RlIG1vcmUgcm9idXN0IGFuZCBkZWZlbnNpdmUuCgpUaGUgbW9zdCBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludm9sdmVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSByZS1leGFtaW5lZCB0aGUgY29kZS4gVGhlIGFuc3dlciBpcyAqbm8qLiBJdCYjMzk7cyBwdXJlbHkgYWJvdXQgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGZvciBhIHZhbGlkIGRldmljZSByZWdpc3RyYXRpb24gYmVmb3JlIGFjY2Vzc2luZyBpdHMgcHJvcGVydGllcy4gVGhlcmXigJlzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgaXNuJiMzOTt0IGFib3V0IEtNU0FOLXNwZWNpZmljIGlzc3Vlcy4gVGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgZmF1bHQgaGFuZGxlcnMuCgpMZXQgbWUgdmVyaWZ5IGEgcXVpY2sgY2hlY2sgb24gYGRwbGxfY21kX3Bpbl9nZXRfb25lYC4gVGhlIHBhdGNoIG1ha2VzIHRoaXMgY29kZSBibG9jayBtb3JlIHJvYnVzdCBieSBoYW5kbGluZyBgLUVOT0RFVmAgKG5vIGRldmljZSBlcnJvcikgbW9yZSBncmFjZWZ1bGx5LiBUaGlzIG1ha2VzIHNlbnNlIGluIGxpZ2h0IG9mIHRoZSB1bnJlZ2lzdGVyZWQgZGV2aWNlIGlzc3VlLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhlIHBhdGNoIGlzIHNvbGVseSBhYm91dCBzdHJlbmd0aGVuaW5nIHRoZSBkcml2ZXIgYWdhaW5zdCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIHRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgYW5kLCBjcnVjaWFsbHksIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXNzdWUgaGVyZS4gSXTigJlzIHNpbXBseSBhIGZpeCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdGhhdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGluIGEga2VybmVsIGNyYXNoLCB3aGljaCBpcyByZWxpYWJseSBjYXVnaHQgYnkgZXhpc3RpbmcgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIEkgY29uY2x1ZGUgKipOZWVkc0tNU0FOID0gZmFsc2UqKi4gVGhlIHJlYXNvbmluZyBpcyB0aGUgcGF0Y2ggaGFuZGxlcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MuIFRoZSBjb2RlIGF2b2lkcyBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnMgd2l0aCBuZXdseSBhZGRlZCBjaGVja3Mgd2l0aCBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MgaW4gdGhlIERQTEwgc3Vic3lzdGVtLiBQcmlvciB0byB0aGlzIHBhdGNoLCBgZHBsbF9kZXZpY2Vfb3BzKClgIGFuZCBgZHBsbF9wcml2KClgIGNvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBEUExMIGRldmljZSByZWdpc3RyYXRpb24gbGlzdCB3YXMgZW1wdHksIGxlYWRpbmcgdG8gYSBrZXJuZWwgY3Jhc2guIFRoZSBwYXRjaCBhZGRzIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGNoZWNrcyB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBmdWxseSByZWdpc3RlcmVkIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIG9wZXJhdGlvbnMgb3IgcHJvcGVydGllcyB2aWEgbmV0bGluayBvciBwaW4gcmVnaXN0cmF0aW9uLlxuXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgaW52YWxpZCBzdGF0ZSBhY2Nlc3Nlcywgd2hpY2ggYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiAob3Igc2ltcGx5IHRyaWdnZXIgYSBwYWdlIGZhdWx0KS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgaW5mby1sZWFrcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzIGluIHRoZSBEUExMIHN1YnN5c3RlbS4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgYGRwbGxfZGV2aWNlX29wcygpYCBhbmQgYGRwbGxfcHJpdigpYCBjb3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciBpZiB0aGUgRFBMTCBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpc3Qgd2FzIGVtcHR5LCBsZWFkaW5nIHRvIGEga2VybmVsIGNyYXNoLiBUaGUgcGF0Y2ggYWRkcyBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBjaGVja3MgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgZnVsbHkgcmVnaXN0ZXJlZCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBvcGVyYXRpb25zIG9yIHByb3BlcnRpZXMgdmlhIG5ldGxpbmsgb3IgcGluIHJlZ2lzdHJhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGludmFsaWQgc3RhdGUgYWNjZXNzZXMsIHdoaWNoIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgS0FTQU4gKG9yIHNpbXBseSB0cmlnZ2VyIGEgcGFnZSBmYXVsdCkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG9yIGluZm8tbGVha3MuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjAwLjA2MDM4MTI2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYzOTU4OTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaTDMwNzNYX0kyQ1wiLFxuICAgIFwiSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHBsbF9waW5fcmVnaXN0ZXJcIixcbiAgICBcImRwbGxfbmxfcGluX2dldF9kb2l0XCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZHVtcGl0XCIsXG4gICAgXCJkcGxsX25sX3Bpbl9zZXRfZG9pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MgaW4gdGhlIERQTEwgc3Vic3lzdGVtLiBQcmlvciB0byB0aGlzIHBhdGNoLCBgZHBsbF9kZXZpY2Vfb3BzKClgIGFuZCBgZHBsbF9wcml2KClgIGNvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBEUExMIGRldmljZSByZWdpc3RyYXRpb24gbGlzdCB3YXMgZW1wdHksIGxlYWRpbmcgdG8gYSBrZXJuZWwgY3Jhc2guIFRoZSBwYXRjaCBhZGRzIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGNoZWNrcyB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBmdWxseSByZWdpc3RlcmVkIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIG9wZXJhdGlvbnMgb3IgcHJvcGVydGllcyB2aWEgbmV0bGluayBvciBwaW4gcmVnaXN0cmF0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBzdWJzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBpbiB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIChlLmcuLCBgZHBsbF9waW5fZnJlcV9zZXRgLCBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3BoYXNlX2Fkal9zZXRgKSB0byBza2lwIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhbHNvIHVwZGF0ZXMgYGRwbGxfcGluX3JlZ2lzdGVyYCB0byB2YWxpZGF0ZSBgZGV2X29wc2AgYmVmb3JlIHVzZSwgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGlmIHRoZSBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERQTEwgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6MDAuMDYwMzkxOTMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY3MDYzMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjg3NjJhYzQ3MzEzMGY0OTJjNjY1YTEyYjQwZTgyYmJjZmZmZWUwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNjoyNjo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcXG5pbmRleCA0M2Q1MWQ5NDJlYWRkLi5hMzIwZWViODI5YWQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xcbkBAIC04NzYsMTkgKzg3NiwyNSBAQCBpbnRcXG4gZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4gXFx0XFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZGV2X29wcztcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChXQVJOX09OKCFvcHMpIHx8XFxuIFxcdCAgICBXQVJOX09OKCFvcHMtXFx1MDAzZXN0YXRlX29uX2RwbGxfZ2V0KSB8fFxcbiBcXHQgICAgV0FSTl9PTighb3BzLVxcdTAwM2VkaXJlY3Rpb25fZ2V0KSB8fFxcbi1cXHQgICAgV0FSTl9PTihvcHMtXFx1MDAzZW1lYXN1cmVkX2ZyZXFfZ2V0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxcbi1cXHRcXHQgICAgICFkcGxsX2RldmljZV9vcHMoZHBsbCktXFx1MDAzZWZyZXFfbW9uaXRvcl9zZXQpKSB8fFxcbiBcXHQgICAgV0FSTl9PTihvcHMtXFx1MDAzZXN1cHBvcnRlZF9mZm8gXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlZmZvX2dldCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4gXFxuK1xcdGRldl9vcHMgPSBkcGxsX2RldmljZV9vcHMoZHBsbCk7XFxuK1xcdGlmIChXQVJOX09OKG9wcy1cXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICghZGV2X29wcyB8fCAhZGV2X29wcy1cXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxcbitcXHRcXHQgICAgICFkZXZfb3BzLVxcdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBGb3IgcGlucyBpZGVudGlmaWVkIHZpYSBmaXJtd2FyZSAocGluLVxcdTAwM2Vmd25vZGUpLCBhbGxvdyByZWdpc3RyYXRpb25cXG4gXFx0ICogZXZlbiBpZiB0aGUgcGluJ3MgKG1vZHVsZSwgY2xvY2tfaWQpIGRpZmZlcnMgZnJvbSB0aGUgdGFyZ2V0IERQTEwuXFxuQEAgLTEwODEsMTIgKzEwODcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWZfc3luY19wYWlyX2FkZCk7XFxuIHN0YXRpYyBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpcXG4gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcXG4ge1xcbi1cXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuLVxcbi1cXHRyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKilcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTtcXG4tXFx0V0FSTl9PTighcmVnKTtcXG4tXFx0cmV0dXJuIHJlZztcXG4rXFx0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKVxcdTAwMjZkcGxsLVxcdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7XFxuIH1cXG4gXFxuIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuQEAgLTEwOTQsNiArMTA5Niw4IEBAIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuIFxcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcXG4gXFxuIFxcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcXG4rXFx0aWYgKCFyZWcpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRyZXR1cm4gcmVnLVxcdTAwM2Vwcml2O1xcbiB9XFxuIFxcbkBAIC0xMTAyLDYgKzExMDYsOCBAQCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpkcGxsX2RldmljZV9vcHMoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxcbiBcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuIFxcbiBcXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XFxuK1xcdGlmICghcmVnKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0cmV0dXJuIHJlZy1cXHUwMDNlb3BzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcXG5pbmRleCBhZmIzMWMwMDQwMzgyLi45ZTU1NzQ1ZTMzZTRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbkBAIC02Niw2ICs2NiwyMiBAQCBzdGF0aWMgYm9vbCBkcGxsX3Bpbl9hdmFpbGFibGUoc3RydWN0IGRwbGxfcGluICpwaW4pXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuK3tcXG4rXFx0cmV0dXJuIGRwbGxfZGV2aWNlX29wcyhkcGxsKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKmRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHN0cnVjdCBkcGxsX3BpbiAqcGluKVxcbit7XFxuK1xcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpXFxuK1xcdFxcdGlmIChkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdHJldHVybiByZWY7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbiAvKipcXG4gICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlXFxuICAqIEBtc2c6IHBvaW50ZXIgdG8gc2tfYnVmZiBtZXNzYWdlIHRvIGF0dGFjaCBhIHBpbiBoYW5kbGVcXG5AQCAtNjU2LDYgKzY3Miw4IEBAIGRwbGxfbXNnX2FkZF9waW5fZHBsbHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGluZGV4LCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0UpO1xcbiBcXHRcXHRpZiAoIWF0dHIpXFxuIFxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuQEAgLTcwMCw5ICs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcXG4rXFx0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0cmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTtcXG4gXFx0aWYgKCFyZWYpXFxuLVxcdFxcdHJlZiA9IGRwbGxfeGFfcmVmX2RwbGxfZmlyc3QoXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzKTtcXG4tXFx0QVNTRVJUX05PVF9OVUxMKHJlZik7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmV0ID0gZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUobXNnLCBwaW4pO1xcbiBcXHRpZiAocmV0KVxcbkBAIC0xMDkxLDYgKzExMTAsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0fVxcbiBcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4gXFx0XFx0aWYgKCghb3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0IHx8ICFvcHMtXFx1MDAzZWZyZXF1ZW5jeV9nZXQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICByZWYtXFx1MDAzZWRwbGwtXFx1MDAzZW1vZHVsZSA9PSBwaW4tXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xMTAxLDcgKzExMjIsNyBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xcbi1cXHRpZiAoIXJlZikge1xcbitcXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbkBAIC0xMTE3LDYgKzExMzgsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbitcXHRcXHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbiBcXHRcXHRpZiAoIW9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTExMzgsNiArMTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTE2Myw2ICsxMTg4LDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4gXFx0XFx0aWYgKCghb3BzLVxcdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cXHUwMDNlZXN5bmNfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTE3Myw3ICsxMjAwLDcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XFxuLVxcdGlmICghcmVmKSB7XFxuK1xcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuQEAgLTExOTksNiArMTIyNiw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4gXFx0XFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcXG4gXFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2Vlc3luY19zZXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjI0LDYgKzEyNTMsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2Vlc3luY19zZXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjYyLDcgKzEyOTMsNyBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xcbi1cXHRpZiAoIXJlZikge1xcbitcXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbkBAIC0xMjgzLDYgKzEzMTQsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdGlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbitcXHRcXHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbiBcXHRcXHRpZiAoIW9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTMwNyw2ICsxMzQwLDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2VyZWZfc3luY19zZXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xNTAwLDYgKzE1MzUsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4rXFx0XFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cXHUwMDNlZHBsbCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4gXFx0XFx0aWYgKCghb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9nZXQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICByZWYtXFx1MDAzZWRwbGwtXFx1MDAzZW1vZHVsZSA9PSBwaW4tXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xNTA5LDcgKzE1NDYsNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xcbi1cXHRpZiAoIXJlZikge1xcbitcXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbkBAIC0xNTI2LDYgKzE1NjMsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbitcXHRcXHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVxcdTAwM2VkcGxsKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbiBcXHRcXHRpZiAoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTE1NTAsNiArMTU4OSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxcbiBcXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbiBcXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXFx1MDAzZWRwbGwpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuIFxcdFxcdGlmICghb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTU4MSw3ICsxNjIyLDcgQEAgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBhcmVudF9uZXN0LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRwZHBsbF9pZHggPSBubGFfZ2V0X3UzMih0YltEUExMX0FfUElOX1BBUkVOVF9JRF0pO1xcbi1cXHRkcGxsID0geGFfbG9hZChcXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIHBkcGxsX2lkeCk7XFxuK1xcdGRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTtcXG4gXFx0aWYgKCFkcGxsKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBhcmVudCBkZXZpY2Ugbm90IGZvdW5kXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xODczLDYgKzE5MTQsMTAgQEAgaW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShza2IsIHBpbiwgY2ItXFx1MDAzZWV4dGFjayk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzowMS41Mjg0MDY0NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY3ODI4ODEwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4NzYyYWM0NzMxMzBmNDkyYzY2NWExMmI0MGU4MmJiY2ZmZmVlMGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNjoyNjo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xuaW5kZXggNDNkNTFkOTQyZWFkZC4uYTMyMGVlYjgyOWFkMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xuKysrIGIvZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXG5AQCAtODc2LDE5ICs4NzYsMjUgQEAgaW50XG4gZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZGV2X29wcztcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoV0FSTl9PTighb3BzKSB8fFxuIFx0ICAgIFdBUk5fT04oIW9wcy1cdTAwM2VzdGF0ZV9vbl9kcGxsX2dldCkgfHxcbiBcdCAgICBXQVJOX09OKCFvcHMtXHUwMDNlZGlyZWN0aW9uX2dldCkgfHxcbi1cdCAgICBXQVJOX09OKG9wcy1cdTAwM2VtZWFzdXJlZF9mcmVxX2dldCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICghZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLVx1MDAzZWZyZXFfbW9uaXRvcl9nZXQgfHxcbi1cdFx0ICAgICAhZHBsbF9kZXZpY2Vfb3BzKGRwbGwpLVx1MDAzZWZyZXFfbW9uaXRvcl9zZXQpKSB8fFxuIFx0ICAgIFdBUk5fT04ob3BzLVx1MDAzZXN1cHBvcnRlZF9mZm8gXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZmZvX2dldCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkcGxsX2xvY2spO1xuIFxuK1x0ZGV2X29wcyA9IGRwbGxfZGV2aWNlX29wcyhkcGxsKTtcbitcdGlmIChXQVJOX09OKG9wcy1cdTAwM2VtZWFzdXJlZF9mcmVxX2dldCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghZGV2X29wcyB8fCAhZGV2X29wcy1cdTAwM2VmcmVxX21vbml0b3JfZ2V0IHx8XG4rXHRcdCAgICAgIWRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX3NldCkpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBGb3IgcGlucyBpZGVudGlmaWVkIHZpYSBmaXJtd2FyZSAocGluLVx1MDAzZWZ3bm9kZSksIGFsbG93IHJlZ2lzdHJhdGlvblxuIFx0ICogZXZlbiBpZiB0aGUgcGluJ3MgKG1vZHVsZSwgY2xvY2tfaWQpIGRpZmZlcnMgZnJvbSB0aGUgdGFyZ2V0IERQTEwuXG5AQCAtMTA4MSwxMiArMTA4Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfcGluX3JlZl9zeW5jX3BhaXJfYWRkKTtcbiBzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqXG4gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbiB7XG4tXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4tXG4tXHRyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoKHN0cnVjdCBsaXN0X2hlYWQgKilcdTAwMjZkcGxsLVx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpO1xuLVx0V0FSTl9PTighcmVnKTtcbi1cdHJldHVybiByZWc7XG4rXHRyZXR1cm4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKChzdHJ1Y3QgbGlzdF9oZWFkICopXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcbitcdFx0XHRcdFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiwgbGlzdCk7XG4gfVxuIFxuIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG5AQCAtMTA5NCw2ICsxMDk2LDggQEAgdm9pZCAqZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbiBcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbiBcbiBcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcbitcdGlmICghcmVnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdHJldHVybiByZWctXHUwMDNlcHJpdjtcbiB9XG4gXG5AQCAtMTEwMiw2ICsxMTA2LDggQEAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqZHBsbF9kZXZpY2Vfb3BzKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcbiBcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcbiBcbiBcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcbitcdGlmICghcmVnKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdHJldHVybiByZWctXHUwMDNlb3BzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbmluZGV4IGFmYjMxYzAwNDAzODIuLjllNTU3NDVlMzNlNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xuQEAgLTY2LDYgKzY2LDIyIEBAIHN0YXRpYyBib29sIGRwbGxfcGluX2F2YWlsYWJsZShzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4re1xuK1x0cmV0dXJuIGRwbGxfZGV2aWNlX29wcyhkcGxsKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9yZWYgKmRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHN0cnVjdCBkcGxsX3BpbiAqcGluKVxuK3tcbitcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZilcbitcdFx0aWYgKGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdHJldHVybiByZWY7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gLyoqXG4gICogZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUgLSBhdHRhY2ggcGluIGhhbmRsZSBhdHRyaWJ1dGUgdG8gYSBnaXZlbiBtZXNzYWdlXG4gICogQG1zZzogcG9pbnRlciB0byBza19idWZmIG1lc3NhZ2UgdG8gYXR0YWNoIGEgcGluIGhhbmRsZVxuQEAgLTY1Niw2ICs2NzIsOCBAQCBkcGxsX21zZ19hZGRfcGluX2RwbGxzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0aW50IHJldDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGluZGV4LCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFKTtcbiBcdFx0aWYgKCFhdHRyKVxuIFx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5AQCAtNzAwLDkgKzcxOCwxMCBAQCBkcGxsX2NtZF9waW5fZ2V0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGludCByZXQ7XG4gXG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbitcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0cmVmID0gZHBsbF9waW5fZmlyc3RfcmVnaXN0ZXJlZF9yZWYocGluKTtcbiBcdGlmICghcmVmKVxuLVx0XHRyZWYgPSBkcGxsX3hhX3JlZl9kcGxsX2ZpcnN0KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuLVx0QVNTRVJUX05PVF9OVUxMKHJlZik7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cmV0ID0gZHBsbF9tc2dfYWRkX3Bpbl9oYW5kbGUobXNnLCBwaW4pO1xuIFx0aWYgKHJldClcbkBAIC0xMDkxLDYgKzExMTAsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdH1cbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQgfHwgIW9wcy1cdTAwM2VmcmVxdWVuY3lfZ2V0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuQEAgLTExMDEsNyArMTEyMiw3IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHR9XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTExNyw2ICsxMTM4LDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTExMzgsNiArMTE2MSw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMTYzLDYgKzExODgsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpbnQgcmV0O1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoKCFvcHMtXHUwMDNlZXN5bmNfc2V0IHx8ICFvcHMtXHUwMDNlZXN5bmNfZ2V0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuQEAgLTExNzMsNyArMTIwMCw3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuK1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTExOTksNiArMTIyNiw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuIFxuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyMjQsNiArMTI1Myw4IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcbiBcdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI2Miw3ICsxMjkzLDcgQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbitcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCIpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xMjgzLDYgKzEzMTQsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRpZiAoc3RhdGUgPT0gb2xkX3N0YXRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlcmVmX3N5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEzMDcsNiArMTM0MCw4IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHRpZiAocmVmID09IGZhaWxlZClcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNTAwLDYgKzE1MzUsOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdH1cbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuQEAgLTE1MDksNyArMTU0Niw3IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0XHR9XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTUyNiw2ICsxNTYzLDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE1NTAsNiArMTU4OSw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNTgxLDcgKzE2MjIsNyBAQCBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGFyZW50X25lc3QsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cGRwbGxfaWR4ID0gbmxhX2dldF91MzIodGJbRFBMTF9BX1BJTl9QQVJFTlRfSURdKTtcbi1cdGRwbGwgPSB4YV9sb2FkKFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBwZHBsbF9pZHgpO1xuK1x0ZHBsbCA9IGRwbGxfZGV2aWNlX2dldF9ieV9pZChwZHBsbF9pZHgpO1xuIFx0aWYgKCFkcGxsKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwYXJlbnQgZGV2aWNlIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTg3Myw2ICsxOTE0LDEwIEBAIGludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUoc2tiLCBwaW4sIGNiLVx1MDAzZWV4dGFjayk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XG4rXHRcdFx0aWYgKHJldCA9PSAtRU5PREVWKSB7XG4rXHRcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjAxLjUyODQwNzc2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjMyMDc3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRFBMTCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY2AgYW5kIGBkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgYXR0ZW50aW9uLlxuXG5JIHNlZSB0aGF0IHRoZSBwYXRjaCBpcyBhZGRpbmcgY2hlY2tzIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbClgLCBkZWZpbmVkIGFzIG5vbi1OVUxMIGBkcGxsX2RldmljZV9vcHMoZHBsbClgLiBJdCBhbHNvIGFsdGVycyBgZHBsbF9kZXZpY2Vfb3BzYCBhbmQgYGRwbGxfcHJpdmAgdG8gcmV0dXJuIGBOVUxMYCBpZiBhIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiByZXR1cm5zIGBOVUxMYC4gRnVydGhlciwgYGRwbGxfY29yZS5jYCBub3cgdmFsaWRhdGVzIGBkZXZfb3BzYCBiZWZvcmUgaXQgaXMgdXNlZC4gQW5kIHRoZW4gaW4gYGRwbGxfbmV0bGluay5jYCwgaXQgc2VlbXMgdG8gYmUgc2tpcHBpbmcgdW5yZWdpc3RlcmVkIERQTEwgZGV2aWNlcyBpbiBhIGZldyBwbGFjZXMgbGlrZSB0aG9zZSBgc2V0YCBmdW5jdGlvbnMuIEJhc2ljYWxseSwgaXQgc2VlbXMgdG8gYmUgZ3VhcmRpbmcgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBkb25lLCBpZiB0aGUgRFBMTCBkZXZpY2UgaXNuJ3QgcHJvcGVybHkgcmVnaXN0ZXJlZC5cblxuU28sIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIHZpYSBuZXRsaW5rPyBZZXMsIGBkcGxsX25ldGxpbmsuY2AgaXMgYSBuZXRsaW5rIGZhbWlseS4gVGhhdCdzIGdvb2Q7IG5ldGxpbmsgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBTeXprYWxsZXIsIGluIHBhcnRpY3VsYXIsIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGF0LiBOZXh0LCBsZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL2RwbGwvS2NvbmZpZ2AgZm9yIHRoZSBEUExMIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjA4LjA5MTYxOTI0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4MjQ3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERQTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL0tjb25maWc9Nj1tZW51IFxcXCJEUExMIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTctXFxuZHJpdmVycy9kcGxsL0tjb25maWc6ODpjb25maWcgRFBMTFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTktXFx0Ym9vbFxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTEwLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjExOmNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuZHJpdmVycy9kcGxsL0tjb25maWctMTItXFx0Ym9vbCBcXFwiRFBMTCByZWZlcmVuY2UgY291bnQgdHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjA4LjIwNTQ0ODYyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTg5ODk3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBGbGFnKipcblxuUmlnaHQsIGEgYGNvbmZpZyBEUExMYCBzZXR0aW5nIGp1c3QgYXBwZWFyZWQgaW4gdGhlIGNvZGUsIGFuZCBpdCdzIGEgc3RyYWlnaHQtdXAgYm9vbGVhbiB3aXRob3V0IGFueSBhY2NvbXBhbnlpbmcgcHJvbXB0IG9yIGRlZmF1bHQgdmFsdWUuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBEUExMIGRyaXZlci4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGRlZmluZWQgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGNvbnRleHQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gKndoeSogaXQncyBjb25maWd1cmVkIHRoZSB3YXkgaXQgaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGdlbmVyYWxseSwgaG93IHRoaXMgYGNvbmZpZyBEUExMYCBmbGFnIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZS4gS25vd2luZyB0aGF0IHRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCwgaXMgZ29pbmcgdG8gYmUgaGVscGZ1bC4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjExLjgwNDQ0MTk1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEdlbmVyaWMgRFBMTCBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiRFBMTCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERQTExcXG4gICA5OlxcdFxcdGJvb2xcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcXG4gIDEyOlxcdFxcdGJvb2wgXFxcIkRQTEwgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nXFxcIlxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IERQTExcXG4gIDE0OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBFbmFibGUgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nIGZvciBEUExMIGRldmljZXMgYW5kIHBpbnMuXFxuICAxNzpcXHRcXHQgIFRoaXMgaGVscHMgZGVidWdnaW5nIHJlZmVyZW5jZSBsZWFrcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnc1xcbiAgMTg6XFx0XFx0ICBieSByZWNvcmRpbmcgc3RhY2sgdHJhY2VzIGZvciBlYWNoIGdldC9wdXQgb3BlcmF0aW9uLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoxMS44MDQ1MDA0MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyOTgzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRQTEwgRHJpdmVyIFNlbGVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBEUExMIChEYXZpc+KAk1B1dG5hbeKAk0xvZ2VtYW5u4oCTTG92ZWxhbmQpIGFsZ29yaXRobSBoYXMgYmVlbiBjaG9zZW4gYnkgc29tZSBvdGhlciBkcml2ZXIgaW4gdGhlIHN5c3RlbS4gVGhhdCdzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmUsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFdoYXQncyB0aGUgdHJpZ2dlcmluZyBmYWN0b3IgaGVyZT8gSXMgaXQgYSBzcGVjaWZpYyBwcm9ibGVtIHR5cGUsIGEgc2l6ZSB0aHJlc2hvbGQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHRoYXQncyBkaWN0YXRpbmcgdGhpcyBzZWxlY3Rpb24/IEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBleGVjdXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBkZWNpc2lvbiBhbmQgdGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgRFBMTCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aG8ncyBjYWxsaW5nIHRoZSBzaG90cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTMwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoxNS4xMzc0ODcwMjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTQ5NzE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRFBMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTUtXFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgUExETUZXXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDY6XFx0c2VsZWN0IERQTExcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMDM9Y29uZmlnIE1MWDVfRFBMTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA1LVxcdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcXHUwMDI2XFx1MDAyNiBFVEhFUk5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjA2OlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjA3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MjEwPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjE5LVxcdHNlbGVjdCBDUkMxNlxcbmRyaXZlcnMvcHRwL0tjb25maWc6MjIwOlxcdHNlbGVjdCBEUExMXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMjEtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoxNy41MDI5ODkyNzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIwOTA1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWkwzMDczWCBEUExMIERyaXZlcioqXG5cbk9rYXksIHNvIEkgc2VlIGBaTDMwNzNYYCBtZW50aW9uZWQsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoYXQgaXQncyBhY3RpbmcgYXMgYSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgcGxhY2Ugd2hlcmUgdGhlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gYW5kLCBieSBleHRlbnNpb24sIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGludGVuZGVkIHVzZSwgc2hvdWxkIGJlIGNsZWFybHkgZG9jdW1lbnRlZC4gSSBleHBlY3QgdG8gZmluZCBjb25maXJtYXRpb24gdGhlcmUgYWJvdXQgaXRzIERQTEwgbmF0dXJlIGFuZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHNwZWNpZmljIHRvIHRoYXQgcGFydGljdWxhciBkZXZpY2UuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYW5kIGNvbmZpcm0hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoyMC43MjM4OTcxMTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgWkwzMDczWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBEUExMXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gICA4OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXFxuICAxMTpcXHRcXHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcXG4gIDEyOlxcdFxcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWkwzMDczWF9JMkNcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAyMDpcXHRcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoyMC43MjM5NjA3NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyODU4NzYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLY29uZmlnIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBaTDMwNzNYYCBvcHRpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBjb25kaXRpb25hbCwgb25seSBzaG93aW5nIHVwIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQuIEJ1dCB3YWl0LCBpcyBpdCBqdXN0IGEgcGxhaW4gYHNlbGVjdGAgc3RhdGVtZW50IG9yIGEgYHRyaXN0YXRlYD8gQWgsIGl0IGxvb2tzIGxpa2UgYSBgdHJpc3RhdGUgXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXCIgaWYgQ09NUElMRV9URVNUYC4gU28sIHRoYXQgbWVhbnMgdGhpcyBlbnRpcmUgc2VjdGlvbiAqb25seSogYmVjb21lcyB2aXNpYmxlIGluIHRoZSBtZW51IGlmIGBDT01QSUxFX1RFU1RgIGlzIHRydWUuIElmIG5vdCwgaXQncyBoaWRkZW4gZnJvbSB2aWV3LiBXaGljaCBhbHNvIG1lYW5zIGl0J3Mgc2VsZWN0YWJsZSBhcyBcInlcIiwgXCJtXCIgb3IgXCJuXCIgaWYgdGhlIHZpc2liaWxpdHkgaXMgdHJ1ZS5cblxuQnV0IGhvbGQgb24sIHRoYXQgZG9lc24ndCB1c3VhbGx5IGxvb2sgbGlrZSBteSBvdGhlciBLY29uZmlnIG9wdGlvbnMuIFR5cGljYWxseSwgSSdkIHNlZSBzb21ldGhpbmcgbGlrZSBgZGVwZW5kcyBvbiBJMkNgIG9yIHNpbWlsYXIgdG8gZ2F0ZSB0aGUgb3B0aW9uIGJhc2VkIG9uIHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHR5cGljYWwgcGF0dGVybiB1c2VkIGluIHRoZSBQVFAgZHJpdmVyLCBzbyBsZXQgbWUgcXVpY2tseSBuYXZpZ2F0ZSB0byBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBoYW5kbGluZyBvZiBzb21ldGhpbmcgbGlrZSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gSnVzdCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6MjUuMTUyNTUxNDMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcXFwiXFxuIDIxMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXFxuIDIxMzpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE1URFxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfODI1MFxcbiAyMTY6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAyMTc6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDIxODpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gMjE5OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAyMjA6XFx0XFx0c2VsZWN0IERQTExcXG4gMjIxOlxcdFxcdGhlbHBcXG4gMjIyOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBhbiBPcGVuQ29tcHV0ZSB0aW1lIGNhcmQuXFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdCAgVGhlIE9wZW5Db21wdXRlIHRpbWUgY2FyZCBpcyBhbiBhdG9taWMgY2xvY2sgYWxvbmcgd2l0aFxcbiAyMjU6XFx0XFx0ICBhIEdQUyByZWNlaXZlciB0aGF0IHByb3ZpZGVzIGEgR3JhbmRtYXN0ZXIgY2xvY2sgc291cmNlXFxuIDIyNjpcXHRcXHQgIGZvciBhIFBUUCBlbmFibGVkIG5ldHdvcmsuXFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy50aW1pbmdjYXJkLmNvbS9cXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzoyNS4xNTI2NDkxOTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4NzQ1MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEUExMIERyaXZlciBTZWxlY3Rpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGFsbCB0aGUgcG9zc2libGUgcGF0aHMgdG8gc2VsZWN0IGEgRFBMTCBkcml2ZXIuIExldCBtZSBzZWUuLi4gSSd2ZSBnb3QgdGhlc2UgZHJpdmVycyBpZGVudGlmaWVkOiBgSUNFYCwgYE1MWDVfRFBMTGAsIGBQVFBfMTU4OF9DTE9DS19PQ1BgLCBhbmQgYFpMMzA3M1hgLiBSaWdodCwgdGhlIGZpcnN0IHR3bywgYElDRWAgYW5kIGBNTFg1X0RQTExgLCBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkhvbGQgb24sIEkgc2VlIHRoYXQgZW5hYmxpbmcgYFBUUF8xNTg4X0NMT0NLX09DUGAgKmFsc28qIGVuYWJsZXMgYERQTExgISBJbnRlcmVzdGluZy4gQ2FuIEkgZ2V0IGF3YXkgd2l0aCBqdXN0IGRpcmVjdGx5IGVuYWJsaW5nIGBEUExMYD8gTm9wZSwgaXQgbG9va3MgbGlrZSBgRFBMTGAgaXMganVzdCBhIGJvb2xlYW4sIG5vIGNvbmZpZyBvcHRpb24sIHNvIG5vIGRpcmVjdCBzZWxlY3Rpb24uXG5cbk9rYXksIGxldCdzIGV4cGxvcmUgYFBUUF8xNTg4X0NMT0NLX09DUGAgdGhlbi4gSG1tLCB0aGF0IG9uZSBoYXMgYSB3aG9sZSBzbGV3IG9mIGRlcGVuZGVuY2llczogYFBDSWAsIGBJMkNgLCBgTVREYCwgYFNFUklBTF84MjUwYCwgYW5kIGBDT01NT05fQ0xLYC5cblxuTm93LCB3aGF0IGFib3V0IGBaTDMwNzNYYD8gSXQgcmVxdWlyZXMgYE5FVGAuIEJ1dCB3YWl0IGEgc2Vjb25kLCB0aGVyZSdzIHRoYXQgYHRyaXN0YXRlYCBkZWNsYXJhdGlvbiB3aXRoIGFuIGBpZiBDT01QSUxFX1RFU1RgLiBUaGF0J3Mgd2VpcmQuIERvZXMgdGhhdCBtZWFuIGl0J3Mgb25seSBzZWxlY3RhYmxlIGlmIEkndmUgZW5hYmxlZCBgQ09NUElMRV9URVNUYD8gTm8sIG5vLCBgaWYgQ09NUElMRV9URVNUYCBqdXN0IG1lYW5zIHRoZSAqcHJvbXB0KiBpcyB2aXNpYmxlIG9ubHkgd2hlbiBgQ09NUElMRV9URVNUYCBpcyB0cnVlLiBJZiBgQ09NUElMRV9URVNUYCBpcyBmYWxzZSwgaXQncyBub3QgdmlzaWJsZSwgYnV0IGl0IHdvbid0IGJlIHNlbGVjdGFibGUgKmFueXdheSouIEJ1dCB3aHkgd291bGRuJ3QgaXQgdXNlIHNvbWV0aGluZyBsaWtlIGBkZXBlbmRzIG9uIENPTVBJTEVfVEVTVCB8fCAuLi5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjMyLjI0MDEwNDU4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgWkwzMDczWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBEUExMXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gICA4OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWljcm9jaGlwIEF6dXJpdGUgZmFtaWx5IERQTEwvUFRQL1N5bmNFXFxuICAxMTpcXHRcXHQgIGRldmljZXMgdGhhdCBzdXBwb3J0IHVwIHRvIDUgaW5kZXBlbmRlbnQgRFBMTCBjaGFubmVscyxcXG4gIDEyOlxcdFxcdCAgMTAgaW5wdXQgcGlucyBhbmQgdXAgdG8gMjAgb3V0cHV0IHBpbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMTU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB6bDMwNzN4LlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgWkwzMDczWF9JMkNcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAyMDpcXHRcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiAgMjE6XFx0XFx0c2VsZWN0IFpMMzA3M1hcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgVGhpcyBpcyBJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRVxcbiAgMjQ6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMjc6XFx0XFx0ICBiZSBjYWxsZWQgemwzMDczeF9pMmMuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaTDMwNzNYX1NQSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjMyLjI0MDIxMDgwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc4NDgxMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgRFBMTCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBaTDMwNzNYX0kyQ2AuIEl0ICpzZWxlY3RzKiBgWkwzMDczWGAsIHdoaWNoLCBpbiB0dXJuLCBzZWxlY3RzIHRoZSBgRFBMTGAgZmVhdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgY2FzY2FkaW5nIGRvd24gdGhlIGxpbmUuIEkgc2VlIHRoYXQgYFpMMzA3M1hfSTJDYCByZWxpZXMgb24gYm90aCBgSTJDYCBhbmQgYE5FVGAgYmVpbmcgZW5hYmxlZC4gU28sIHRoZSBvYnZpb3VzIGFwcHJvYWNoIGlzIHRvIHNpbXBseSBlbmFibGUgYFpMMzA3M1hfSTJDYCwgd2hpY2ggc2hvdWxkIGdpdmUgdXMgdGhlIGBEUExMYCBmdW5jdGlvbmFsaXR5IHdlJ3JlIGFmdGVyLlxuXG5CdXQsIGEgY3JpdGljYWwgcXVlc3Rpb24gYXJpc2VzOiBjYW4gd2UgYWN0dWFsbHkgKnVzZSogdGhlIGBEUExMYCBmcm9tIHVzZXJzcGFjZT8gV2UgbmVlZCB0aGF0IGxldmVsIG9mIGFjY2VzcyB0byBiZSB1c2VmdWwuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IG5ldGxpbmssIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBBaCwgeWVzISBgZHBsbF9uZXRsaW5rLmNgIGlzIHJpbmdpbmcgYSBiZWxsIC0gdGhhdCBzdWdnZXN0cyBpdCByZWdpc3RlcnMgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LiBUaGF0J3MgcHJlY2lzZWx5IHdoYXQgd2UgbmVlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgdGhlIHBhdGggb2YgaW50ZXJhY3Rpb24gdG8gdXNlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjM2LjkxODY5Mzg3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTEyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmxfcmVnaXN0ZXJfZmFtaWx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTExODY9c3RhdGljIGludCBfX2luaXQgZHBsbF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTE4OS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE5MDpcXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2ZHBsbF9ubF9mYW1pbHkpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTkxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjM3LjAyMDYxMDMyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcxMzY0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gRFBMTCBLZXJuZWwgTW9kdWxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGRwbGxfaW5pdGAsIHJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24uIEl0J3MgdGhlIG9uZSB0aGF0IGhhbmRsZXMgcmVnaXN0ZXJpbmcgdGhlIG5ldGxpbmsgZmFtaWx5LCB5ZXMsIHRoYXQgc291bmRzIHJpZ2h0LiBHb29kLiBBbmQgc2luY2UgYERQTExgIGl0c2VsZiBpcyBqdXN0IGEgYm9vbGVhbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdHMgcHJlc2VuY2UgaW4gdGhlIGtlcm5lbCBjb21lcyBkb3duIHRvIHdoZXRoZXIgb3Igbm90IGl0J3Mgc2VsZWN0ZWQgZHVyaW5nIGNvbXBpbGF0aW9uIOKAkyBhIGNsYXNzaWMgY29uZmlndXJhdGlvbiBmbGFnLiBIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYGRwbGxfaW5pdGAgcmluZ3MgYSBiZWxsIGFzIGFuIGBpbml0Y2FsbGAuIFJpZ2h0LCBvZiBjb3Vyc2UsIGl0IG1ha2VzIHNlbnNlIGl0IHdvdWxkIGJlLiBUaGF0IHdvdWxkIGJlIGhvdyBpdCdzIGJyb3VnaHQgaW50byBhY3Rpb24uIE9rYXksIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXQgbWlnaHQgYmUgd29ydGggYSBxdWljayBsb29rIGF0IHRoZSBgZHJpdmVycy9kcGxsL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGF0IHNob3VsZCBoYXZlIGFsbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzo0MS4wOTE5Nzg1NjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIERQTEwgZHJpdmVycy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RQTEwpICAgICAgKz0gZHBsbC5vXFxuICAgNzpcXHRkcGxsLXkgICAgICAgICAgICAgICAgICArPSBkcGxsX2NvcmUub1xcbiAgIDg6XFx0ZHBsbC15ICAgICAgICAgICAgICAgICAgKz0gZHBsbF9uZXRsaW5rLm9cXG4gICA5OlxcdGRwbGwteSAgICAgICAgICAgICAgICAgICs9IGRwbGxfbmwub1xcbiAgMTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjQxLjA5MjEyNTU4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjIwMTI2NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIERQTEwgTmV0bGluayBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0RQTExgIGVuYWJsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBkcGxsX2NvcmUub2AgYW5kIGBkcGxsX25ldGxpbmsub2AuIFRoaXMgcGF0Y2ggdG91Y2hlcyBib3RoIG9mIHRob3NlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBkcGxsX2NvcmUuY2AgYW5kIGBkcGxsX25ldGxpbmsuY2AuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBjbHVzdGVyZWQgYXJvdW5kIGBkcGxsX3Bpbl9yZWdpc3RlcmAsIGBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3RgLCBgZHBsbF9wcml2YCwgYGRwbGxfZGV2aWNlX29wc2AsIGFuZCB2YXJpb3VzIG5ldGxpbmsgY2FsbGJhY2tzIHdpdGhpbiBgZHBsbF9uZXRsaW5rLmNgLlxuXG5BaGEsIHRob3NlIG5ldGxpbmsgY2FsbGJhY2tzIGFyZSBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoaXMsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGFuIGlzc3VlIHdoZXJlIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMgd2VyZSBiZWluZyBhY2Nlc3NlZCwgYnkgYWRkaW5nIGEgY2hlY2sgdG8gc2tpcCB0aGVtIChpLmUuLCB3aGVuIGBkcGxsX2RldmljZV9vcHMoZHBsbCkgPT0gTlVMTGApLiBUaGF0IHNvdW5kcyBsaWtlIGEgYnVnIGZpeCwgYW5kIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4gSXQncyBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgaXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYGRwbGxfY21kX3Bpbl9nZXRfb25lYCwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgLCBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGAsIGBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldGAsIGFuZCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gY3JhZnRpbmcgZnV6emluZyBoYXJuZXNzZXMsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0byBlbnN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQncyBzZWUuLi4gYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBpcyB1cCBmaXJzdC4uLiBhbmQgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc291cmNlIGZpbGUgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjg0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6NDcuNzEyMjU0ODM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzMzQyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9jbWRfcGluX2dldF9vbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz03MTI9c3RhdGljIGludFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo3MTM6ZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTcxNC1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz05MTA9ZHBsbF9waW5fZXZlbnRfc2VuZChlbnVtIGRwbGxfY21kIGV2ZW50LCBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy05MjUtXFx0XFx0Z290byBlcnJfZnJlZV9tc2c7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjkyNjpcXHRyZXQgPSBkcGxsX2NtZF9waW5fZ2V0X29uZShtc2csIHBpbiwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTkyNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE4NjU9aW50IGRwbGxfbmxfcGluX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTg4Mi1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE4ODM6XFx0cmV0ID0gZHBsbF9jbWRfcGluX2dldF9vbmUobXNnLCBwaW4sIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE4ODQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE4OTM9aW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MTMtXFx0XFx0fVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTE0OlxcdFxcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKHNrYiwgcGluLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkxNS1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjQ3LjgyNDU5MzcyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM4Mjg1NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIERQTEwgUGluIEFjY2VzcyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBEUExMIHBpbiBhY2Nlc3MgZnVuY3Rpb25zLiBJIHNlZSBgZHBsbF9jbWRfcGluX2dldF9vbmVgIGFuZCBpbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nLCBcIldhaXQgYSBtaW51dGUsIHRoYXQncyBzdGF0aWMsIGlzbid0IGl0P1wiIEFuZCB0aGF0J3MgdXN1YWxseSBhIHJlZCBmbGFnIGZvciBtZS4gV2UgZ2VuZXJhbGx5IHdhbnQgdG8gdXRpbGl6ZSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIGJldHRlciBmbGV4aWJpbGl0eSBhbmQgcmV1c2FiaWxpdHksIGZvciBlYXNpZXIgaW50ZWdyYXRpb24gaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBTbywgSSdtIGdvaW5nIHRvIHN0ZWVyIGNsZWFyIG9mIHRoYXQgb25lIGlmIGF0IGFsbCBwb3NzaWJsZS5cblxuTm93LCBsZXQgbWUgY29tcGFyZSB0aGF0IHRvIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAgYW5kIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YC4gVGhvc2UgYXJlICpub24qLXN0YXRpYy4gVGhhdCdzIGEgZ29vZCBzdGFydC4gVGhvc2UgYXJlIHRoZSBvbmVzIEknbGwgYmUgbGVhbmluZyB0b3dhcmRzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aG9zZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBjYWxscy5cblxuVG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgSSBzaG91bGQgYWxzbyBjaGVjayBob3cgdGhlIGZyZXF1ZW5jeSBpcyBzZXQuIExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgZHBsbF9waW5fZnJlcV9zZXRgIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgdGhhdCBvbmUgcGxheXMgbmljZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjUyLjE2Mjg4NTUwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NTczOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9waW5fZnJlcV9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMDk2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTA5NzpkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA5OC1cXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNjg0PWRwbGxfcGluX3NldF9mcm9tX25sYXR0cihzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNjkyLVxcdFxcdGNhc2UgRFBMTF9BX1BJTl9GUkVRVUVOQ1k6XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE2OTM6XFx0XFx0XFx0cmV0ID0gZHBsbF9waW5fZnJlcV9zZXQocGluLCBhLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNjk0LVxcdFxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI3OjUyLjIzMTM0Nzk1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzExMjAxMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipTdGF0aWMgRnVuY3Rpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIGBkcGxsX3Bpbl9mcmVxX3NldGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUuIE5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGNhbGxlZCB3aXRoaW4gYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAuIFNpbmNlIGBkcGxsX3Bpbl9mcmVxX3NldGAgaXMgc3RhdGljLCBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0cyBjYWxsaW5nIGZ1bmN0aW9uLCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRpYyBkZXNpZ25hdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGZpdCBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJdCBkaWN0YXRlcyBob3cgYW5kIHdoZXJlIHRoZXkgYXJlIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBkZWNsYXJhdGlvbi4uLiBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjc6NTUuOTQyNTUyMjM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU2MTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNjgzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTY4NDpkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHIoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE2ODUte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE5MzQ9aW50IGRwbGxfbmxfcGluX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkzNy1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTkzODpcXHRyZXR1cm4gZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyKHBpbiwgaW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MzktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyNzo1Ni4wMjYxMjQxNjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NzkwMDE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIERQTEwgTW9kdWxlIFRob3VnaHRzKipcblxuT2theSwgc28gYGRwbGxfbmxfcGluX3NldF9kb2l0YCBpcyB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBwaW4tc2V0dGluZyBwcm9jZXNzLiBUaGF0J3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNvbmZpZ3VyYXRpb25zIGFyZSBtYWRlLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoZSBmbG93LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBmZXcgZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcGluIHNldHRpbmdzOiBgZHBsbF9waW5fZXN5bmNfc2V0YCwgYGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCwgYW5kIGBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldGAuIE15IGh1bmNoIGlzIHRoYXQgdGhleSdyZSBhbGwgY2FsbGVkIGZyb20gd2l0aGluIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoYXQgYG5sYXR0cmAgaXMgdGhlIE5ldGxpbmsgYXR0cmlidXRlIGRhdGEgc3RydWN0dXJlLiBJdCdzIGxpa2VseSBob3cgdGhlIGRyaXZlciBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gc2V0IHVwIHRob3NlIHBpbnMgZnJvbSB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG5cbkFuZCwgb2YgY291cnNlLCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IGBkcGxsX3Bpbl9yZWdpc3RlcmAuIEl0IHdvdWxkIGNvbnRhaW4gYWxsIHRoZSBkYXRhIHJlZ2FyZGluZyBhdmFpbGFibGUgcGlucywgdGhlaXIgcG9zc2libGUgc2V0dGluZ3MsIGFuZCB0aGVpciBwYXJlbnQgZGV2aWNlcy4gSXQgd291bGQgYmUgbXkgZmlyc3Qgc3RvcCBmb3IgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUgYXZhaWxhYmxlIHBpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODc4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjAxLjMwNDAyNzM0MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTU0ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9ODQxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6ODQyOl9fZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtODQzLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSlcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NjMtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg2NDogKiBkcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIHBpbiBpbiB0aGUgc3Vic3lzdGVtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg2NS0gKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz04NzU9aW50XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg3NjpkcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy04NzctXFx0XFx0ICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTA5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MTA6XFx0cmV0ID0gX19kcGxsX3Bpbl9yZWdpc3RlcihkcGxsLCBwaW4sIG9wcywgcHJpdiwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxMS1vdXRfdW5sb2NrOlxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxNS19XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjkxNjpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWdpc3Rlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkxNy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz05ODU9aW50IGRwbGxfcGluX29uX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTAwNC1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGFyZW50LVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDA1OlxcdFxcdHJldCA9IF9fZHBsbF9waW5fcmVnaXN0ZXIocmVmLVxcdTAwM2VkcGxsLCBwaW4sIG9wcywgcHJpdiwgcGFyZW50KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTAwNi1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjAxLjQxNTE4Nzg2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTY2MTE0ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEUExMIFBpbiBSZWdpc3RyYXRpb24gYW5kIE5ldGxpbmsgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgZHJpdmVycywgbWFraW5nIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIHRodXMsIEkgc2hvdWxkIHplcm8gaW4gb24gdGhlIG5ldGxpbmsgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOlxuXG4qICAgYGRwbGxfbmxfcGluX2dldF9kb2l0YFxuKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YFxuKiAgIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGBcbiogICBgZHBsbF9waW5fcmVnaXN0ZXJgXG5cbkxldCBtZSBtYWtlIHN1cmUgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBuZXRsaW5rIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiBhZmZlY3RlZC4gQWgsIGluIGBkcGxsX25ldGxpbmsuY2AsIEkgc2VlIHRoYXQgYGRwbGxfbXNnX2FkZF9waW5fZHBsbHNgIGhhcyBiZWVuIG1vZGlmaWVkLiBSaWdodCwgdGhhdCdzIGNhbGxlZCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBpbnZva2VkIGJ5IGJvdGggYGRwbGxfbmxfcGluX2dldF9kb2l0YCBhbmQgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLiBJdCBsb29rcyBsaWtlIGBkcGxsX3Bpbl9ldmVudF9zZW5kYCBhbHNvIGNhbGxzIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAuIENvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llcywgbXkgaW5pdGlhbCBjaG9pY2VzIGZvciB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYWNjdXJhdGUuXG5cbldhaXQgYSBtb21lbnQuLi4gd2hhdCBhYm91dCBgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0YD8gSXMgdGhhdCByZWxldmFudD8gT2gsIGl0J3Mgc3RhdGljLiBQcm9iYWJseSBub3QgYSBmb2N1cy4gQW5kIHdoYXQgYWJvdXQgYGRwbGxfcHJpdmAgYW5kIGBkcGxsX2RldmljZV9vcHNgPyBUaG9zZSBhcmUgZXhwb3J0ZWQsIHNvIHRoZXkgbWlnaHQgcGxheSBhIHJvbGUgaW4gdGhlIHN5c3RlbS4gQnV0IHRoZSBtYWluIGludGVyYWN0aW9uIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdGhlIHBpbi1yZWxhdGVkIG9wZXJhdGlvbnMgd2l0aCBuZXRsaW5rLCB3aGljaCBtYWtlIGBkcGxsX25sX3Bpbl9nZXRfZG9pdGAsIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCwgYGRwbGxfbmxfcGluX3NldF9kb2l0YCwgYW5kIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdGhlIHByaW1hcnkgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NDgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MDcuOTgxMzA1ODU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODE0Njk1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGRwbGxfcHJpdlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MDguMDQ5NDY1NjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTM1NTI5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBkcGxsX3ByaXZgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGRwbGxfcHJpdmAuIFdlJ3JlIGxpa2VseSBhdCBhIHBvaW50IHdoZXJlIHdlIG5lZWQgdG8gZXhhbWluZSB0aGlzIHByaXZhdGUgZnVuY3Rpb24gb3IgbW9kdWxlLiBJJ20gYXNzdW1pbmcgd2UndmUgaXNvbGF0ZWQgYSBwcm9ibGVtIGFyZWEsIGFuZCBgZHBsbF9wcml2YCBpcyBhIGtleSBjb21wb25lbnQgd2l0aGluIGl0LiBJJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGVpdGhlciBjb25maXJtIGEgaHlwb3RoZXNpcyBhYm91dCBpdHMgcm9sZSwgb3IgdG8gaG9wZWZ1bGx5IHVuY292ZXIgc29tZSBmdXJ0aGVyIGluZm9ybWF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzg0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MTEuMDYzMDIyNjEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY1ODI4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGRwbGxfcHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjExLjEzMDY4NzA4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc2OTk2MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRQTEwgUHJpdmF0ZSBGdW5jdGlvbiBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBkcGxsX2NvcmUuY2AgZmlsZSBhZ2Fpbi4gVGltZSB0byBnZXQgZG93biBhbmQgZGlydHkgd2l0aCBgZHBsbF9wcml2YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIOKAkyBzcGVjaWZpY2FsbHksIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgcHJpdmF0ZSB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGluIHRoYXQgRFBMTCBjb3JlLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2UgaGVyZSByZWdhcmRpbmcgY2xhdXNlIHNlbGVjdGlvbiwgY29uZmxpY3QgYW5hbHlzaXMsIG9yIHBlcmhhcHMgZXZlbiB0aGUgbGl0ZXJhbCBhc3NpZ25tZW50IHN0cmF0ZWdpZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLiBJdCdzIHRpbWUgdG8gZmluZCB0aGUgZGV0YWlscyB0aGF0IGFyZSBoaWRkZW4gZnJvbSBjYXN1YWwgdmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODoxNC42MDc2ODU1NjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODA4NzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3ByaXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0xMDg4PWRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA5My1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTA5NDp2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDk1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0xMTE1PWRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maXJzdChzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTEyNC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTEyNTp2b2lkICpkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZHBsbF9waW4gKnBpbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MTQuNzE1Nzc4NTQ3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDM1MjEwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRFBMTF9QUklWIEFjY2VzcyAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgZHBsbF9wcml2YCBhbmQgaXQncyBmbGFnZ2VkIGFzIG5vdCBleHBvcnRlZC4gVGhhdCBzdHJpa2VzIG1lIGFzIG9kZCwgYW5kIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCdzIGludGVudGlvbmFsIG9yIGlmIHNvbWV0aGluZydzIGdvbmUgYXdyeS4gTXkgaW5zdGluY3QgaXMgdG8gcXVpY2tseSBjaGVjayB0aGUgZW5kIG9mIHRoZSBgZHBsbF9wcml2YCBkZWNsYXJhdGlvbi4gVGhpcyBzaG91bGQgaW1tZWRpYXRlbHkgdGVsbCBtZSBpZiBpdCdzIGdvdCB0aGUgdXN1YWwgZXh0ZXJuIFwiQ1wiIHZpc2liaWxpdHksIG9yIHBlcmhhcHMgdGhlcmUncyBhIHNwZWNpZmljIHJlYXNvbiBpdCdzIHNjb3BlZCB0aGF0IHRpZ2h0bHkuIEknbSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgd2h5IGl0J3MgYmVoYXZpbmcgdGhpcyB3YXkuIExldCdzIHNlZSB3aGF0IHRoZSBkZWZpbml0aW9uIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0ODIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODoxOS40NTkzMDQwMzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk0OlxcdHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuMTA5NTpcXHR7XFxuMTA5NjpcXHRcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuMTA5NzpcXHRcXG4xMDk4OlxcdFxcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChkcGxsKTtcXG4xMDk5OlxcdFxcdGlmICghcmVnKVxcbjExMDA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTEwMTpcXHRcXHRyZXR1cm4gcmVnLVxcdTAwM2Vwcml2O1xcbjExMDI6XFx0fVxcbjExMDM6XFx0XFxuMTEwNDpcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpkcGxsX2RldmljZV9vcHMoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxcbjExMDU6XFx0e1xcbjExMDY6XFx0XFx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XFxuMTEwOTpcXHRcXHRpZiAoIXJlZylcXG4xMTEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMTE6XFx0XFx0cmV0dXJuIHJlZy1cXHUwMDNlb3BzO1xcbjExMTI6XFx0fVxcbjExMTM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjE5LjQ1OTQ2MjIwOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQzMzg3MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyB0aGUgRXhwb3J0IG9mIERQTEwgQ29yZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgRFBMTCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGUgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGV5J3JlICpub3QqIGV4cG9ydGVkLCBhbmQgdGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IGNoZWNrLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gd2hlcmUgKmFyZSogdGhleSBkZWZpbmVkPyBIbW0sIGxldCBtZSBjaGVjayB0aGUgaGVhZGVyIGZpbGVzLiBBaCwgcmlnaHQsIGxvb2tzIGxpa2UgdGhleSdyZSBkZWNsYXJlZCB3aXRoaW4gYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaGAuIFRoYXQgY291bGQgY2hhbmdlIHRoaW5ncy4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgbGlua2FnZSB3b3JrcyBmcm9tIHRoYXQgaGVhZGVyLiBQZXJoYXBzIHRoZXJlJ3MgYSBtYWNybyBvciBpbmxpbmUgZGVmaW5pdGlvbiBpbiB0aGVyZSwgb3IgbWF5YmUgdGhlIGNvcmUgaXRzZWxmIGlzIG5vdCB0aGUgcHJvYmxlbSwgYnV0IGluc3RlYWQgYW4gaW1wb3J0IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MjUuNDAyODUxOTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDQzMDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3ByaXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU2OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTEwODg9ZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDkzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDk0OnZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwOTUte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTExMTU9ZHBsbF9waW5fcmVnaXN0cmF0aW9uX2ZpcnN0KHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTI0LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTI1OnZvaWQgKmRwbGxfcGluX29uX2RwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExMjYtXFx0XFx0XFx0ICAgIHN0cnVjdCBkcGxsX3BpbiAqcGluKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oPTgxPXN0cnVjdCBkcGxsX3Bpbl9yZWYge1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5oLTg5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaDo5MDp2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmg6OTE6dm9pZCAqZHBsbF9waW5fb25fZHBsbF9wcml2KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaC05Mi12b2lkICpkcGxsX3Bpbl9vbl9waW5fcHJpdihzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudCwgc3RydWN0IGRwbGxfcGluICpwaW4pO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTExNT1kcGxsX21zZ19hZGRfbW9kZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTIxLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjI6XFx0cmV0ID0gb3BzLVxcdTAwM2Vtb2RlX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFxcdTAwMjZtb2RlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMzI9ZHBsbF9tc2dfYWRkX21vZGVfc3VwcG9ydGVkKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDAtXFx0aWYgKG9wcy1cXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDE6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VzdXBwb3J0ZWRfbW9kZXNfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgbW9kZXMsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDgtXFx0XFx0ICovXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0OTpcXHRcXHRyZXQgPSBvcHMtXFx1MDAzZW1vZGVfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm1vZGUsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE2ND1kcGxsX21zZ19hZGRfcGhhc2Vfb2Zmc2V0X21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3MS1cXHRpZiAob3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9zZXQgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9nZXQpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTcyOlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTczLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c3RhdGUsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTg0PWRwbGxfbXNnX2FkZF9mcmVxX21vbml0b3Ioc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE5MS1cXHRpZiAob3BzLVxcdTAwM2VmcmVxX21vbml0b3Jfc2V0IFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlZnJlcV9tb25pdG9yX2dldCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTI6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VmcmVxX21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTkzLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c3RhdGUsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjA0PWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXRfYXZnX2ZhY3RvcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIxMi1cXHRpZiAob3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfYXZnX2ZhY3Rvcl9nZXQpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjEzOlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X2F2Z19mYWN0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZmFjdG9yLCBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTIyNT1kcGxsX21zZ19hZGRfbG9ja19zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIzMi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjMzOlxcdHJldCA9IG9wcy1cXHUwMDNlbG9ja19zdGF0dXNfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNnN0YXR1cyxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjM0LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZzdGF0dXNfZXJyb3IsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjQ5PWRwbGxfbXNnX2FkZF90ZW1wKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yNTctXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjI1ODpcXHRyZXQgPSBvcHMtXFx1MDAzZXRlbXBfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNnRlbXAsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTI1OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTI2OD1kcGxsX21zZ19hZGRfY2xvY2tfcXVhbGl0eV9sZXZlbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjc3LVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoyNzg6XFx0cmV0ID0gb3BzLVxcdTAwM2VjbG9ja19xdWFsaXR5X2xldmVsX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHFscywgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjc5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9Mjg5PWRwbGxfbXNnX2FkZF9waW5fcHJpbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yOTktXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMDpcXHRyZXQgPSBvcHMtXFx1MDAzZXByaW9fZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMwMTpcXHRcXHRcXHQgICAgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2cHJpbywgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzAyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MzExPWRwbGxfbXNnX2FkZF9waW5fb25fZHBsbF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zMjEtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMyMjpcXHRyZXQgPSBvcHMtXFx1MDAzZXN0YXRlX29uX2RwbGxfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjMyMzpcXHRcXHRcXHRcXHQgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNnN0YXRlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zMjQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0zMzM9ZHBsbF9tc2dfYWRkX3Bpbl9vcGVyc3RhdGUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ0LVxcdHJldCA9IG9wcy1cXHUwMDNlb3BlcnN0YXRlX29uX2RwbGxfZ2V0KHBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MzQ1OlxcdFxcdFxcdFxcdFxcdCAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM0NjpcXHRcXHRcXHRcXHRcXHQgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzQ3LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm9wZXJzdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0zNTc9ZHBsbF9tc2dfYWRkX3Bpbl9kaXJlY3Rpb24oc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzY1LVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzozNjY6XFx0cmV0ID0gb3BzLVxcdTAwM2VkaXJlY3Rpb25fZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM2NzpcXHRcXHRcXHRcXHQgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2ZGlyZWN0aW9uLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zNjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0zNzc9ZHBsbF9tc2dfYWRkX3Bpbl9waGFzZV9hZGp1c3Qoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMzg3LVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzozODg6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjM4OTpcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0zOTAtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwaGFzZV9hZGp1c3QsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NDAwPWRwbGxfbXNnX2FkZF9waGFzZV9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDEwLVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MTE6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQxMjpcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2cGhhc2Vfb2Zmc2V0LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MTMtXFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NDIzPXN0YXRpYyBpbnQgZHBsbF9tc2dfYWRkX2ZmbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00MzMtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQzNDpcXHRyZXQgPSBvcHMtXFx1MDAzZWZmb19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYocmVmLVxcdTAwM2VkcGxsLCBwaW4pLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0MzU6XFx0XFx0XFx0ICAgcmVmLVxcdTAwM2VkcGxsLCBkcGxsX3ByaXYocmVmLVxcdTAwM2VkcGxsKSwgXFx1MDAyNmZmbywgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDM2LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz00NDk9c3RhdGljIGludCBkcGxsX21zZ19hZGRfbWVhc3VyZWRfZnJlcShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00NjEtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2MjpcXHRyZXQgPSBkZXZfb3BzLVxcdTAwM2VmcmVxX21vbml0b3JfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDYzLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy00NjctXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2ODpcXHRyZXQgPSBvcHMtXFx1MDAzZW1lYXN1cmVkX2ZyZXFfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ2OTpcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2bWVhc3VyZWRfZnJlcSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDcwLVxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTQ4Mj1kcGxsX21zZ19hZGRfcGluX2ZyZXEoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDkyLVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo0OTM6XFx0cmV0ID0gb3BzLVxcdTAwM2VmcmVxdWVuY3lfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjQ5NDpcXHRcXHRcXHRcXHQgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2ZnJlcSwgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNDk1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NTIzPWRwbGxfbXNnX2FkZF9waW5fZXN5bmMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTMzLVxcdFxcdHJldHVybiAwO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1MzQ6XFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTM1OlxcdFxcdFxcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2ZXN5bmMsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTUzNi1cXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTU2OD1kcGxsX21zZ19hZGRfcGluX3JlZl9zeW5jKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTU4MC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6NTgxOlxcdHBpbl9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTU4Mi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zLCBpbmRleCwgcmVmX3N5bmNfcGluKSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTg0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo1ODU6XFx0XFx0cmVmX3N5bmNfcGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtNTg2LVxcdFxcdC8qIFBpbiBtYXkgaGF2ZSBiZWVuIHVucmVnaXN0ZXJlZCBmcm9tIHRoaXMgZHBsbCBhbHJlYWR5ICovXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9NjIzPWRwbGxfbXNnX2FkZF9waW5fcGFyZW50cyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy02MzgtXFx0XFx0cHBpbiA9IHJlZi1cXHUwMDNlcGluO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzo2Mzk6XFx0XFx0cGFyZW50X3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbF9yZWYtXFx1MDAzZWRwbGwsIHBwaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy02NDAtXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VzdGF0ZV9vbl9waW5fZ2V0KHBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz05OTA9ZHBsbF9tb2RlX3NldChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBubGF0dHIgKmEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAwMy1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTAwNDpcXHRyZXQgPSBvcHMtXFx1MDAzZW1vZGVfZ2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm9sZF9tb2RlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDA1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDEyLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDEzOlxcdHJldCA9IG9wcy1cXHUwMDNlc3VwcG9ydGVkX21vZGVzX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG1vZGVzLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDE0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDI0LVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDI1OlxcdHJldHVybiBvcHMtXFx1MDAzZW1vZGVfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgbW9kZSwgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAyNi19XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTAyOT1kcGxsX3BoYXNlX29mZnNldF9tb25pdG9yX3NldChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBubGF0dHIgKmEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTAzOS1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNDA6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9vZmZzZXRfbW9uaXRvcl9nZXQoZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2b2xkX3N0YXRlLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDQxLVxcdFxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNDgtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNDk6XFx0cmV0dXJuIG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X21vbml0b3Jfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgc3RhdGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNTAtXFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwNTQ9ZHBsbF9waGFzZV9vZmZzZXRfYXZnX2ZhY3Rvcl9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNjUtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNjY6XFx0cmV0dXJuIG9wcy1cXHUwMDNlcGhhc2Vfb2Zmc2V0X2F2Z19mYWN0b3Jfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZmFjdG9yLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA3MT1kcGxsX2ZyZXFfbW9uaXRvcl9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgbmxhdHRyICphLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwODItXFx0fVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMDgzOlxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcV9tb25pdG9yX2dldChkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFxcdTAwMjZvbGRfc3RhdGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwODQtXFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTA5Mi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTA5MzpcXHRyZXR1cm4gb3BzLVxcdTAwM2VmcmVxX21vbml0b3Jfc2V0KGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgc3RhdGUsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwOTQtfVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEwOTc9ZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMC1cXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMxOlxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTMyOlxcdFxcdFxcdFxcdCBkcGxsX3ByaXYoZHBsbCksIFxcdTAwMjZvbGRfZnJlcSwgZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTEzMy1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTE0Ni1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTQ3OlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMTQ4OlxcdFxcdFxcdFxcdFxcdCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNDktXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNjktXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTE3MDpcXHRcXHRpZiAob3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjExNzE6XFx0XFx0XFx0XFx0ICAgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX2ZyZXEsIGV4dGFjaykpXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTExNzItXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMTc4PWRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjA4LVxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMDk6XFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTIxMDpcXHRcXHRcXHQgICAgIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNmVzeW5jLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjI2LVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMjc6XFx0XFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTIyOC1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjM0LVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyMzU6XFx0XFx0cGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjM2OlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlZXN5bmNfc2V0KHBpbiwgcGluX2RwbGxfcHJpdiwgZHBsbCwgZHBsbF9wcml2KGRwbGwpLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjM3LVxcdFxcdFxcdFxcdCAgICAgIGZyZXEsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI1MS1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjUyOlxcdFxcdHZvaWQgKnBpbl9kcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTMtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI2MS1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMjYyOlxcdFxcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTI2MzpcXHRcXHRpZiAob3BzLVxcdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNjQtXFx0XFx0XFx0XFx0ICAgZXN5bmMuZnJlcSwgZXh0YWNrKSlcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMjcxPWRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzA1LVxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMDY6XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMwNy1cXHRcXHRcXHRcXHRyZWZfc3luY19waW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMDg6XFx0XFx0XFx0XFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzMDktXFx0XFx0XFx0XFx0XFx1MDAyNm9sZF9zdGF0ZSwgZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzIyLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMjM6XFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTMyNC1cXHRcXHRcXHRcXHRcXHRyZWZfc3luY19waW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzMjU6XFx0XFx0XFx0XFx0XFx0ZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzMjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVmX3N5bmNfcGluKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzQ4LVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEzNDk6XFx0XFx0aWYgKG9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEzNTAtXFx0XFx0XFx0XFx0ICAgICAgcmVmX3N5bmNfcGluLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxMzUxOlxcdFxcdFxcdFxcdCAgICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMzUyLVxcdFxcdFxcdFxcdCAgICAgIG9sZF9zdGF0ZSwgZXh0YWNrKSlcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xMzg0PWRwbGxfcGluX29uX3Bpbl9zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHUzMiBwYXJlbnRfaWR4LFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0MTQtXFx0XFx0cGluX3ByaXYgPSBkcGxsX3Bpbl9vbl9waW5fcHJpdihwYXJlbnQsIHBpbik7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0MTU6XFx0XFx0cGFyZW50X3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbF9yZWYtXFx1MDAzZWRwbGwsIHBhcmVudCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0MTYtXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VzdGF0ZV9vbl9waW5fc2V0KHBpbiwgcGluX3ByaXYsIHBhcmVudCwgcGFyZW50X3ByaXYsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQyNz1kcGxsX3Bpbl9zdGF0ZV9zZXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDQ3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ0ODpcXHRyZXQgPSBvcHMtXFx1MDAzZXN0YXRlX29uX2RwbGxfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE0NDk6XFx0XFx0XFx0XFx0ICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHN0YXRlLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDUwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQ1OD1kcGxsX3Bpbl9wcmlvX3NldChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE0NzQtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNDc1OlxcdHJldCA9IG9wcy1cXHUwMDNlcHJpb19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTQ3NjpcXHRcXHRcXHQgICAgZHBsbF9wcml2KGRwbGwpLCBwcmlvLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNDc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTQ4NT1kcGxsX3Bpbl9kaXJlY3Rpb25fc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUwMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDM6XFx0cmV0ID0gb3BzLVxcdTAwM2VkaXJlY3Rpb25fc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1MDQ6XFx0XFx0XFx0XFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZGlyZWN0aW9uLCBleHRhY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTA1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTUxMz1kcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTU0LVxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1NTU6XFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE1NTY6XFx0XFx0XFx0XFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm9sZF9waGFzZV9hZGosXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1NTctXFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU3Mi1cXHRcXHRyZXQgPSBvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNTczOlxcdFxcdFxcdFxcdFxcdCAgICBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU3NDpcXHRcXHRcXHRcXHRcXHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBwaGFzZV9hZGosXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1NzUtXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU5Ny1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNTk4OlxcdFxcdGlmIChvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTU5OTpcXHRcXHRcXHRcXHRcXHQgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX3BoYXNlX2FkaixcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTYwMC1cXHRcXHRcXHRcXHRcXHQgIGV4dGFjaykpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTY9emwzMDczeF9kcGxsX3Bpbl9kaXJlY3Rpb25fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sIHZvaWQgKnBpbl9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5NzpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB2b2lkICpkcGxsX3ByaXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk4LVxcdFxcdFxcdCAgICAgICBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiAqZGlyZWN0aW9uLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyMz16bDMwNzN4X2RwbGxfaW5wdXRfcGluX2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMjY6XFx0XFx0XFx0XFx0IHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgKmVzeW5jLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyOS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEzMDpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEzMS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTYwPXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZXN5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2MzpcXHRcXHRcXHRcXHQgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTY0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2NjpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2Ny1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9Mjk2PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZmZvX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLCB2b2lkICpwaW5fcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Mjk3OlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjk4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHBsbF9mZm9fcGFyYW0gKmZmbyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMTI9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9tZWFzdXJlZF9mcmVxX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMxNC1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozMTU6XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmRwbGxfcHJpdiwgdTY0ICptZWFzdXJlZF9mcmVxLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMTYtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0zMjc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMzI5LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozMzA6XFx0XFx0XFx0XFx0ICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCAqZnJlcXVlbmN5LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zMzEtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMzMi17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjMzMzpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTMzNC1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MzQ0PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM0Ni1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MzQ3OlxcdFxcdFxcdFxcdCAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zNDgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM0OS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjM1MDpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM1MS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MzkxPXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcGhhc2Vfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTM5My1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjM5NDpcXHRcXHRcXHRcXHRcXHR2b2lkICpkcGxsX3ByaXYsIHM2NCAqcGhhc2Vfb2Zmc2V0LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zOTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zOTYte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzozOTc6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0zOTgtXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTQ0Nz16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy00NDktXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo0NTA6XFx0XFx0XFx0XFx0XFx0dm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy00NTEtXFx0XFx0XFx0XFx0XFx0czMyICpwaGFzZV9hZGp1c3QsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDUzLXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDU0OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDU1LVxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz00ODA9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9waGFzZV9hZGp1c3Rfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDgyLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDgzOlxcdFxcdFxcdFxcdFxcdHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg0LVxcdFxcdFxcdFxcdFxcdHMzMiBwaGFzZV9hZGp1c3QsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg2LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NDg3OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNDg4LVxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz01NDc9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9zdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU0OS1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo1NTA6XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNTUxLVxcdFxcdFxcdFxcdFxcdCBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01NTMte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo1NTQ6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01NTUtXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTU4NT16bDMwNzN4X2RwbGxfaW5wdXRfcGluX29wZXJzdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTU4Ny1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NTg4OlxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy01ODktXFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGRwbGxfcGluX29wZXJzdGF0ZSAqb3BlcnN0YXRlLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTU5OD16bDMwNzN4X2RwbGxfaW5wdXRfcGluX3N0YXRlX29uX2RwbGxfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjAwLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjYwMTpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02MDItXFx0XFx0XFx0XFx0XFx0IGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjA0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NjA1OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjA2LVxcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz02ODU9emwzMDczeF9kcGxsX2lucHV0X3Bpbl9wcmlvX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLCB2b2lkICpwaW5fcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Njg2OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy02ODctXFx0XFx0XFx0XFx0dTMyICpwcmlvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9Njk3PXpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcHJpb19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbiwgdm9pZCAqcGluX3ByaXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjY5ODpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNjk5LVxcdFxcdFxcdFxcdHUzMiBwcmlvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMC17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjcwMTpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcwMi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9NzI3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTcyOS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6NzMwOlxcdFxcdFxcdFxcdCAgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03MzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgKmVzeW5jLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczMy17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjczNDpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTczNS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9Nzg1PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2VzeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTc4Ny1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6Nzg4OlxcdFxcdFxcdFxcdCAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtNzg5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo3OTE6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy03OTItXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTg0Mj16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtODQ0LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6ODQ1OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0ICpmcmVxdWVuY3ksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0Ni1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0Ny17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjg0ODpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTg0OS1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9ODU3PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NTktXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo4NjA6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjIte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo4NjM6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy04NjQtXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTkzMT16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtOTMzLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjkzNDpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05MzUtXFx0XFx0XFx0XFx0XFx0IHMzMiAqcGhhc2VfYWRqdXN0LFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzNy17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjkzODpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTkzOS1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9OTU0PXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NTYtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTU3OlxcdFxcdFxcdFxcdFxcdCB2b2lkICpkcGxsX3ByaXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk1OC1cXHRcXHRcXHRcXHRcXHQgczMyIHBoYXNlX2FkanVzdCxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NjAte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5NjE6XFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05NjItXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTk3OD16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9zdGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk4MC1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6OTgxOlxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05ODItXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz05OTE9c3RhdGljIGludFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzo5OTI6emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy05OTMtXFx0XFx0ICAgICAgczMyICp0ZW1wLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk5NC17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjk5NTpcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTk5Ni1cXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTAxMD1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEwMTE6emwzMDczeF9kcGxsX2xvY2tfc3RhdHVzX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTAxMi1cXHRcXHRcXHQgICAgIGVudW0gZHBsbF9sb2NrX3N0YXR1cyAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEwMTUte1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMDE2OlxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6MjUuNTE3MjkwMTY5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NDEzNTA4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRQTEwgSW52ZXN0aWdhdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBzZWUgYGRwbGxfcHJpdmAgaXMgZGVjbGFyZWQgaW4gYGRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuaGAsIGJ1dCBpdCdzIG5vdCBleHBvcnRlZC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBIb3dldmVyLCBgZHBsbF9waW5fcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gU28sIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmU6XG5cbiogICBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgXG4qICAgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgXG4qICAgYGRwbGxfbmxfcGluX3NldF9kb2l0YFxuKiAgIGBkcGxsX3Bpbl9yZWdpc3RlcmBcblxuTm93LCBsZXQncyBzZWUgd2hhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIENoZWNraW5nIGBkcGxsX25ldGxpbmsuY2AsIEkgZmluZDpcblxuKiAgIGBkcGxsX21zZ19hZGRfcGluX2RwbGxzYCBpcyBzdGF0aWMuXG4qICAgYGRwbGxfY21kX3Bpbl9nZXRfb25lYCBpcyBzdGF0aWMuXG4qICAgYGRwbGxfcGluX2ZyZXFfc2V0YCBpcyBzdGF0aWMuXG4qICAgYGRwbGxfcGluX2VzeW5jX3NldGAgaXMgc3RhdGljLlxuKiAgIGBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXRgIGlzIHN0YXRpYy5cbiogICBgZHBsbF9waW5fcGhhc2VfYWRqX3NldGAgaXMgc3RhdGljLlxuKiAgIGBkcGxsX3Bpbl9wYXJlbnRfZGV2aWNlX3NldGAgaXMgc3RhdGljLlxuKiAgIGBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0YCBpcyBub24tc3RhdGljLlxuXG5XYWl0IGEgc2Vjb25kLCBhbHRob3VnaCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAgaXMgbm9uLXN0YXRpYywgd2hhdCBhYm91dCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgPyBBbHRob3VnaCBpdCdzIG5vdCBkaXJlY3RseSBtb2RpZmllZCwgaXQgY2FsbHMgYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAsIHdoaWNoIHRoZW4gaW4gdHVybiBjYWxscyB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucy4gVGhlcmVmb3JlLCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgIGlzIGFic29sdXRlbHkgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi5cblxuTGV0IG1lIGV4YW1pbmUgYGRwbGxfZGV2aWNlX29wc2AgYW5kIGBkcGxsX3ByaXZgIGluIGBkcGxsX2NvcmUuY2Agbm93LiBUaGV5J3JlIG5vdCBleHBvcnRlZCB0aGVtc2VsdmVzLCBidXQgdGhleSBhcmUgY2FsbGVkIHdpdGhpbiBgZHBsbF9uZXRsaW5rLmNgIGFuZCBgZHBsbF9jb3JlLmNgLiBBaCwgYnV0IGBkcGxsX2RldmljZV9vcHNgIGlzIHVzZWQgYnkgYGRwbGxfcGluX3JlZ2lzdGVyYCwgd2hpY2ggKmlzKiBleHBvcnRlZCwgc28gdGhhdCdzIHJlbGV2YW50LlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byB0aGUgY29uZmlncyB3ZSdsbCBuZWVkLiBgRFBMTGAgaXMgYSBib29sZWFuLCBzbyB3ZSBjYW4ndCBlbmFibGUgaXQgZGlyZWN0bHkuIFdlIG5lZWQgYSBkcml2ZXIgdGhhdCBzZWxlY3RzIGl0LiBJIHNlZSB0aGF0IGBaTDMwNzNYX0kyQ2Agc2VsZWN0cyBgWkwzMDczWGAsIHdoaWNoIHRoZW4gc2VsZWN0cyBgRFBMTGAuIExldCBtZSBzZWUsIGBaTDMwNzNYX0kyQ2AgZGVwZW5kcyBvbiBgSTJDYCBhbmQgYE5FVGAsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIEJhY2sgdG8gYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgLiBgY29uZmlnIFpMMzA3M1hgIHNlbGVjdHMgYERQTExgLiBgY29uZmlnIFpMMzA3M1hfSTJDYCBzZWxlY3RzIGBaTDMwNzNYYC4gU28sIHdlIGNhbiBlbmFibGUgYFpMMzA3M1hfSTJDYC4gSG1tLCB3YWl0LCBJIHNlZSBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBhbHNvIHNlbGVjdHMgYERQTExgLiBDaGVja2luZyBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgZm9yIGBQVFBfMTU4OF9DTE9DS19PQ1BgLCBpdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIGBIQVNfSU9NRU1gLCBgUENJYCwgYEkyQ2AsIGBNVERgLCBgU0VSSUFMXzgyNTBgLCBgIVMzOTBgLCBhbmQgYENPTU1PTl9DTEtgLiBUaGF0IGxvb2tzIHNpZ25pZmljYW50bHkgbW9yZSBpbnZvbHZlZCB0aGFuIGBaTDMwNzNYX0kyQ2AsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhhdCBmb3Igbm93LiBMZXQgbWUgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgb25lIG1vcmUgdGltZSwgYFpMMzA3M1hfSTJDYCBkZXBlbmRzIG9uIGBJMkMgXHUwMDI2XHUwMDI2IE5FVGAuIFNvIHRoYXQncyBjb25maXJtZWQuIEknbGwgYWRkIGBaTDMwNzNYX0kyQ2AgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gT2ggd2FpdCwgYFpMMzA3M1hgIGlzIHRyaXN0YXRlIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIGJ1dCBldmVuIGlmIGBDT01QSUxFX1RFU1RgIGlzbid0IGVuYWJsZWQsIGBaTDMwNzNYX0kyQ2Agd2lsbCBzdGlsbCBzZWxlY3QgaXQuIFBlcmZlY3QuIEJlY2F1c2UgYFpMMzA3M1hfSTJDYCBoYXMgYHNlbGVjdCBaTDMwNzNYYC5cblxuTGV0IG1lIGFsc28gY2hlY2sgYE1MWDVfRFBMTGAuIEl0IGRlcGVuZHMgb24gYE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRWAsIGFuZCBhbHNvIGBzZWxlY3QgRFBMTGAuIFRoZW5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODg3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo0MS45MzA4MDIyODVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTMyMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxfbmxfcGluX2dldF9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTgzMD1pbnQgZHBsbF9ubF9waW5faWRfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODY0LVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxODY1OmludCBkcGxsX25sX3Bpbl9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xODY2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6NDIuMDIyOTM5Mzc0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTgyMTI0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pY3Mgb2YgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBwcm9jZXNzaW5nIHRoaXPigJR5ZXMsIHRoZSBuYXR1cmUgb2YgdGhpcyBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMuIFRoYXQncyBhIGdpdmVuLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGxpbmUgb2YgdGhvdWdodC4uLiB3aGF0IGFib3V0IGBkcGxsX25sX3Bpbl9zZXRfZG9pdGA/IEknbSB3b25kZXJpbmcgaG93IHRoYXQgZnVuY3Rpb24gZml0cyBpbnRvIHRoaXMgZXZvbHZpbmcgc2NlbmFyaW8uIFdoZXJlIGRvZXMgaXQgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlPyBJdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFuZCBjb25zaWRlciBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0NTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo0NS40ODExNTU0NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4MDU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xODkzPWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTMzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxOTM0OmludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xOTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTY6Mjg6NDUuNTYyOTY2NTY5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTg5MDI5NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEUExMIFN1YnN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCAoRFBMTCkgc3Vic3lzdGVtLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIEZpcnN0LCBpdCdzIGNsZWFyIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlbid0IHN0YXRpYzsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5JJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBkaXJlY3RseSBtb2RpZmllZCBvciBjYWxsZWQgYnkgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucy4gYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGAgaGFzIGJlZW4gY2hhbmdlZCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYC4gVGhvc2UgaW4gdHVybiBhcmUgY2FsbGVkIGJ5IHF1aXRlIGEgZmV3IG5ldGxpbmsgY2FsbGJhY2tzLiBBZGRpdGlvbmFsbHksIGBkcGxsX3Bpbl9yZWdpc3RlcmAgaGFzIGFsc28gYmVlbiBtb2RpZmllZCBhbmQgZXhwb3J0ZWQuXG5cblRoZSBjb3JlIHN5bWJvbHMgSSBzaG91bGQgZm9jdXMgb24gYXJlOiBgZHBsbF9waW5fcmVnaXN0ZXJgLCBgZHBsbF9ubF9waW5fZ2V0X2RvaXRgLCBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAsIGFuZCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLlxuXG5gZHBsbF9waW5fcmVnaXN0ZXJgIGlzIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSDigJMgZHJpdmVycyBjYWxsIGl0IGR1cmluZyBwcm9iZSDigJMgYnV0IGl04oCZcyBhIGNvcmUga2VybmVsIEFQSSwgc28gaXRzIGluY2x1c2lvbiBpbiB0aGUgZnV6emluZyBzY29wZSBpcyBqdXN0aWZpZWQuIFRoZSBuZXRsaW5rIGNhbGxiYWNrcywgaG93ZXZlciwgYXJlIGFic29sdXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIHBvaW50LlxuXG5UaGUgcGF0Y2ggZXNzZW50aWFsbHkgaW1wcm92ZXMgaG93IHRoZSBEUExMIHN1YnN5c3RlbSBoYW5kbGVzIHVucmVnaXN0ZXJlZCBEUExMIGRldmljZXMuIEl0IGFkZHMgY2hlY2tzIHVzaW5nIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIHdpdGhpbiB0aGUgbmV0bGluayBjYWxsYmFja3MgKGxpa2UgYGRwbGxfcGluX2ZyZXFfc2V0YCwgZXRjLikgdG8gYXZvaWQgb3BlcmF0aW9ucyBvbiB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGRzIHZhbGlkYXRpb24gb2YgYGRldl9vcHNgIGluIGBkcGxsX3Bpbl9yZWdpc3RlcmAgYW5kIG1vZGlmaWVzIGBkcGxsX3ByaXZgIGFuZCBgZHBsbF9kZXZpY2Vfb3BzYCB0byByZXR1cm4gYE5VTExgIGZvciB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBrZXJuZWwgY29kZSB0aGF0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHkuIFRoaXMgaXMgc2lnbmlmaWNhbnQsIGFuZCB0aGV5IHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nLlxuXG5Ob3csIHdoaWNoIGNvbmZpZ3MgbWFrZSBzZW5zZSB0byBlbmFibGU/IFdlIGtub3cgYFpMMzA3M1hfSTJDYCBzZWxlY3RzIGBaTDMwNzNYYCwgd2hpY2ggaW4gdHVybiBzZWxlY3RzIGBEUExMYC4gYElDRWAgYWxzbyBzZWxlY3RzIGBEUExMYCwgYXMgZG9lcyBgTUxYNV9EUExMYC4gQnV0IGBNTFg1X0RQTExgIGlzIGNvbnRpbmdlbnQgb24gYE1MWDVfQ09SRWAsIGFuZCBgSUNFYCBkZXBlbmRzIG9uIGBQQ0lgLiBgWkwzMDczWF9JMkNgIGRlcGVuZHMgb24gYEkyQyBcdTAwMjZcdTAwMjYgTkVUYC4gSSdsbCBqdXN0IGZvY3VzIG9uIGVuYWJsaW5nIGBaTDMwNzNYX0kyQ2AgYW5kIGBJQ0VgIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBgRFBMTGAgY29uZmlnIGlzIGVuYWJsZWQuXG5cbkxldCdzIGRvdWJsZSBjaGVjayBgWkwzMDczWF9JMkNgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQgZGVwZW5kcyBvbiBgSTJDIFx1MDAyNlx1MDAyNiBORVRgLiBgSTJDYCBpcyBjb21tb24gaW4gdGhlIHN5emthbGxlciBjb25maWdzLCBhbmQgYE5FVGAgaXMgZGVmaW5pdGVseSBpbmNsdWRlZC4gUGVyZmVjdC4gYFpMMzA3M1hfSTJDYCBzZWVtcyBpZGVhbC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSB2ZXJpZnlpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXM6IGBkcGxsX3Bpbl9yZWdpc3RlcmAgaXMgYSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgaW50IGRwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdilgLlxuXG5BbmQgYGRwbGxfbmxfcGluX2dldF9kb2l0YCwgYGRwbGxfbmxfcGluX2dldF9kdW1waXRgLCBhbmQgYGRwbGxfbmxfcGluX3NldF9kb2l0YCBhcmUgYWxzbyBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGRwbGxfbmV0bGluay5jYC5cblxuSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3OTcsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjU4LjE1MTk5OTk2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTI4NDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWkwzMDczWF9JMkNcIixcbiAgICBcIklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRwbGxfcGluX3JlZ2lzdGVyXCIsXG4gICAgXCJkcGxsX25sX3Bpbl9nZXRfZG9pdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fZ2V0X2R1bXBpdFwiLFxuICAgIFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgc3Vic3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSB1bnJlZ2lzdGVyZWQgRFBMTCBkZXZpY2VzLiBJdCBhZGRzIGNoZWNrcyBmb3IgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAgaW4gdmFyaW91cyBuZXRsaW5rIGNhbGxiYWNrcyAoZS5nLiwgYGRwbGxfcGluX2ZyZXFfc2V0YCwgYGRwbGxfcGluX2VzeW5jX3NldGAsIGBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0YCkgdG8gc2tpcCB1bnJlZ2lzdGVyZWQgZGV2aWNlcy4gSXQgYWxzbyB1cGRhdGVzIGBkcGxsX3Bpbl9yZWdpc3RlcmAgdG8gdmFsaWRhdGUgYGRldl9vcHNgIGJlZm9yZSB1c2UsIGFuZCBtb2RpZmllcyBgZHBsbF9wcml2YCBhbmQgYGRwbGxfZGV2aWNlX29wc2AgdG8gcmV0dXJuIGBOVUxMYCBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEUExMIGdlbmVyaWMgbmV0bGluayBmYW1pbHksIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI4OjU4LjMxMTI5MjE5MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODg2Njc1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo1OC4zMTE5ODY2NDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTYzODc5NjgzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzIGluIHRoZSBEUExMIHN1YnN5c3RlbS4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgYGRwbGxfZGV2aWNlX29wcygpYCBhbmQgYGRwbGxfcHJpdigpYCBjb3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciBpZiB0aGUgRFBMTCBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpc3Qgd2FzIGVtcHR5LCBsZWFkaW5nIHRvIGEga2VybmVsIGNyYXNoLiBUaGUgcGF0Y2ggYWRkcyBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBjaGVja3MgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgZnVsbHkgcmVnaXN0ZXJlZCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBvcGVyYXRpb25zIG9yIHByb3BlcnRpZXMgdmlhIG5ldGxpbmsgb3IgcGluIHJlZ2lzdHJhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgaW52YWxpZCBzdGF0ZSBhY2Nlc3Nlcywgd2hpY2ggYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiAob3Igc2ltcGx5IHRyaWdnZXIgYSBwYWdlIGZhdWx0KS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgaW5mby1sZWFrcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODc2MmFjNDczMTMwZjQ5MmM2NjVhMTJiNDBlODJiYmNmZmZlZTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTY6MjY6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcbmluZGV4IDQzZDUxZDk0MmVhZGQuLmEzMjBlZWI4MjlhZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX2NvcmUuY1xuQEAgLTg3NiwxOSArODc2LDI1IEBAIGludFxuIGRwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRcdCAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2KVxuIHtcbitcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRldl9vcHM7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKFdBUk5fT04oIW9wcykgfHxcbiBcdCAgICBXQVJOX09OKCFvcHMtXHUwMDNlc3RhdGVfb25fZHBsbF9nZXQpIHx8XG4gXHQgICAgV0FSTl9PTighb3BzLVx1MDAzZWRpcmVjdGlvbl9nZXQpIHx8XG4tXHQgICAgV0FSTl9PTihvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3JfZ2V0IHx8XG4tXHRcdCAgICAgIWRwbGxfZGV2aWNlX29wcyhkcGxsKS1cdTAwM2VmcmVxX21vbml0b3Jfc2V0KSkgfHxcbiBcdCAgICBXQVJOX09OKG9wcy1cdTAwM2VzdXBwb3J0ZWRfZmZvIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWZmb19nZXQpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbiBcbitcdGRldl9vcHMgPSBkcGxsX2RldmljZV9vcHMoZHBsbCk7XG4rXHRpZiAoV0FSTl9PTihvcHMtXHUwMDNlbWVhc3VyZWRfZnJlcV9nZXQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWRldl9vcHMgfHwgIWRldl9vcHMtXHUwMDNlZnJlcV9tb25pdG9yX2dldCB8fFxuK1x0XHQgICAgICFkZXZfb3BzLVx1MDAzZWZyZXFfbW9uaXRvcl9zZXQpKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogRm9yIHBpbnMgaWRlbnRpZmllZCB2aWEgZmlybXdhcmUgKHBpbi1cdTAwM2Vmd25vZGUpLCBhbGxvdyByZWdpc3RyYXRpb25cbiBcdCAqIGV2ZW4gaWYgdGhlIHBpbidzIChtb2R1bGUsIGNsb2NrX2lkKSBkaWZmZXJzIGZyb20gdGhlIHRhcmdldCBEUExMLlxuQEAgLTEwODEsMTIgKzEwODcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkcGxsX3Bpbl9yZWZfc3luY19wYWlyX2FkZCk7XG4gc3RhdGljIHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKlxuIGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4ge1xuLVx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuLVxuLVx0cmVnID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKChzdHJ1Y3QgbGlzdF9oZWFkICopXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uLCBsaXN0KTtcbi1cdFdBUk5fT04oIXJlZyk7XG4tXHRyZXR1cm4gcmVnO1xuK1x0cmV0dXJuIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgoc3RydWN0IGxpc3RfaGVhZCAqKVx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QsXG4rXHRcdFx0XHRcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24sIGxpc3QpO1xuIH1cbiBcbiB2b2lkICpkcGxsX3ByaXYoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuQEAgLTEwOTQsNiArMTA5Niw4IEBAIHZvaWQgKmRwbGxfcHJpdihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4gXG4gXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XG4rXHRpZiAoIXJlZylcbitcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZXByaXY7XG4gfVxuIFxuQEAgLTExMDIsNiArMTEwNiw4IEBAIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKmRwbGxfZGV2aWNlX29wcyhzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwpXG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG4gXG4gXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmlyc3QoZHBsbCk7XG4rXHRpZiAoIXJlZylcbitcdFx0cmV0dXJuIE5VTEw7XG4gXHRyZXR1cm4gcmVnLVx1MDAzZW9wcztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi45ZTU1NzQ1ZTMzZTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4rKysgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC02Niw2ICs2NiwyMiBAQCBzdGF0aWMgYm9vbCBkcGxsX3Bpbl9hdmFpbGFibGUoc3RydWN0IGRwbGxfcGluICpwaW4pXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsKVxuK3tcbitcdHJldHVybiBkcGxsX2RldmljZV9vcHMoZHBsbCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZHBsbF9waW5fcmVmICpkcGxsX3Bpbl9maXJzdF9yZWdpc3RlcmVkX3JlZihzdHJ1Y3QgZHBsbF9waW4gKnBpbilcbit7XG4rXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpXG4rXHRcdGlmIChkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRyZXR1cm4gcmVmO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIC8qKlxuICAqIGRwbGxfbXNnX2FkZF9waW5faGFuZGxlIC0gYXR0YWNoIHBpbiBoYW5kbGUgYXR0cmlidXRlIHRvIGEgZ2l2ZW4gbWVzc2FnZVxuICAqIEBtc2c6IHBvaW50ZXIgdG8gc2tfYnVmZiBtZXNzYWdlIHRvIGF0dGFjaCBhIHBpbiBoYW5kbGVcbkBAIC02NTYsNiArNjcyLDggQEAgZHBsbF9tc2dfYWRkX3Bpbl9kcGxscyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdGludCByZXQ7XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpbmRleCwgcmVmKSB7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGF0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIERQTExfQV9QSU5fUEFSRU5UX0RFVklDRSk7XG4gXHRcdGlmICghYXR0cilcbiBcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuQEAgLTcwMCw5ICs3MTgsMTAgQEAgZHBsbF9jbWRfcGluX2dldF9vbmUoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdHJlZiA9IGRwbGxfcGluX2ZpcnN0X3JlZ2lzdGVyZWRfcmVmKHBpbik7XG4gXHRpZiAoIXJlZilcbi1cdFx0cmVmID0gZHBsbF94YV9yZWZfZHBsbF9maXJzdChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzKTtcbi1cdEFTU0VSVF9OT1RfTlVMTChyZWYpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJldCA9IGRwbGxfbXNnX2FkZF9waW5faGFuZGxlKG1zZywgcGluKTtcbiBcdGlmIChyZXQpXG5AQCAtMTA5MSw2ICsxMTEwLDggQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHR9XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0IHx8ICFvcHMtXHUwMDNlZnJlcXVlbmN5X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xMTAxLDcgKzExMjIsNyBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuK1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTExMTcsNiArMTEzOCw4IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMTM4LDYgKzExNjEsOCBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHRpZiAocmVmID09IGZhaWxlZClcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTE2Myw2ICsxMTg4LDggQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0aW50IHJldDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCghb3BzLVx1MDAzZWVzeW5jX3NldCB8fCAhb3BzLVx1MDAzZWVzeW5jX2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xMTczLDcgKzEyMDAsNyBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdH1cbiBcdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuLVx0aWYgKCFyZWYpIHtcbitcdGlmICghcmVmIHx8ICFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCIpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbkBAIC0xMTk5LDYgKzEyMjYsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbiBcdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbiBcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZWVzeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMjI0LDYgKzEyNTMsOCBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyNjIsNyArMTI5Myw3IEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbi1cdGlmICghcmVmKSB7XG4rXHRpZiAoIXJlZiB8fCAhZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG5AQCAtMTI4Myw2ICsxMzE0LDggQEAgZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuIFx0aWYgKHN0YXRlID09IG9sZF9zdGF0ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMzA3LDYgKzEzNDAsOCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbiBcdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZChyZWYtXHUwMDNlZHBsbCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuIFx0XHRpZiAoIW9wcy1cdTAwM2VyZWZfc3luY19zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTUwMCw2ICsxNTM1LDggQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHR9XG4gXG4gXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICgoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbkBAIC0xNTA5LDcgKzE1NDYsNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdFx0fVxuIFx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4tXHRpZiAoIXJlZikge1xuK1x0aWYgKCFyZWYgfHwgIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuQEAgLTE1MjYsNiArMTU2Myw4IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuK1x0XHRpZiAoIWRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQocmVmLVx1MDAzZWRwbGwpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiBcdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xNTUwLDYgKzE1ODksOCBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuIFx0XHRpZiAocmVmID09IGZhaWxlZClcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKCFkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4gXHRcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTU4MSw3ICsxNjIyLDcgQEAgZHBsbF9waW5fcGFyZW50X2RldmljZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBhcmVudF9uZXN0LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHBkcGxsX2lkeCA9IG5sYV9nZXRfdTMyKHRiW0RQTExfQV9QSU5fUEFSRU5UX0lEXSk7XG4tXHRkcGxsID0geGFfbG9hZChcdTAwMjZkcGxsX2RldmljZV94YSwgcGRwbGxfaWR4KTtcbitcdGRwbGwgPSBkcGxsX2RldmljZV9nZXRfYnlfaWQocGRwbGxfaWR4KTtcbiBcdGlmICghZHBsbCkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwicGFyZW50IGRldmljZSBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTE4NzMsNiArMTkxNCwxMCBAQCBpbnQgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldCA9IGRwbGxfY21kX3Bpbl9nZXRfb25lKHNrYiwgcGluLCBjYi1cdTAwM2VleHRhY2spO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xuK1x0XHRcdGlmIChyZXQgPT0gLUVOT0RFVikge1xuK1x0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRnZW5sbXNnX2VuZChza2IsIGhkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNjoyODo1OC4zMTE5ODc4NjFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzODc5NDM1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgRFBMTCBEZXZpY2UgUmVnaXN0cmF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGRldmljZSByZWdpc3RyYXRpb24gYW5kIGhhbmRsaW5nIG9mIHVucmVnaXN0ZXJlZCBkZXZpY2VzLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGlzc3VlIGlzIHByZXZlbnRpbmcgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGEgRFBMTCBkZXZpY2UgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgcmVnaXN0ZXJlZC5cblxuSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jYCBhbmQgYGRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBuZXRsaW5rIGludGVyYWN0aW9uIGFuZCBjb3JlIERQTEwgZGV2aWNlIG1hbmFnZW1lbnQuIFRoZSBrZXkgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKHJlZi1cdTAwM2VkcGxsKWAgY2hlY2tzLiBUaGlzIGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBkZWZpbmVkIGFzIGByZXR1cm4gZHBsbF9kZXZpY2Vfb3BzKGRwbGwpO2AsIGFjdHMgYXMgYSBnYXRla2VlcGVyLCB2ZXJpZnlpbmcgdGhhdCB0aGUgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHZhbGlkIGJlZm9yZSB0aGV5IGFyZSB1c2VkLlxuXG5Mb29raW5nIGRlZXBlciwgdGhlIHBhdGNoIGFsdGVycyBgZHBsbF9kZXZpY2Vfb3BzYCBhbmQgYGRwbGxfcHJpdmAgdG8gcmV0dXJuIGBOVUxMYCBpZiBgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpcnN0KGRwbGwpYCByZXR1cm5zIGBOVUxMYC4gVGhpcyBpcyBjcml0aWNhbC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGNhbGxpbmcgYGRwbGxfZGV2aWNlX29wc2Agd291bGQgdHJ5IHRvIGFjY2VzcyB0aGUgYG9wc2AgZmllbGQgb2YgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUsIGV2ZW4gaWYgdGhhdCBzdHJ1Y3R1cmUgd2FzIE5VTEwuIFRoaXMgd291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYSBjbGFzc2ljIGtlcm5lbCBwYW5pYy4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhhdCBieSBncmFjZWZ1bGx5IHJldHVybmluZyBgTlVMTGAgd2hlbiB0aGUgZGV2aWNlIGlzbid0IHJlZ2lzdGVyZWQuIEl0IHNlZW1zIHRoZSBtYWluIGlzc3VlIGlzIGEgbWlzc2luZyBjaGVjayBpbiB0aGUgY29kZSBwYXRoLlxuXG5GdXJ0aGVybW9yZSwgYGRwbGxfcGluX3JlZ2lzdGVyYCBub3cgZGlyZWN0bHkgY2hlY2tzIGBkZXZfb3BzYCAod2hpY2ggcG90ZW50aWFsbHkgY291bGQgYmUgTlVMTCksIGluc3RlYWQgb2YgY2FsbGluZyBgZHBsbF9kZXZpY2Vfb3BzKGRwbGwpYCBhbmQgaGFuZGxlcyB0aGUgYE5VTExgIGNhc2UuIFRoaXMgaXMgYSBuaWNlLCBwcm9hY3RpdmUgY2hhbmdlLiBJbiBgZHBsbF9ubF9waW5fZ2V0X2R1bXBpdGAsIHRoZSBjb2RlIG5vdyBpZ25vcmVzIGAtRU5PREVWYCBmcm9tIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAsIGxpa2VseSB0byBoYW5kbGUgdGhlIHNhbWUgdW5yZWdpc3RlcmVkIGRldmljZSBzY2VuYXJpby4gQWxzbywgaW4gYGRwbGxfcGluX3BhcmVudF9kZXZpY2Vfc2V0YCB3ZSBub3cgdXNlIGBkcGxsX2RldmljZV9nZXRfYnlfaWRgIGluc3RlYWQgb2YgYHhhX2xvYWRgIHdoaWNoIHNlZW1zIHRvIGVuc3VyZSBkZXZpY2UgaW50ZWdyaXR5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGlzIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciwgbW9yZSBwcmVjaXNlbHksIGFuIFwidXNlLWJlZm9yZS1pbml0aWFsaXphdGlvblwiIHNjZW5hcmlvLiBJdOKAmXMgZW5zdXJpbmcgdGhhdCBuZXRsaW5rIG9wZXJhdGlvbnMgYW5kIHBpbiByZWdpc3RyYXRpb24gYXJlbid0IHBlcmZvcm1lZCBvbiBwYXJ0aWFsbHkgb3IgdW5yZWdpc3RlcmVkIGRldmljZXMuIFRoZSBvbGRlciBjb2RlIGRpZG7igJl0IGNvcnJlY3RseSBoYW5kbGUgdGhlc2UgY2FzZXMuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBjb2RlJ3MgYGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maXJzdGAgZnVuY3Rpb24gcmV0dXJuZWQgYE5VTExgIGluIHRoZSB1bnJlZ2lzdGVyZWQgY2FzZSwgYW5kIHRoZSBkZXJlZmVyZW5jZSBjYXVzZWQgdGhlIGNyYXNoLiBUaGUgbmV3IGNoZWNrcyBtYWtlIHRoZSBjb2RlIG1vcmUgcm9idXN0IGFuZCBkZWZlbnNpdmUuXG5cblRoZSBtb3N0IGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaW52b2x2ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEkndmUgcmUtZXhhbWluZWQgdGhlIGNvZGUuIFRoZSBhbnN3ZXIgaXMgKm5vKi4gSXQncyBwdXJlbHkgYWJvdXQgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGZvciBhIHZhbGlkIGRldmljZSByZWdpc3RyYXRpb24gYmVmb3JlIGFjY2Vzc2luZyBpdHMgcHJvcGVydGllcy4gVGhlcmXigJlzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgaXNuJ3QgYWJvdXQgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycy5cblxuTGV0IG1lIHZlcmlmeSBhIHF1aWNrIGNoZWNrIG9uIGBkcGxsX2NtZF9waW5fZ2V0X29uZWAuIFRoZSBwYXRjaCBtYWtlcyB0aGlzIGNvZGUgYmxvY2sgbW9yZSByb2J1c3QgYnkgaGFuZGxpbmcgYC1FTk9ERVZgIChubyBkZXZpY2UgZXJyb3IpIG1vcmUgZ3JhY2VmdWxseS4gVGhpcyBtYWtlcyBzZW5zZSBpbiBsaWdodCBvZiB0aGUgdW5yZWdpc3RlcmVkIGRldmljZSBpc3N1ZS5cblxuSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgcGF0Y2ggaXMgc29sZWx5IGFib3V0IHN0cmVuZ3RoZW5pbmcgdGhlIGRyaXZlciBhZ2FpbnN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGNoZWNrcy4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCB0aGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIGFuZCwgY3J1Y2lhbGx5LCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGlzc3VlIGhlcmUuIEl04oCZcyBzaW1wbHkgYSBmaXggZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHRoYXQgd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIGtlcm5lbCBjcmFzaCwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IGV4aXN0aW5nIGRlYnVnZ2luZyB0b29scy4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBJIGNvbmNsdWRlICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouIFRoZSByZWFzb25pbmcgaXMgdGhlIHBhdGNoIGhhbmRsZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzLiBUaGUgY29kZSBhdm9pZHMgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXJzIHdpdGggbmV3bHkgYWRkZWQgY2hlY2tzIHdpdGggYGRwbGxfZGV2aWNlX3JlZ2lzdGVyZWQoKWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODEsIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE2OjI5OjE0LjY5OTkzNTAwOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBjaGVja3MgaW4gdGhlIERQTEwgc3Vic3lzdGVtLiBQcmlvciB0byB0aGlzIHBhdGNoLCBgZHBsbF9kZXZpY2Vfb3BzKClgIGFuZCBgZHBsbF9wcml2KClgIGNvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBEUExMIGRldmljZSByZWdpc3RyYXRpb24gbGlzdCB3YXMgZW1wdHksIGxlYWRpbmcgdG8gYSBrZXJuZWwgY3Jhc2guIFRoZSBwYXRjaCBhZGRzIGBkcGxsX2RldmljZV9yZWdpc3RlcmVkKClgIGNoZWNrcyB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBmdWxseSByZWdpc3RlcmVkIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIG9wZXJhdGlvbnMgb3IgcHJvcGVydGllcyB2aWEgbmV0bGluayBvciBwaW4gcmVnaXN0cmF0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBpbnZhbGlkIHN0YXRlIGFjY2Vzc2VzLCB3aGljaCBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIEtBU0FOIChvciBzaW1wbHkgdHJpZ2dlciBhIHBhZ2UgZmF1bHQpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBvciBpbmZvLWxlYWtzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgbWlzc2luZyByZWdpc3RyYXRpb24gY2hlY2tzIGluIHRoZSBEUExMIHN1YnN5c3RlbS4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgYGRwbGxfZGV2aWNlX29wcygpYCBhbmQgYGRwbGxfcHJpdigpYCBjb3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciBpZiB0aGUgRFBMTCBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpc3Qgd2FzIGVtcHR5LCBsZWFkaW5nIHRvIGEga2VybmVsIGNyYXNoLiBUaGUgcGF0Y2ggYWRkcyBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJlZCgpYCBjaGVja3MgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgZnVsbHkgcmVnaXN0ZXJlZCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBvcGVyYXRpb25zIG9yIHByb3BlcnRpZXMgdmlhIG5ldGxpbmsgb3IgcGluIHJlZ2lzdHJhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgaW52YWxpZCBzdGF0ZSBhY2Nlc3Nlcywgd2hpY2ggYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFuZCBLQVNBTiAob3Igc2ltcGx5IHRyaWdnZXIgYSBwYWdlIGZhdWx0KS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgaW5mby1sZWFrcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[1] Phase: Succeeded StartedAt: 2026-08-13 16:29:25 +0000 UTC FinishedAt: 2026-08-13 16:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 16:29:25 +0000 UTC FinishedAt: 2026-08-13 16:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2] Phase: Succeeded StartedAt: 2026-08-13 16:29:25 +0000 UTC FinishedAt: 2026-08-13 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 16:29:25 +0000 UTC FinishedAt: 2026-08-13 20:12:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 16:29:25 +0000 UTC FinishedAt: 2026-08-13 16:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 16:29:25 +0000 UTC FinishedAt: 2026-08-13 16:29:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb4488/series-workflowb4488-convert-artifact-549354801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 16:29:36 +0000 UTC FinishedAt: 2026-08-13 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 16:29:36 +0000 UTC FinishedAt: 2026-08-13 16:45:48 +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:*651c74d0-0bd3-45c0-a05b-eb3f9ce1f908,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-workflowb4488/series-workflowb4488-convert-artifact-549354801/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": "ad7ab199-2ea2-479e-85a3-cb5cdd6a59dd", "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-workflowb4488/series-workflowb4488-build-action-817044319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 16:29:36 +0000 UTC FinishedAt: 2026-08-13 16:45: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:*651c74d0-0bd3-45c0-a05b-eb3f9ce1f908,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-workflowb4488/series-workflowb4488-convert-artifact-549354801/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": "ad7ab199-2ea2-479e-85a3-cb5cdd6a59dd", "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-workflowb4488/series-workflowb4488-build-action-817044319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 16:45:48 +0000 UTC FinishedAt: 2026-08-13 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 16:45:48 +0000 UTC FinishedAt: 2026-08-13 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 16:45:48 +0000 UTC FinishedAt: 2026-08-13 16:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 16:45:48 +0000 UTC FinishedAt: 2026-08-13 16:45:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb4488/series-workflowb4488-convert-artifact-3208710788/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 16:45:58 +0000 UTC FinishedAt: 2026-08-13 16:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 16:45:58 +0000 UTC FinishedAt: 2026-08-13 16:47:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad7ab199-2ea2-479e-85a3-cb5cdd6a59dd,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-workflowb4488/series-workflowb4488-build-action-817044319/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-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 16:48:00 +0000 UTC FinishedAt: 2026-08-13 16:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 16:48:00 +0000 UTC FinishedAt: 2026-08-13 16:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 16:48:00 +0000 UTC FinishedAt: 2026-08-13 17:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 16:48:00 +0000 UTC FinishedAt: 2026-08-13 17:06:34 +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:*651c74d0-0bd3-45c0-a05b-eb3f9ce1f908,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-workflowb4488/series-workflowb4488-convert-artifact-3208710788/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": "752afec8-491e-4a80-8c81-09b40865488f", "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-workflowb4488/series-workflowb4488-build-action-2694251664/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 16:48:00 +0000 UTC FinishedAt: 2026-08-13 17:06:24 +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:*651c74d0-0bd3-45c0-a05b-eb3f9ce1f908,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-workflowb4488/series-workflowb4488-convert-artifact-3208710788/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": "752afec8-491e-4a80-8c81-09b40865488f", "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-workflowb4488/series-workflowb4488-build-action-2694251664/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 17:06:34 +0000 UTC FinishedAt: 2026-08-13 17:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 17:06:34 +0000 UTC FinishedAt: 2026-08-13 17:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 17:06:34 +0000 UTC FinishedAt: 2026-08-13 17:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 17:06:34 +0000 UTC FinishedAt: 2026-08-13 17:08:31 +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:*752afec8-491e-4a80-8c81-09b40865488f,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-workflowb4488/series-workflowb4488-build-action-2694251664/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-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 20:12:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"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:*ad7ab199-2ea2-479e-85a3-cb5cdd6a59dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*752afec8-491e-4a80-8c81-09b40865488f,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-workflowb4488/series-workflowb4488-build-action-817044319/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-workflowb4488/series-workflowb4488-build-action-2694251664/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 17:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 17:08:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"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-workflowb4488/series-workflowb4488-convert-artifact-2487593357/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 17:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 17:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 17:08:41 +0000 UTC FinishedAt: 2026-08-13 17:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 17:08:51 +0000 UTC FinishedAt: 2026-08-13 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4488[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dpll_pin_register","dpll_nl_pin_get_doit","dpll_nl_pin_get_dumpit","dpll_nl_pin_set_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZL3073X_I2C","ICE"],"series_id":"267d7a43-85c8-4a67-a8e2-f03f55792d5b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 17:08:51 +0000 UTC FinishedAt: 2026-08-13 20:11:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad7ab199-2ea2-479e-85a3-cb5cdd6a59dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*752afec8-491e-4a80-8c81-09b40865488f,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-workflowb4488/series-workflowb4488-build-action-817044319/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-workflowb4488/series-workflowb4488-build-action-2694251664/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-workflowb4488/series-workflowb4488-convert-artifact-2487593357/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,}