Name: series-workflownlx22 Phase: Succeeded StartedAt: 2026-08-31 10:17:02 +0000 UTC FinishedAt: 2026-08-31 12:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[0] Phase: Succeeded StartedAt: 2026-08-31 10:17:02 +0000 UTC FinishedAt: 2026-08-31 10:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 10:17:02 +0000 UTC FinishedAt: 2026-08-31 10:36:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_IPHETH", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_IPHETH", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "4323ea57-894f-4d51-b71d-0a2d84f49f1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipheth_close" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9JUEhFVEgmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGhldGhfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBpcGhldGhfa2lsbF91cmJzKCkgaW4gaXBoZXRoX2Nsb3NlKCkgdG8gcHJvcGVybHkgdGVybWluYXRlIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIFVTQiBlbXVsYXRpb24vcmF3LWdhZGdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU3YmQ2MmYyZDY4MWRkY2IzYWQyZTIwYTI1MDQxM2RjN2VhMjY0NWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDozMjo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbmluZGV4IDJiNDkwMTE0ZDIzMjcuLmYxMjdhZWFiNzAzMWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguY1xuQEAgLTUwNSw2ICYjNDM7NTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIFx0ICovXG4gXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuJiM0MztcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfSVBIRVRIJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBoZXRoX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGlwaGV0aF9raWxsX3VyYnMoKSBpbiBpcGhldGhfY2xvc2UoKSB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIGVtdWxhdGlvbi9yYXctZ2FkZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEwOjMyOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCmluZGV4IDJiNDkwMTE0ZDIzMjcuLmYxMjdhZWFiNzAzMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKQEAgLTUwNSw2ICYjNDM7NTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIAkgKiBpdCwgc28gdGhhdCBzdWNoIGEgc2NoZWR1bGVfZGVsYXllZF93b3JrKCkgaXMgYSBuby1vcC4KIAkgKi8KIAlkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7ZGV2LSZndDtjYXJyaWVyX3dvcmspOwomIzQzOwlpcGhldGhfa2lsbF91cmJzKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGlwaGV0aC5jYCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB0YWtlIGEgZ29vZCwgaGFyZCBsb29rIGF0IGJvdGggdGhlIHByb3Bvc2VkIHBhdGNoIGl0c2VsZiBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhhdCBgaXBoZXRoLmNgIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSBpcyBjcnVjaWFsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4KClRvIGJlZ2luLCBJJiMzOTtsbCB1c2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcHVsbCB1cCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGNvbXBhcmUgYWdhaW5zdCBhbmQgZW5zdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvZGUgSSYjMzk7bSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaXBoZXRoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdFx0aWYgKHJldHZhbClcbiA0OTE6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiA0OTI6XHRcbiA0OTM6XHRcdGVuYWJsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG4gNDk0Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yaywgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCk7XG4gNDk1Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDQ5NjpcdH1cbiA0OTc6XHRcbiA0OTg6XHRzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIDQ5OTpcdHtcbiA1MDA6XHRcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuIDUwMTpcdFxuIDUwMjpcdFx0bmV0aWZfc3RvcF9xdWV1ZShuZXQpO1xuIDUwMzpcdFx0LyogQSBUWCBVUkIgY2FuIHN0aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYWZ0ZXIgdGhpcyBwb2ludCBhbmRcbiA1MDQ6XHRcdCAqIHRyeSB0byByZS1hcm0gdGhlIGNhcnJpZXIgd29yay4gRGlzYWJsZSBpdCBpbnN0ZWFkIG9mIGNhbmNlbGxpbmdcbiA1MDU6XHRcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIDUwNjpcdFx0ICovXG4gNTA3Olx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuIDUwODpcdFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIDUwOTpcdFx0cmV0dXJuIDA7XG4gNTEwOlx0fVxuIDUxMTpcdFxuIDUxMjpcdHN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiA1MTM6XHR7XG4gNTE0Olx0XHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiA1MTU6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVx1MDAzZXVkZXY7XG4gNTE2Olx0XHRpbnQgcmV0dmFsO1xuIDUxNzpcdFxuIDUxODpcdFx0LyogUGFyYW5vaWQgKi9cbiA1MTk6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBJUEhFVEhfVFhfQlVGX1NJWkUpIHtcbiA1MjA6XHRcdFx0V0FSTigxLCBcJiMzNDslczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXG5cJiMzNDssIF9fZnVuY19fLCBza2ItXHUwMDNlbGVuKTtcbiA1MjE6XHRcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbiA1MjI6XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiA1MjM6XHRcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA1MjQ6XHRcdH1cbiA1MjU6XHRcbiA1MjY6XHRcdG1lbWNweShkZXYtXHUwMDNldHhfYnVmLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNTI3Olx0XG4gNTI4Olx0XHR1c2JfZmlsbF9idWxrX3VyYihkZXYtXHUwMDNldHhfdXJiLCB1ZGV2LFxuIDUyOTpcdFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi1cdTAwM2VidWxrX291dCksXG4gNTMwOlx0XHRcdFx0ICBkZXYtXHUwMDNldHhfYnVmLCBza2ItXHUwMDNlbGVuLFxuIDUzMTpcdFx0XHRcdCAgaXBoZXRoX3NuZGJ1bGtfY2FsbGJhY2ssXG4gNTMyOlx0XHRcdFx0ICBkZXYpO1xuIDUzMzpcdFx0ZGV2LVx1MDAzZXR4X3VyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDtcbiA1MzQ6XHRcbiA1MzU6XHRcdG5ldGlmX3N0b3BfcXVldWUobmV0KTtcbiA1MzY6XHRcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi1cdTAwM2V0eF91cmIsIEdGUF9BVE9NSUMpO1xuIDUzNzpcdFx0aWYgKHJldHZhbCkge1xuIDUzODpcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXM6IHVzYl9zdWJtaXRfdXJiOiAlZFxcblwmIzM0OyxcbiA1Mzk6XHRcdFx0XHRfX2Z1bmNfXywgcmV0dmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGlwaGV0aC5jYCBEcml2ZXIgYW5kIEVtdWxhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZSBgaXBoZXRoLmNgIGRyaXZlciBpcyBhbGwgYWJvdXQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBjb25maWd1cmF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBhY3RpdmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGV4cGxvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGVtdWxhdGluZyB0aGlzIGRyaXZlciB3aXRoaW4gUUVNVSBvciBTeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGFsb25nIHRoZSBsaW5lcyBvZiBzZWVpbmcgaWYgdGhlIHN0YW5kYXJkIFVTQiBzdGFjaywgc3BlY2lmaWNhbGx5IHRoZSByYXctZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIG9yIHBlcmhhcHMgZXZlbiBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMsIGNvdWxkIGJlIGxldmVyYWdlZCB0byBtaW1pYyBpdHMgYmVoYXZpb3IuIEl0JiMzOTtzIGFib3V0IGZpZ3VyaW5nIG91dCB0aGUgYmVzdCBhbmQgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGludGVyYWN0IHdpdGggaXQgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LgoKU28sIGZpcnN0IHRoaW5ncyBmaXJzdDogSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgZm9yICYjMzQ7aXBoZXRoJiMzNDsgZGlyZWN0bHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQSEVUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTc5LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTgwOmNvbmZpZyBVU0JfSVBIRVRIXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01ODEtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfVVNCX05FVF9LQUxNSUEpXHQmIzQzOz0ga2FsbWlhLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfVVNCX0lQSEVUSClcdCYjNDM7PSBpcGhldGgub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcdCYjNDM7PSBzaWVycmFfbmV0Lm9cbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTgtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTk6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9DTEFTUyAgICAyNTVcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MDojZGVmaW5lIElQSEVUSF9VU0JJTlRGX1NVQkNMQVNTIDI1M1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjYxOiNkZWZpbmUgSVBIRVRIX1VTQklOVEZfUFJPVE8gICAgMVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYyLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjYzOiNkZWZpbmUgSVBIRVRIX0lQX0FMSUdOXHRcdDJcdC8qIHBhZGRpbmcgYXQgZnJvbnQgb2YgVVJCICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjQtLyogT24gaU9TIGRldmljZXMsIE5DTSBoZWFkZXJzIGluIFJYIGhhdmUgYSBmaXhlZCBzaXplIHJlZ2FyZGxlc3Mgb2YgRFBFIGNvdW50OlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02OS0gKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo3MDojZGVmaW5lIElQSEVUSF9ORFAxNl9NQVhfRFBFXHQyMlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcxOiNkZWZpbmUgSVBIRVRIX05EUDE2X0hFQURFUl9TSVpFIChzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2KSAmIzQzOyBcXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcyOlx0XHRcdFx0ICBJUEhFVEhfTkRQMTZfTUFYX0RQRSAqIFxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNzMtXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc0OiNkZWZpbmUgSVBIRVRIX05DTV9IRUFERVJfU0laRVx0KHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpICYjNDM7IFxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzU6XHRcdFx0XHQgSVBIRVRIX05EUDE2X0hFQURFUl9TSVpFKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc2OiNkZWZpbmUgSVBIRVRIX1RYX0JVRl9TSVpFICAgICAgRVRIX0ZSQU1FX0xFTlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc3OiNkZWZpbmUgSVBIRVRIX1JYX0JVRl9TSVpFX0xFR0FDWSAoSVBIRVRIX0lQX0FMSUdOICYjNDM7IEVUSF9GUkFNRV9MRU4pXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Nzg6I2RlZmluZSBJUEhFVEhfUlhfQlVGX1NJWkVfTkNNXHQ2NTUzNlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjgwOiNkZWZpbmUgSVBIRVRIX1RYX1RJTUVPVVQgICAgICAgKDUgKiBIWilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy04MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4MjojZGVmaW5lIElQSEVUSF9JTlRGTlVNICAgICAgICAgIDJcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4MzojZGVmaW5lIElQSEVUSF9BTFRfSU5URk5VTSAgICAgIDFcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy04NC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NTojZGVmaW5lIElQSEVUSF9DVFJMX0VORFAgICAgICAgIDB4MDBcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NjojZGVmaW5lIElQSEVUSF9DVFJMX0JVRl9TSVpFICAgIDB4NDBcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NzojZGVmaW5lIElQSEVUSF9DVFJMX1RJTUVPVVQgICAgICg1ICogSFopXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtODgtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6ODk6I2RlZmluZSBJUEhFVEhfQ01EX0dFVF9NQUNBRERSICAgMHgwMFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjkwOiNkZWZpbmUgSVBIRVRIX0NNRF9FTkFCTEVfTkNNICAgIDB4MDRcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5MTojZGVmaW5lIElQSEVUSF9DTURfQ0FSUklFUl9DSEVDSyAweDQ1XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtOTItXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6OTM6I2RlZmluZSBJUEhFVEhfQ0FSUklFUl9DSEVDS19USU1FT1VUIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMSAqIEhaKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk0OiNkZWZpbmUgSVBIRVRIX0NBUlJJRVJfT04gICAgICAgMHgwNFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTk1LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcGhldGhfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5NzpcdHsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oVVNCX1ZFTkRPUl9BUFBMRSwgSVBIRVRIX1VTQklOVEZfQ0xBU1MsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6OTg6XHRcdFx0XHRcdElQSEVUSF9VU0JJTlRGX1NVQkNMQVNTLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk5Olx0XHRcdFx0XHRJUEhFVEhfVVNCSU5URl9QUk9UTykgfSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xMDAtXHR7IH1cbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MTIzPXN0YXRpYyBpbnQgaXBoZXRoX2FsbG9jX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTM3LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjEzODpcdHR4X2J1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChpcGhvbmUtXHUwMDNldWRldiwgSVBIRVRIX1RYX0JVRl9TSVpFLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEzOS1cdFx0XHRcdCAgICBHRlBfS0VSTkVMLCBcdTAwMjZ0eF91cmItXHUwMDNldHJhbnNmZXJfZG1hKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTU1LWZyZWVfdHhfYnVmOlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE1NjpcdHVzYl9mcmVlX2NvaGVyZW50KGlwaG9uZS1cdTAwM2V1ZGV2LCBJUEhFVEhfVFhfQlVGX1NJWkUsIHR4X2J1ZixcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNTctXHRcdFx0ICB0eF91cmItXHUwMDNldHJhbnNmZXJfZG1hKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MTY2PXN0YXRpYyB2b2lkIGlwaGV0aF9mcmVlX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTY5LVx0XHRcdCAgaXBob25lLVx1MDAzZXJ4X3VyYi1cdTAwM2V0cmFuc2Zlcl9kbWEpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE3MDpcdHVzYl9mcmVlX2NvaGVyZW50KGlwaG9uZS1cdTAwM2V1ZGV2LCBJUEhFVEhfVFhfQlVGX1NJWkUsIGlwaG9uZS1cdTAwM2V0eF9idWYsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTcxLVx0XHRcdCAgaXBob25lLVx1MDAzZXR4X3VyYi1cdTAwM2V0cmFuc2Zlcl9kbWEpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0yMDM9c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19sZWdhY3koc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMTAtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjExOlx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIFx1MDAzYz0gSVBIRVRIX0lQX0FMSUdOKSB7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjEyLVx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMTQtXHR9XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE1Olx0bGVuID0gdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGggLSBJUEhFVEhfSVBfQUxJR047XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE2Olx0YnVmID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciAmIzQzOyBJUEhFVEhfSVBfQUxJR047XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjE3LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0yMjk9c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19uY20oc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNDAtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjQxOlx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIFx1MDAzYyBJUEhFVEhfTkNNX0hFQURFUl9TSVpFKSB7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjQyLVx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNTYtXHRkcGUgPSBuY20wLVx1MDAzZWRwZTE2O1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI1NzpcdGZvciAoaW50IGRwZV9pID0gMDsgZHBlX2kgXHUwMDNjIElQSEVUSF9ORFAxNl9NQVhfRFBFOyAmIzQzOyYjNDM7ZHBlX2ksICYjNDM7JiM0MztkcGUpIHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNTgtXHRcdGRnX2lkeCA9IGxlMTZfdG9fY3B1KGRwZS1cdTAwM2V3RGF0YWdyYW1JbmRleCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI2Ni1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyNjc6XHRcdGlmIChkZ19pZHggXHUwMDNjIElQSEVUSF9OQ01fSEVBREVSX1NJWkUgfHxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNjgtXHRcdCAgICBkZ19pZHggXHUwMDNlPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCB8fFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0zNjI9c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzcxLVx0cmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MzcyOlx0XHRcdHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCBJUEhFVEhfQ1RSTF9FTkRQKSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzM6XHRcdFx0SVBIRVRIX0NNRF9DQVJSSUVSX0NIRUNLLCAvKiByZXF1ZXN0ICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc0LVx0XHRcdDB4YzAsIC8qIHJlcXVlc3QgdHlwZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zNzYtXHRcdFx0MHgwMiwgLyogaW5kZXggKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzc6XHRcdFx0ZGV2LVx1MDAzZWN0cmxfYnVmLCBJUEhFVEhfQ1RSTF9CVUZfU0laRSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzg6XHRcdFx0SVBIRVRIX0NUUkxfVElNRU9VVCk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc5LVx0aWYgKHJldHZhbCBcdTAwM2M9IDApIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzg0LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM4NTpcdGlmICgocmV0dmFsID09IDEgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VjdHJsX2J1ZlswXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikgfHxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozODY6XHQgICAgKHJldHZhbCBcdTAwM2U9IDIgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VjdHJsX2J1ZlsxXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikpIHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zODctXHRcdG5ldGlmX2NhcnJpZXJfb24oZGV2LVx1MDAzZW5ldCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTM5Nz1zdGF0aWMgdm9pZCBpcGhldGhfY2Fycmllcl9jaGVja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDAyLVx0aXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDAzOlx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQwNC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQwNj1zdGF0aWMgaW50IGlwaGV0aF9nZXRfbWFjYWRkcihzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTItXHRyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codWRldixcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MTM6XHRcdFx0XHQgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIElQSEVUSF9DVFJMX0VORFApLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxNDpcdFx0XHRcdCBJUEhFVEhfQ01EX0dFVF9NQUNBRERSLCAvKiByZXF1ZXN0ICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDE1LVx0XHRcdFx0IDB4YzAsIC8qIHJlcXVlc3QgdHlwZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTgtXHRcdFx0XHQgZGV2LVx1MDAzZWN0cmxfYnVmLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxOTpcdFx0XHRcdCBJUEhFVEhfQ1RSTF9CVUZfU0laRSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MjA6XHRcdFx0XHQgSVBIRVRIX0NUUkxfVElNRU9VVCk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDIxLVx0aWYgKHJldHZhbCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00Mzc9c3RhdGljIGludCBpcGhldGhfZW5hYmxlX25jbShzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NDItXHRyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codWRldixcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0NDM6XHRcdFx0XHQgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIElQSEVUSF9DVFJMX0VORFApLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ0NDpcdFx0XHRcdCBJUEhFVEhfQ01EX0VOQUJMRV9OQ00sIC8qIHJlcXVlc3QgKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NDUtXHRcdFx0XHQgMHg0MSwgLyogcmVxdWVzdCB0eXBlICovXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ0OS1cdFx0XHRcdCAwLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ1MDpcdFx0XHRcdCBJUEhFVEhfQ1RSTF9USU1FT1VUKTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTEtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQ3Nz1zdGF0aWMgaW50IGlwaGV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ4Mi1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0ODM6XHR1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBJUEhFVEhfSU5URk5VTSwgSVBIRVRIX0FMVF9JTlRGTlVNKTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00ODQtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ5My1cdGVuYWJsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDk0Olx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ5NS1cdHJldHVybiByZXR2YWw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTUxMj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBoZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxOC1cdC8qIFBhcmFub2lkICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTE5Olx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIElQSEVUSF9UWF9CVUZfU0laRSkge1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUyMC1cdFx0V0FSTigxLCBcJiMzNDslczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXG5cJiMzNDssIF9fZnVuY19fLCBza2ItXHUwMDNlbGVuKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTc4PXN0YXRpYyBpbnQgaXBoZXRoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01OTItXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmlwaGV0aF9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU5MzpcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IElQSEVUSF9UWF9USU1FT1VUO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU5NC1cdHN0cnNjcHkobmV0ZGV2LVx1MDAzZW5hbWUsIFwmIzM0O2V0aCVkXCYjMzQ7LCBzaXplb2YobmV0ZGV2LVx1MDAzZW5hbWUpKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjAwLVx0ZGV2LVx1MDAzZWNvbmZpcm1lZF9wYWlyaW5nID0gZmFsc2U7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NjAxOlx0ZGV2LVx1MDAzZXJ4X2J1Zl9sZW4gPSBJUEhFVEhfUlhfQlVGX1NJWkVfTEVHQUNZO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwMi1cdGRldi1cdTAwM2VyY3ZidWxrX2NhbGxiYWNrID0gaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbGVnYWN5O1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwMy1cdC8qIFNldCB1cCBlbmRwb2ludHMgKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MDQ6XHRoaW50ZiA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBJUEhFVEhfQUxUX0lOVEZOVU0pO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwNS1cdGlmIChoaW50ZiA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYyMC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MjE6XHRkZXYtXHUwMDNlY3RybF9idWYgPSBrbWFsbG9jKElQSEVUSF9DVFJMX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MjItXHRpZiAoZGV2LVx1MDAzZWN0cmxfYnVmID09IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjMyLVx0aWYgKCFyZXR2YWwpIHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MzM6XHRcdGRldi1cdTAwM2VyeF9idWZfbGVuID0gSVBIRVRIX1JYX0JVRl9TSVpFX05DTTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MzQtXHRcdGRldi1cdTAwM2VyY3ZidWxrX2NhbGxiYWNrID0gaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbmNtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIFVTQl9JUEhFVEggaW4gdGhlIEtjb25maWcqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBVU0JfSVBIRVRIYCBpcyBoYW5kbGVkLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzZWN0aW9uIHJlbGF0ZWQgdG8gYFVTQl9JUEhFVEhgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGl0JiMzOTtzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgb3IgaGVscCB0ZXh0IG1pZ2h0IHJldmVhbCBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYXQgaGFuZCBhbmQgZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb24gb2YgaXRzIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NTpcdFx0aGVscFxuIDU3NjpcdFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc3VwcG9ydCB0aGUgUGhvbmV0IGludGVyZmFjZSB0byBhIE5va2lhXG4gNTc3Olx0XHQgIGNlbGx1bGFyIG1vZGVtLCBhcyBmb3VuZCBvbiBtb3N0IE5va2lhIGhhbmRzZXRzIHdpdGggdGhlXG4gNTc4Olx0XHQgIFwmIzM0O1BDIHN1aXRlXCYjMzQ7IFVTQiBwcm9maWxlLlxuIDU3OTpcdFxuIDU4MDpcdGNvbmZpZyBVU0JfSVBIRVRIXG4gNTgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuIDU4MjpcdFx0ZGVmYXVsdCBuXG4gNTgzOlx0XHRoZWxwXG4gNTg0Olx0XHQgIE1vZHVsZSB1c2VkIHRvIHNoYXJlIEludGVybmV0IGNvbm5lY3Rpb24gKHRldGhlcmluZykgZnJvbSB5b3VyXG4gNTg1Olx0XHQgIGlQaG9uZSB0byB5b3VyIHN5c3RlbS5cbiA1ODY6XHRcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgY29ycmVzcG9uZGluZyB1c2Vyc3BhY2UgbGlicmFyeS9wcm9ncmFtXG4gNTg3Olx0XHQgIHRvIHBhaXIgeW91ciBkZXZpY2Ugd2l0aCB5b3VyIHN5c3RlbSwgZm9yIGV4YW1wbGUgdXNibXV4ZFxuIDU4ODpcdFx0ICBcdTAwM2NodHRwczovL2dpdGh1Yi5jb20vbGliaW1vYmlsZWRldmljZS91c2JtdXhkXHUwMDNlLlxuIDU4OTpcdFxuIDU5MDpcdGNvbmZpZyBVU0JfU0lFUlJBX05FVFxuIDU5MTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXCYjMzQ7XG4gNTkyOlx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA1OTM6XHRcdGhlbHBcbiA1OTQ6XHRcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2llcnJhIFdpcmVsZXNzIFVTQi10by1XV0FOIGRldmljZS5cbiA1OTU6XHRcbiA1OTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTk3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaWVycmFfbmV0LlxuIDU5ODpcdFxuIDU5OTpcdGNvbmZpZyBVU0JfVkw2MDBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVU0ItSVBIRVRIIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9JUEhFVEhgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IHBsYW4gaXMgdG8gc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbCBsaW5lcywgcGVyaGFwcyB0aGUgZmlyc3QgNTAgb3Igc28sIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IHJlbGF0aW9uc2hpcHMuIEFsdGVybmF0aXZlbHksIGlmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgaW1tZWRpYXRlIGNsYXJpdHksIEkmIzM5O2xsIGdvIHJpZ2h0IHRvIHRoZSB0b3Agb2YgYm90aCBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGFuZCwgYXMgYSBicm9hZGVyIHBlcnNwZWN0aXZlLCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBmcmFtZXdvcmsgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuICAyMTpcdFx0ICBCZWxraW4gRjVVMDExXG4gIDIyOlx0XHQgIEJlbGtpbiBGNVUxMTFcbiAgMjM6XHRcdCAgQ0FUQyBOZXRNYXRlXG4gIDI0Olx0XHQgIENBVEMgTmV0TWF0ZSBJSVxuICAyNTpcdFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcbiAgMjY6XHRcbiAgMjc6XHRcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcbiAgMjg6XHRcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxuICAyOTpcdFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVVNCX0tBV0VUSFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XG4gIDM4Olx0XHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxuICAzOTpcdFx0ICAzQ29tIDNDMTkyNTBcbiAgNDA6XHRcdCAgQURTIFVTQi0xMEJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpcGhldGhfY2xvc2UgRnVuY3Rpb24gZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBpcGhldGhfY2xvc2VgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgZnVuY3Rpb24gcmVsYXRlZCB0byBzdG9wcGluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgKGBuZXRpZl9zdG9wX3F1ZXVlYCksIGRpc2FibGluZyBhbmQgc3luY2hyb25pemluZyB0aGUgY2FycmllciB3b3JrIChgZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luY2ApLCBhbmQga2lsbGluZyBVUkJzIChgaXBoZXRoX2tpbGxfdXJic2ApLiBUaGlzIGlzIGFsbCBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgbmV0d29yayBpbnRlcmZhY2Ugc2h1dGRvd24uCgpOb3csIHdhaXQgYSBtaW51dGUsIHRoZSBuZXh0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kIGlzLCBkb2VzIFN5emthbGxlciBldmVuIGZ1enogVVNCIGV0aGVybmV0IGRyaXZlcnM/IEkgKnRoaW5rKiBzbywgcmlnaHQ/IEFoLCB5ZXMsIGl0IHVzZXMgUmF3IEdhZGdldCAvIER1bW15IEhDRCAvIFVTQiBlbXVsYXRpb24uIFRoYXQgc2hvdWxkIGNvdmVyIHRoaXMuIEdyZWF0LgoKQnV0IG5vdyBJIGhhdmUgdG8gY2hlY2sgdGhlIGZ1enppbmcgcnVsZXMuIEkgY2FuJiMzOTt0IGp1c3QgZGl2ZSBpbi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcnVsZXMgc2F5IEkgc2hvdWxkIHNraXAgcGF0Y2hlcyB0aGF0IGluY2x1ZGUgY2hhbmdlcyB3aGljaCBhcmU6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBPa2F5LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgYWxzbyBzYXlzIG5vdCB0byBmdXp6IGNlcnRhaW4gZHJpdmVyIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBldGMuKSB0aGF0IG9ubHkgdHJpZ2dlciBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZC4KCkFscmlnaHQsIGJhY2sgdG8gYGlwaGV0aF9jbG9zZWAuIElzIHRoaXMgYSB0ZWFyZG93biBjYWxsYmFjayBsaWtlIGAucmVtb3ZlYCBvciBgLnNodXRkb3duYD8gTm8sIGl0JiMzOTtzIG5vdC4gRnJvbSBtZW1vcnksIGBpcGhldGhfY2xvc2VgIGlzIHRoZSBgbmRvX3N0b3BgIGNhbGxiYWNrIG9mIGBuZXRkZXZfb3BzYC4gU28gaXQmIzM5O3MgZXhlY3V0ZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93biB3aXRoIGNvbW1hbmRzIGxpa2UgYGlwIGxpbmsgc2V0IGRldiBldGhYIGRvd25gIG9yIGV2ZW4gYGRldl9jbG9zZWAgb3IgYFNJT0NTSUZGTEFHU2AgaWZkb3duLiBUbyBiZSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBsaW5rZWQgdG8gYGlwaGV0aF9uZXRkZXZfb3BzYC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0fVxuIDU2NjpcdFxuIDU2NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0ge1xuIDU2ODpcdFx0LmdldF9saW5rID0gaXBoZXRoX2V0aHRvb2xfb3BfZ2V0X2xpbmtcbiA1Njk6XHR9O1xuIDU3MDpcdFxuIDU3MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XG4gNTcyOlx0XHQubmRvX29wZW4gPSBpcGhldGhfb3BlbixcbiA1NzM6XHRcdC5uZG9fc3RvcCA9IGlwaGV0aF9jbG9zZSxcbiA1NzQ6XHRcdC5uZG9fc3RhcnRfeG1pdCA9IGlwaGV0aF90eCxcbiA1NzU6XHRcdC5uZG9fdHhfdGltZW91dCA9IGlwaGV0aF90eF90aW1lb3V0LFxuIDU3NjpcdH07XG4gNTc3Olx0XG4gNTc4Olx0c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gNTc5Olx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuIDU4MDpcdHtcbiA1ODE6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiA1ODI6XHRcdHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaW4sICplcF9vdXQ7XG4gNTgzOlx0XHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpoaW50ZjtcbiA1ODQ6XHRcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgaXBoZXRoX2tpbGxfdXJic2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgZnVuY3Rpb24sIGBpcGhldGhfa2lsbF91cmJzYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyDigJMgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoICYjMzQ7dXJicy4mIzM0OyBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEkgc3VzcGVjdCB0aGF0ICYjMzQ7dXJicyYjMzQ7IGlzIGEga2V5IHBpZWNlIG9mIGRhdGEgb3IgYSBkYXRhIHN0cnVjdHVyZSBpbnZvbHZlZCBpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gdG8gc2VlIHdoYXQgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGRvZXMuIE15IGZhbWlsaWFyaXR5IHdpdGggbmFtaW5nIGNvbnZlbnRpb25zIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBhY3Rpb24gdG8gdGVybWluYXRlLCByZW1vdmUsIG9yIHJlbmRlciBpbmVydCBzb21ldGhpbmcgcmVsYXRlZCB0byAmIzM0O3VyYnMuJiMzNDsgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwaGV0aF9raWxsX3VyYnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaXBoZXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTE2Nj1zdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQ5OD1zdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDctXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjUwODpcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDktXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9Njc3PXN0YXRpYyB2b2lkIGlwaGV0aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02ODMtXHRcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldi1cdTAwM2VuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjY4NDpcdFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4NS1cdFx0aXBoZXRoX2ZyZWVfdXJicyhkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuLi4KCioqSW5zcGVjdGluZyB0aGUgQ29udGVudHMgb2YgYGlwaGV0aF9raWxsX3VyYnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGFjdHVhbGx5IHdpdGhpbiBgaXBoZXRoX2tpbGxfdXJic2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wb25lbnRzLiBXaGF0JiMzOTtzIHRoZSBzdHJ1Y3R1cmU/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgcHJvZ3JhbSwgYSBzY3JpcHQsIG9yIHdoYXQ/IFdoYXQgdmFyaWFibGVzIGFyZSBkZWZpbmVkPyBBcmUgdGhlcmUgY2FsbHMgdG8gb3RoZXIgcm91dGluZXMgb3IgZnVuY3Rpb25zPyBNb3JlIGltcG9ydGFudGx5LCB3aGF0IHByb2JsZW0gaXMgdGhpcyBwYXJ0aWN1bGFyIHRoaW5nIGF0dGVtcHRpbmcgdG8gc29sdmU/IFdoYXQgaXMgaXRzIGludGVuZGVkIHB1cnBvc2U/IEtub3dpbmcgdGhhdCBjb250ZXh0IHdpbGwgY2xhcmlmeSBhbGwgb2YgaXRzIGlubmVyIHdvcmtpbmdzLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzU6XHRcbiAxNzY6XHRzdGF0aWMgdm9pZCBpcGhldGhfa2lsbF91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXG4gMTc3Olx0e1xuIDE3ODpcdFx0dXNiX2tpbGxfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuIDE3OTpcdFx0dXNiX2tpbGxfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuIDE4MDpcdH1cbiAxODE6XHRcbiAxODI6XHRzdGF0aWMgaW50IGlwaGV0aF9jb25zdW1lX3NrYihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXG4gMTgzOlx0e1xuIDE4NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxODU6XHRcbiAxODY6XHRcdHNrYiA9IGRldl9hbGxvY19za2IobGVuKTtcbiAxODc6XHRcdGlmICghc2tiKSB7XG4gMTg4Olx0XHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4gMTg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE5MDpcdFx0fVxuIDE5MTpcdFxuIDE5MjpcdFx0c2tiX3B1dF9kYXRhKHNrYiwgYnVmLCBsZW4pO1xuIDE5MzpcdFx0c2tiLVx1MDAzZWRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMTk0Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIERyaXZlciBDaGFuZ2UqKgoKT2theSwgc28gYGlwaGV0aF9jbG9zZWAgbm93IGluY2x1ZGVzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgdGhlIGlwaGV0aCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlICpyZWFsbHkqIHB1c2ggdGhpcz8gSXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIGFkZXF1YXRlbHkgdGVzdD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBjaGFuZ2UgbWVyaXRzIHNjcnV0aW55LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFVTQi4KCkdvb2QgbmV3czogd2UgKmNhbiogdGVzdCB0aGlzLCBib3RoIGluIFFFTVUgYW5kLCBjcnVjaWFsbHksIGluIFN5emthbGxlciEgV2UgY2FuIHVzZSBVU0IgcmF3X2dhZGdldCBvciBkdW1teV9oY2QsIG9yIGxldmVyYWdlIFN5emthbGxlciYjMzk7cyBVU0IgZW11bGF0aW9uLiBXZSBjYW4gYnJpbmcgdGhlIEFwcGxlIGlQaG9uZSBVU0IgRXRoZXJuZXQgZGV2aWNlIHVwLCBkb3duLCBzZW5kIGFuZCByZWNlaXZlIHBhY2tldHMuIFBlcmZlY3QhIFNvLCBkZWZpbml0ZWx5IFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgd2UgbmVlZCB0byBidWlsZCBhIHRlc3QgZW52aXJvbm1lbnQuCgpGaXJzdCwgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYFVTQl9ORVRfRFJJVkVSU2AgcmVsaWVzIG9uIGBVU0IgJmFtcDsmYW1wOyBORVRgLCBhbmQgYFVTQl9JUEhFVEhgIGlzIHVuZGVyIHRoYXQgbWVudWNvbmZpZy4gTm8gYWRkaXRpb25hbCBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciBgVVNCX0lQSEVUSGAgaXRzZWxmLCB0aGF0IEkgY2FuIHNlZS4gVGhhdCYjMzk7cyBnb29kLiBTaW1wbGUsIHVzdWFsbHkgaW5kaWNhdGVzIHdlIHNob3VsZCBoYXZlIG5vIHByb2JsZW1zLgoKSSBhbHNvIG5lZWQgdG8gc2VlIGlmIGBVU0JfSVBIRVRIYCBzaG93cyB1cCBhbnl3aGVyZSBlbHNlIGluIHRoZSBLY29uZmlnIGZpbGVzIGZvciBjb250ZXh0LiBZZXAsIGp1c3QgdGhhdCBtZW51Y29uZmlnIGVudHJ5LgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBzaG91bGQgZm9jdXMgb24uIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcgYGlwaGV0aF9jbG9zZWAsIGJ1dCBhbHNvLCBwcm9iYWJseSBgaXBoZXRoX3Byb2JlYCwgYGlwaGV0aF90eGAsIGFuZCBgaXBoZXRoX29wZW5gLiBXYWl0LCBgaXBoZXRoX2Nsb3NlYCBpcyBzdGF0aWMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIHJlZmVyZW5jZWQgaW4gYGlwaGV0aF9uZXRkZXZfb3BzYCAoZnVuY3Rpb24gcG9pbnRlcnMgYXJlIG5vdCBpbmxpbmVkKS4gR290dGEgYmUgc3VyZS4KCkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGlwaGV0aC5jIGZpbGUgdG8gZW5zdXJlIEkgZGlkbiYjMzk7dCBtaXNzIGFueXRoaW5nIG9idmlvdXMuIExldCYjMzk7cyBzZWUgYWxsIHRoZSBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AuIFRoZW4sIHdlIGNhbiBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X10mIzQzOy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0xMDQ9c3RydWN0IGlwaGV0aF9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xMjAtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTIxOnN0YXRpYyBpbnQgaXBoZXRoX3J4X3N1Ym1pdChzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2LCBnZnBfdCBtZW1fZmxhZ3MpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEyMi1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxMjM6c3RhdGljIGludCBpcGhldGhfYWxsb2NfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqaXBob25lKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEyNC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE2NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNjY6c3RhdGljIHZvaWQgaXBoZXRoX2ZyZWVfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqaXBob25lKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE2Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE4MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxODI6c3RhdGljIGludCBpcGhldGhfY29uc3VtZV9za2IoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE4My17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIwMi1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMDM6c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19sZWdhY3koc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIwNC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIyOC0gKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMjk6c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19uY20oc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIzMC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI4NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyODY6c3RhdGljIHZvaWQgaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI4Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTMzOC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozMzk6c3RhdGljIHZvaWQgaXBoZXRoX3NuZGJ1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM0MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM2MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNjI6c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zNjMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zOTYtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mzk3OnN0YXRpYyB2b2lkIGlwaGV0aF9jYXJyaWVyX2NoZWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQwNS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MDY6c3RhdGljIGludCBpcGhldGhfZ2V0X21hY2FkZHIoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MzYtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDM3OnN0YXRpYyBpbnQgaXBoZXRoX2VuYWJsZV9uY20oc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00Mzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTctXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDU4OnN0YXRpYyBpbnQgaXBoZXRoX3J4X3N1Ym1pdChzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2LCBnZnBfdCBtZW1fZmxhZ3MpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDU5LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDc2LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ3NzpzdGF0aWMgaW50IGlwaGV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDc4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDk3LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ5ODpzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ5OS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxMS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1MTI6c3RhdGljIG5ldGRldl90eF90IGlwaGV0aF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU1MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1NTI6c3RhdGljIHZvaWQgaXBoZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdW5zaWduZWQgaW50IHR4cXVldWUpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTUzLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTYwLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU2MTpzdGF0aWMgdTMyIGlwaGV0aF9ldGh0b29sX29wX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTYyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU3Ny1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1Nzg6c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTc5LVx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjc2LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjY3NzpzdGF0aWMgdm9pZCBpcGhldGhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02Nzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz02OTM9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwaGV0aF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTcwMC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo3MDE6bW9kdWxlX3VzYl9kcml2ZXIoaXBoZXRoX2RyaXZlcik7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE2NgoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlwaGV0aCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwaGV0aGAgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBzY3J1dGluaXplIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbXBhY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgbGlrZSBgaXBoZXRoX2Nsb3NlYCwgYGlwaGV0aF9vcGVuYCwgYGlwaGV0aF9wcm9iZWAsIGFuZCBgaXBoZXRoX2Rpc2Nvbm5lY3RgLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYGlwaGV0aF9jbG9zZWAsIHNwZWNpZmljYWxseSB0aGUgYWRkaXRpb24gb2YgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbDsga2lsbGluZyBVUkJzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcGVuZGluZyBvciBjb25jdXJyZW50IGNvbXBsZXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGJlaW5nIGNsb3NlZC4gVGhlIGluY2x1c2lvbiBvZiBgaXBoZXRoX2Nsb3NlYCBpbiBgRm9jdXNTeW1ib2xzYCBjb25maXJtcyB0aGlzIGFzIHRoZSBmb2NhbCBwb2ludC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gQSBxdWljayBjaGVjayBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGluIG9yZGVyLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBVU0JfSVBIRVRIYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAgYXJlIGFsbCBlbmFibGVkLiBUaGlzIGVuc3VyZXMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCBhbmQgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRlc3RpbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZ1enppbmcgcGxhbjogSSBzZWUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLiBUaGlzIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2U6IGl0IG1vZGlmaWVzIGEgY3JpdGljYWwgYXNwZWN0IG9mIGRyaXZlciBiZWhhdmlvciBwb3RlbnRpYWxseSBzdXNjZXB0aWJsZSB0byByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgZHVyaW5nIGludGVyZmFjZSBjbG9zdXJlLiBUaGUgYFJlYXNvbmluZ2AgbmVhdGx5IHN1bW1hcml6ZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiB0aGUgYGlwaGV0aGAgZHJpdmVyIGNhbiBiZSBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQvZW11bGF0aW9uLCBzbyBpdCYjMzk7cyBwZXJmZWN0bHkgc3VpdGVkIGZvciBmdXp6aW5nLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgZXhwbGljaXRseSBsaXN0cyBgaXBoZXRoX2Nsb3NlYCwgd2hpY2ggSSBhbHJlYWR5IGtuZXcgd2FzIGltcG9ydGFudC4gVGhlIGBFbmFibGVDb25maWdzYCBhcnJheSB2ZXJpZmllcyB0aGUgZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYCBzaWduYWxzIHRoYXQgbXkgd29yayBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9JUEhFVEgmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGhldGhfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gaXBoZXRoX2tpbGxfdXJicygpIGluIGlwaGV0aF9jbG9zZSgpIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVU0IgZW11bGF0aW9uL3Jhdy1nYWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9JUEhFVEgmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGhldGhfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gaXBoZXRoX2tpbGxfdXJicygpIGluIGlwaGV0aF9jbG9zZSgpIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVU0IgZW11bGF0aW9uL3Jhdy1nYWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlN2JkNjJmMmQ2ODFkZGNiM2FkMmUyMGEyNTA0MTNkYzdlYTI2NDViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTA6MzI6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKaW5kZXggMmI0OTAxMTRkMjMyNy4uZjEyN2FlYWI3MDMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwpAQCAtNTA1LDYgJiM0Mzs1MDUsNyBAQCBzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogCSAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLgogCSAqLwogCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtkZXYtJmd0O2NhcnJpZXJfd29yayk7CiYjNDM7CWlwaGV0aF9raWxsX3VyYnMoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGlwaGV0aCBEcml2ZXIgQ2xvc3VyZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGludHJvZHVjZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYGlwaGV0aF9raWxsX3VyYnMoZGV2KTtgIHdpdGhpbiB0aGUgYGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGNvZGUsIGFuZCB0aGVuIHNlZSB3aGF0IHRoaXMgYWRkaXRpb24gbWVhbnMuIEkmIzM5O2xsIHVzZSBhIGZpbGUgcmVhZGVyIHRvIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTA1IG9mIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IGZvciBgaXBoZXRoX2Nsb3NlKClgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGV5IGNob3NlIHRvIGtpbGwgdGhlIFVSQnMgYXQgY2xvc2UsIGFuZCB3aGF0IHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMsIG9yIGltcHJvdmVtZW50cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVx1MDAzZXVkZXY7XG4gNDgxOlx0XHRpbnQgcmV0dmFsID0gMDtcbiA0ODI6XHRcbiA0ODM6XHRcdHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIElQSEVUSF9JTlRGTlVNLCBJUEhFVEhfQUxUX0lOVEZOVU0pO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0cmV0dmFsID0gaXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XG4gNDg2Olx0XHRpZiAocmV0dmFsKVxuIDQ4NzpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0cmV0dmFsID0gaXBoZXRoX3J4X3N1Ym1pdChkZXYsIEdGUF9LRVJORUwpO1xuIDQ5MDpcdFx0aWYgKHJldHZhbClcbiA0OTE6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiA0OTI6XHRcbiA0OTM6XHRcdGVuYWJsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG4gNDk0Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yaywgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCk7XG4gNDk1Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDQ5NjpcdH1cbiA0OTc6XHRcbiA0OTg6XHRzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIDQ5OTpcdHtcbiA1MDA6XHRcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuIDUwMTpcdFxuIDUwMjpcdFx0bmV0aWZfc3RvcF9xdWV1ZShuZXQpO1xuIDUwMzpcdFx0LyogQSBUWCBVUkIgY2FuIHN0aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYWZ0ZXIgdGhpcyBwb2ludCBhbmRcbiA1MDQ6XHRcdCAqIHRyeSB0byByZS1hcm0gdGhlIGNhcnJpZXIgd29yay4gRGlzYWJsZSBpdCBpbnN0ZWFkIG9mIGNhbmNlbGxpbmdcbiA1MDU6XHRcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIDUwNjpcdFx0ICovXG4gNTA3Olx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuIDUwODpcdFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIDUwOTpcdFx0cmV0dXJuIDA7XG4gNTEwOlx0fVxuIDUxMTpcdFxuIDUxMjpcdHN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiA1MTM6XHR7XG4gNTE0Olx0XHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiA1MTU6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVx1MDAzZXVkZXY7XG4gNTE2Olx0XHRpbnQgcmV0dmFsO1xuIDUxNzpcdFxuIDUxODpcdFx0LyogUGFyYW5vaWQgKi9cbiA1MTk6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBJUEhFVEhfVFhfQlVGX1NJWkUpIHtcbiA1MjA6XHRcdFx0V0FSTigxLCBcJiMzNDslczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXG5cJiMzNDssIF9fZnVuY19fLCBza2ItXHUwMDNlbGVuKTtcbiA1MjE6XHRcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbiA1MjI6XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiA1MjM6XHRcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA1MjQ6XHRcdH1cbiA1MjU6XHRcbiA1MjY6XHRcdG1lbWNweShkZXYtXHUwMDNldHhfYnVmLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNTI3Olx0XG4gNTI4Olx0XHR1c2JfZmlsbF9idWxrX3VyYihkZXYtXHUwMDNldHhfdXJiLCB1ZGV2LFxuIDUyOTpcdFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi1cdTAwM2VidWxrX291dCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCBhc3N1bWluZyBleHBlcnRpc2UgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIGBpcGhldGhfa2lsbF91cmJzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgaXBoZXRoX2tpbGxfdXJic2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIGl0IHBlcmZvcm1zPyBJIG5lZWQgdGhlIGdyYW51bGFyIGRldGFpbHMuIEkgY2FuJiMzOTt0IG1ha2UgYW55IGFzc3VtcHRpb25zOyBJIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgYWxnb3JpdGhtLiBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIOKAkyB3aGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnM/IFVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGlzIGNyaXRpY2FsLiBJcyBpdCBpc29sYXRlZCBvciBpcyBpdCBjb3JlPyBBIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBwcm9qZWN0IHNob3VsZCByZXZlYWwgYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCBwYWludCBhIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgaW5mbHVlbmNlLiBJdCBjb3VsZCBiZSBhIHNpbXBsZSB1dGlsaXR5IGZ1bmN0aW9uLCBvciBpdCBjb3VsZCBiZSBhIGxpbmNocGluIGluIHNvbWUgY3J1Y2lhbCBwcm9jZXNzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2FnZSBpcyBwYXJhbW91bnQgdG8gZGV0ZXJtaW5pbmcgaXRzIHNpZ25pZmljYW5jZS4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBoZXRoX2tpbGxfdXJicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MTY2PXN0YXRpYyB2b2lkIGlwaGV0aF9mcmVlX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc1LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE3NjpzdGF0aWMgdm9pZCBpcGhldGhfa2lsbF91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc3LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NDk4PXN0YXRpYyBpbnQgaXBoZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwNy1cdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTA4Olx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwOS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz02Nzc9c3RhdGljIHZvaWQgaXBoZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4My1cdFx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVx1MDAzZW5ldCk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Njg0Olx0XHRpcGhldGhfa2lsbF91cmJzKGRldik7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjg1LVx0XHRpcGhldGhfZnJlZV91cmJzKGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGlwaGV0aF9raWxsX3VyYnNgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpcGhldGhfa2lsbF91cmJzYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSB0ZXJtaW5hdGlvbiBvciBjbGVhbnVwIG9mIFVSQnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gaS1waGQtZXRoIGRyaXZlciBvciByZWxhdGVkIHN5c3RlbS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRoaW5nIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycnVwdCBoYW5kbGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgc2NlbmFyaW9zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGludm9sdmluZyBVUkIgcG9pbnRlcnMsIHNoYXJlZCBtZW1vcnkgYWNjZXNzLCBvciBhdG9taWNpdHkgZ3VhcmFudGVlcyBhcm91bmQgdGhlIFVSQiBsaXN0LiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IGFueSBhcmVhcyB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC9lbmFibGVkLCB0byBzZWUgaWYgdGhleSBhcmUgcHJvcGVybHkgaGFuZGxlZC4gQWxzbywgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGluY29tcGxldGUgdHJhbnNhY3Rpb25zLCBlc3BlY2lhbGx5IGFueSBzaXR1YXRpb25zIHdoZXJlIGEgVVJCIGlzIHF1ZXVlZCBidXQgaXMgbm90IG1hcmtlZCB0byBhbGxvdyBzYWZlIHVubGlua2luZy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyDigJMgYXJlIGZhaWxlZCBVUkIgc3VibWlzc2lvbnMgaGFuZGxlZCBncmFjZWZ1bGx5LCBhbmQgYXJlIHJlc291cmNlcyBwcm9wZXJseSBmcmVlZCBpbiBhbGwgZXJyb3IgcGF0aHM/IElmIHRoZXJlIGFyZSBhbnkgbG9ja3MsIGhvdyBhcmUgdGhleSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQ/IEFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBlbm91Z2gsIG9yIGFyZSB0aGVyZSBwb3RlbnRpYWwgYm90dGxlbmVja3M/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGluZGljYXRpb24gb2YgYSBsZWFrIG9mIFVSQnM7IGl0IGlzIGEgY3JpdGljYWwgcmVzb3VyY2UgYW5kIG11c3QgYmUgY2xlYW5lZCB1cCBwcm9wZXJseSwgb3IgdGhlIHN5c3RlbSB3aWxsIGNyYXNoIHVuZGVyIGxvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcbiAxNjY6XHRzdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXG4gMTY3Olx0e1xuIDE2ODpcdFx0dXNiX2ZyZWVfY29oZXJlbnQoaXBob25lLVx1MDAzZXVkZXYsIGlwaG9uZS1cdTAwM2VyeF9idWZfbGVuLCBpcGhvbmUtXHUwMDNlcnhfYnVmLFxuIDE2OTpcdFx0XHRcdCAgaXBob25lLVx1MDAzZXJ4X3VyYi1cdTAwM2V0cmFuc2Zlcl9kbWEpO1xuIDE3MDpcdFx0dXNiX2ZyZWVfY29oZXJlbnQoaXBob25lLVx1MDAzZXVkZXYsIElQSEVUSF9UWF9CVUZfU0laRSwgaXBob25lLVx1MDAzZXR4X2J1ZixcbiAxNzE6XHRcdFx0XHQgIGlwaG9uZS1cdTAwM2V0eF91cmItXHUwMDNldHJhbnNmZXJfZG1hKTtcbiAxNzI6XHRcdHVzYl9mcmVlX3VyYihpcGhvbmUtXHUwMDNlcnhfdXJiKTtcbiAxNzM6XHRcdHVzYl9mcmVlX3VyYihpcGhvbmUtXHUwMDNldHhfdXJiKTtcbiAxNzQ6XHR9XG4gMTc1Olx0XG4gMTc2Olx0c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuIDE3NzpcdHtcbiAxNzg6XHRcdHVzYl9raWxsX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbiAxNzk6XHRcdHVzYl9raWxsX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbiAxODA6XHR9XG4gMTgxOlx0XG4gMTgyOlx0c3RhdGljIGludCBpcGhldGhfY29uc3VtZV9za2IoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuIDE4MzpcdHtcbiAxODQ6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMTg1Olx0XG4gMTg2Olx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7XG4gMTg3Olx0XHRpZiAoIXNrYikge1xuIDE4ODpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuIDE4OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxOTA6XHRcdH1cbiAxOTE6XHRcbiAxOTI6XHRcdHNrYl9wdXRfZGF0YShza2IsIGJ1ZiwgbGVuKTtcbiAxOTM6XHRcdHNrYi1cdTAwM2VkZXYgPSBkZXYtXHUwMDNlbmV0O1xuIDE5NDpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNwoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAzMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBpcGhldGhfa2lsbF91cmJzKGRldik7YCB3aXRoaW4gYGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KWAuIEVzc2VudGlhbGx5LCB3aGVuIGEgbmV0d29yayBkZXZpY2UgdXNpbmcgdGhlIGlwaGV0aCBkcml2ZXIgaXMgY2xvc2VkLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93biwgdGhpcyBlbnN1cmVzIHRoYXQgYW55IGluLWZsaWdodCBUcmFuc21pdCAoVFgpIGFuZCBSZWNlaXZlIChSWCkgVVJCcyBhcmUgaW1tZWRpYXRlbHkgY2FuY2VsZWQgc3luY2hyb25vdXNseSB1c2luZyBgdXNiX2tpbGxfdXJiKClgLiBUaGlzIGlzIGdvb2QsIGl0IHByZXZlbnRzIHRob3NlIFVSQnMgZnJvbSBjb250aW51aW5nIHRvIHJ1biBvciBjb21wbGV0ZSBhZnRlciB0aGUgZGV2aWNlIGlzIGRlYWN0aXZhdGVkLiBJdCYjMzk7cyBhIGxpZmVjeWNsZSBmaXguIFByZXZpb3VzbHksIHRoaXMgbGFjayBvZiBjYW5jZWxsYXRpb24gY3JlYXRlZCB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIGFuZCB1bndhbnRlZCBwcm9jZXNzaW5nLCBzbyB0aGlzIGlzIGEgc29saWQgZml4LgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOIHNjcnV0aW55LiBJIGhhdmUgdG8gdGhpbmsgdGhyb3VnaCB0aGUgcG90ZW50aWFsIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoxLiAgKipEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSBleHBvc2VkPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC4KMi4gICoqRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/KiogQWJzb2x1dGVseSBub3QuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2FsbCB0byBjYW5jZWwgVVJCcy4KMy4gICoqRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/KiogTm9wZS4gSnVzdCBVUkIgY2FuY2VsbGF0aW9uLgo0LiAgKipEb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMsIHBvdGVudGlhbGx5IGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnM/KiogTm8gd2F5LCB0aGlzIGp1c3QgY2xlYW5zIHVwIHBlbmRpbmcgb3BlcmF0aW9ucy4KClRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IOKAkyBjbGVhbmluZyB1cCByZXNvdXJjZXMuIFRoZSBhY3R1YWwgbG9naWMgaXMgc2ltcGxlIGFuZCBjbGVhcmx5IGFkZHJlc3NlcyBhIGtub3duIGlzc3VlLCB3aGljaCBJIGFzc3VtZSBpcyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQgYnkgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBkZXRlY3RvcnMuICBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIGNvbmZpcm1pbmc6CgoqICAgYE5lZWRzS01TQU5gOiBmYWxzZQoqICAgYEtNU0FOUmVhc29uaW5nYDogQ2xlYXIgZXhwbGFuYXRpb24sIGNvbnRyYXN0aW5nIHRoZSBhcHBsaWNhdGlvbiBvZiBLQVNBTi9LTVNBTi4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgIGluIGBpcGhldGhfY2xvc2UoKWAgdG8gY2FuY2VsIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgYWRkcmVzc2VzIFVSQiBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdXBvbiBpbnRlcmZhY2UgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMjo0OC4xNTQ4Mjc3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDgzNzkwNDQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfSVBIRVRIXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBoZXRoX2Nsb3NlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGlwaGV0aF9raWxsX3VyYnMoKSBpbiBpcGhldGhfY2xvc2UoKSB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIGVtdWxhdGlvbi9yYXctZ2FkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMjo0OC4xNTQ4MzYzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzOTc1OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDozMjo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcXG5pbmRleCAyYjQ5MDExNGQyMzI3Li5mMTI3YWVhYjcwMzFlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguY1xcbkBAIC01MDUsNiArNTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gXFx0ICogaXQsIHNvIHRoYXQgc3VjaCBhIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpIGlzIGEgbm8tb3AuXFxuIFxcdCAqL1xcbiBcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZWNhcnJpZXJfd29yayk7XFxuK1xcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjMyOjQ4LjU0OTQ0OTc3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUzNDc2NjczNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9JUEhFVEhcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcGhldGhfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBpcGhldGhfa2lsbF91cmJzKCkgaW4gaXBoZXRoX2Nsb3NlKCkgdG8gcHJvcGVybHkgdGVybWluYXRlIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIFVTQiBlbXVsYXRpb24vcmF3LWdhZGdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjMyOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG5pbmRleCAyYjQ5MDExNGQyMzI3Li5mMTI3YWVhYjcwMzFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbkBAIC01MDUsNiArNTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIFx0ICovXG4gXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuK1x0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzI6NDguNTQ5NDUyODEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU2ODk4NjE1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlwaGV0aC5jYCBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AuIExldCdzIGdldCByaWdodCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGdvb2QsIGhhcmQgbG9vayBhdCBib3RoIHRoZSBwcm9wb3NlZCBwYXRjaCBpdHNlbGYgYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgYGlwaGV0aC5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UgaXMgY3J1Y2lhbCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuXG5cblRvIGJlZ2luLCBJJ2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBwdWxsIHVwIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUgdG8gY29tcGFyZSBhZ2FpbnN0IGFuZCBlbnN1cmUgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgY29kZSBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMzozNC4yMzkzMTg2MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHRcXHRpZiAocmV0dmFsKVxcbiA0OTE6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0ZW5hYmxlX2RlbGF5ZWRfd29yayhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmspO1xcbiA0OTQ6XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZkZXYtXFx1MDAzZWNhcnJpZXJfd29yaywgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCk7XFxuIDQ5NTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0OTY6XFx0fVxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbiA0OTk6XFx0e1xcbiA1MDA6XFx0XFx0c3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdG5ldGlmX3N0b3BfcXVldWUobmV0KTtcXG4gNTAzOlxcdFxcdC8qIEEgVFggVVJCIGNhbiBzdGlsbCBjb21wbGV0ZSB3aXRoIGFuIGVycm9yIGFmdGVyIHRoaXMgcG9pbnQgYW5kXFxuIDUwNDpcXHRcXHQgKiB0cnkgdG8gcmUtYXJtIHRoZSBjYXJyaWVyIHdvcmsuIERpc2FibGUgaXQgaW5zdGVhZCBvZiBjYW5jZWxsaW5nXFxuIDUwNTpcXHRcXHQgKiBpdCwgc28gdGhhdCBzdWNoIGEgc2NoZWR1bGVfZGVsYXllZF93b3JrKCkgaXMgYSBuby1vcC5cXG4gNTA2OlxcdFxcdCAqL1xcbiA1MDc6XFx0XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmspO1xcbiA1MDg6XFx0XFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xcbiA1MDk6XFx0XFx0cmV0dXJuIDA7XFxuIDUxMDpcXHR9XFxuIDUxMTpcXHRcXG4gNTEyOlxcdHN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gNTEzOlxcdHtcXG4gNTE0OlxcdFxcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbiA1MTU6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBkZXYtXFx1MDAzZXVkZXY7XFxuIDUxNjpcXHRcXHRpbnQgcmV0dmFsO1xcbiA1MTc6XFx0XFxuIDUxODpcXHRcXHQvKiBQYXJhbm9pZCAqL1xcbiA1MTk6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgSVBIRVRIX1RYX0JVRl9TSVpFKSB7XFxuIDUyMDpcXHRcXHRcXHRXQVJOKDEsIFxcXCIlczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXFxcblxcXCIsIF9fZnVuY19fLCBza2ItXFx1MDAzZWxlbik7XFxuIDUyMTpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbiA1MjI6XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gNTIzOlxcdFxcdFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIDUyNDpcXHRcXHR9XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdG1lbWNweShkZXYtXFx1MDAzZXR4X2J1Ziwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuIDUyNzpcXHRcXG4gNTI4OlxcdFxcdHVzYl9maWxsX2J1bGtfdXJiKGRldi1cXHUwMDNldHhfdXJiLCB1ZGV2LFxcbiA1Mjk6XFx0XFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUodWRldiwgZGV2LVxcdTAwM2VidWxrX291dCksXFxuIDUzMDpcXHRcXHRcXHRcXHQgIGRldi1cXHUwMDNldHhfYnVmLCBza2ItXFx1MDAzZWxlbixcXG4gNTMxOlxcdFxcdFxcdFxcdCAgaXBoZXRoX3NuZGJ1bGtfY2FsbGJhY2ssXFxuIDUzMjpcXHRcXHRcXHRcXHQgIGRldik7XFxuIDUzMzpcXHRcXHRkZXYtXFx1MDAzZXR4X3VyYi1cXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7XFxuIDUzNDpcXHRcXG4gNTM1OlxcdFxcdG5ldGlmX3N0b3BfcXVldWUobmV0KTtcXG4gNTM2OlxcdFxcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi1cXHUwMDNldHhfdXJiLCBHRlBfQVRPTUlDKTtcXG4gNTM3OlxcdFxcdGlmIChyZXR2YWwpIHtcXG4gNTM4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiJXM6IHVzYl9zdWJtaXRfdXJiOiAlZFxcXFxuXFxcIixcXG4gNTM5OlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXR2YWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMzozNC4yMzk0Njg2MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzU1MjUwMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBoZXRoLmNgIERyaXZlciBhbmQgRW11bGF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZSBgaXBoZXRoLmNgIGRyaXZlciBpcyBhbGwgYWJvdXQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBjb25maWd1cmF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBhY3RpdmF0aW9uLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS5cblxuVGhlbiwgSSdtIGdvaW5nIHRvIGV4cGxvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGVtdWxhdGluZyB0aGlzIGRyaXZlciB3aXRoaW4gUUVNVSBvciBTeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGFsb25nIHRoZSBsaW5lcyBvZiBzZWVpbmcgaWYgdGhlIHN0YW5kYXJkIFVTQiBzdGFjaywgc3BlY2lmaWNhbGx5IHRoZSByYXctZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIG9yIHBlcmhhcHMgZXZlbiBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMsIGNvdWxkIGJlIGxldmVyYWdlZCB0byBtaW1pYyBpdHMgYmVoYXZpb3IuIEl0J3MgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8gaW50ZXJhY3Qgd2l0aCBpdCBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuXG5cblNvLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IEknbSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgZm9yIFwiaXBoZXRoXCIgZGlyZWN0bHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMzo1Ny43OTE5NzM2MTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTIxNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQSEVUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTcyPWNvbmZpZyBVU0JfQ0RDX1BIT05FVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTc5LVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU4MDpjb25maWcgVVNCX0lQSEVUSFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU4MS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgaVBob25lIFVTQiBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX1VTQl9ORVRfS0FMTUlBKVxcdCs9IGthbG1pYS5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19VU0JfSVBIRVRIKVxcdCs9IGlwaGV0aC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcXHQrPSBzaWVycmFfbmV0Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01OC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTk6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9DTEFTUyAgICAyNTVcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NjA6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9TVUJDTEFTUyAyNTNcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NjE6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9QUk9UTyAgICAxXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYyLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MzojZGVmaW5lIElQSEVUSF9JUF9BTElHTlxcdFxcdDJcXHQvKiBwYWRkaW5nIGF0IGZyb250IG9mIFVSQiAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02NC0vKiBPbiBpT1MgZGV2aWNlcywgTkNNIGhlYWRlcnMgaW4gUlggaGF2ZSBhIGZpeGVkIHNpemUgcmVnYXJkbGVzcyBvZiBEUEUgY291bnQ6XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjktICovXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcwOiNkZWZpbmUgSVBIRVRIX05EUDE2X01BWF9EUEVcXHQyMlxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo3MTojZGVmaW5lIElQSEVUSF9ORFAxNl9IRUFERVJfU0laRSAoc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNikgKyBcXFxcXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcyOlxcdFxcdFxcdFxcdCAgSVBIRVRIX05EUDE2X01BWF9EUEUgKiBcXFxcXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTczLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc0OiNkZWZpbmUgSVBIRVRIX05DTV9IRUFERVJfU0laRVxcdChzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSArIFxcXFxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzU6XFx0XFx0XFx0XFx0IElQSEVUSF9ORFAxNl9IRUFERVJfU0laRSlcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzY6I2RlZmluZSBJUEhFVEhfVFhfQlVGX1NJWkUgICAgICBFVEhfRlJBTUVfTEVOXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc3OiNkZWZpbmUgSVBIRVRIX1JYX0JVRl9TSVpFX0xFR0FDWSAoSVBIRVRIX0lQX0FMSUdOICsgRVRIX0ZSQU1FX0xFTilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Nzg6I2RlZmluZSBJUEhFVEhfUlhfQlVGX1NJWkVfTkNNXFx0NjU1MzZcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNzktXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjgwOiNkZWZpbmUgSVBIRVRIX1RYX1RJTUVPVVQgICAgICAgKDUgKiBIWilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtODEtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjgyOiNkZWZpbmUgSVBIRVRIX0lOVEZOVU0gICAgICAgICAgMlxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4MzojZGVmaW5lIElQSEVUSF9BTFRfSU5URk5VTSAgICAgIDFcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtODQtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjg1OiNkZWZpbmUgSVBIRVRIX0NUUkxfRU5EUCAgICAgICAgMHgwMFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NjojZGVmaW5lIElQSEVUSF9DVFJMX0JVRl9TSVpFICAgIDB4NDBcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6ODc6I2RlZmluZSBJUEhFVEhfQ1RSTF9USU1FT1VUICAgICAoNSAqIEhaKVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy04OC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6ODk6I2RlZmluZSBJUEhFVEhfQ01EX0dFVF9NQUNBRERSICAgMHgwMFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5MDojZGVmaW5lIElQSEVUSF9DTURfRU5BQkxFX05DTSAgICAweDA0XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjkxOiNkZWZpbmUgSVBIRVRIX0NNRF9DQVJSSUVSX0NIRUNLIDB4NDVcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtOTItXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjkzOiNkZWZpbmUgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDEgKiBIWilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6OTQ6I2RlZmluZSBJUEhFVEhfQ0FSUklFUl9PTiAgICAgICAweDA0XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTk1LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz05Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXBoZXRoX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk3OlxcdHsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oVVNCX1ZFTkRPUl9BUFBMRSwgSVBIRVRIX1VTQklOVEZfQ0xBU1MsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk4OlxcdFxcdFxcdFxcdFxcdElQSEVUSF9VU0JJTlRGX1NVQkNMQVNTLFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5OTpcXHRcXHRcXHRcXHRcXHRJUEhFVEhfVVNCSU5URl9QUk9UTykgfSxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTAwLVxcdHsgfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTEyMz1zdGF0aWMgaW50IGlwaGV0aF9hbGxvY191cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTM3LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxMzg6XFx0dHhfYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGlwaG9uZS1cXHUwMDNldWRldiwgSVBIRVRIX1RYX0JVRl9TSVpFLFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xMzktXFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwsIFxcdTAwMjZ0eF91cmItXFx1MDAzZXRyYW5zZmVyX2RtYSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTU1LWZyZWVfdHhfYnVmOlxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNTY6XFx0dXNiX2ZyZWVfY29oZXJlbnQoaXBob25lLVxcdTAwM2V1ZGV2LCBJUEhFVEhfVFhfQlVGX1NJWkUsIHR4X2J1ZixcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTU3LVxcdFxcdFxcdCAgdHhfdXJiLVxcdTAwM2V0cmFuc2Zlcl9kbWEpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTE2Nj1zdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTY5LVxcdFxcdFxcdCAgaXBob25lLVxcdTAwM2VyeF91cmItXFx1MDAzZXRyYW5zZmVyX2RtYSk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE3MDpcXHR1c2JfZnJlZV9jb2hlcmVudChpcGhvbmUtXFx1MDAzZXVkZXYsIElQSEVUSF9UWF9CVUZfU0laRSwgaXBob25lLVxcdTAwM2V0eF9idWYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3MS1cXHRcXHRcXHQgIGlwaG9uZS1cXHUwMDNldHhfdXJiLVxcdTAwM2V0cmFuc2Zlcl9kbWEpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTIwMz1zdGF0aWMgaW50IGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrX2xlZ2FjeShzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjEwLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMTE6XFx0aWYgKHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCBcXHUwMDNjPSBJUEhFVEhfSVBfQUxJR04pIHtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjEyLVxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjE0LVxcdH1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE1OlxcdGxlbiA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCAtIElQSEVUSF9JUF9BTElHTjtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE2OlxcdGJ1ZiA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyICsgSVBIRVRIX0lQX0FMSUdOO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMTctXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MjI5PXN0YXRpYyBpbnQgaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbmNtKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNDAtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI0MTpcXHRpZiAodXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoIFxcdTAwM2MgSVBIRVRIX05DTV9IRUFERVJfU0laRSkge1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNDItXFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNTYtXFx0ZHBlID0gbmNtMC1cXHUwMDNlZHBlMTY7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI1NzpcXHRmb3IgKGludCBkcGVfaSA9IDA7IGRwZV9pIFxcdTAwM2MgSVBIRVRIX05EUDE2X01BWF9EUEU7ICsrZHBlX2ksICsrZHBlKSB7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI1OC1cXHRcXHRkZ19pZHggPSBsZTE2X3RvX2NwdShkcGUtXFx1MDAzZXdEYXRhZ3JhbUluZGV4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNjYtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI2NzpcXHRcXHRpZiAoZGdfaWR4IFxcdTAwM2MgSVBIRVRIX05DTV9IRUFERVJfU0laRSB8fFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNjgtXFx0XFx0ICAgIGRnX2lkeCBcXHUwMDNlPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGggfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0zNjI9c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zNzEtXFx0cmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM3MjpcXHRcXHRcXHR1c2JfcmN2Y3RybHBpcGUodWRldiwgSVBIRVRIX0NUUkxfRU5EUCksXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM3MzpcXHRcXHRcXHRJUEhFVEhfQ01EX0NBUlJJRVJfQ0hFQ0ssIC8qIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc0LVxcdFxcdFxcdDB4YzAsIC8qIHJlcXVlc3QgdHlwZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM3Ni1cXHRcXHRcXHQweDAyLCAvKiBpbmRleCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VjdHJsX2J1ZiwgSVBIRVRIX0NUUkxfQlVGX1NJWkUsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM3ODpcXHRcXHRcXHRJUEhFVEhfQ1RSTF9USU1FT1VUKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc5LVxcdGlmIChyZXR2YWwgXFx1MDAzYz0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM4NC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mzg1OlxcdGlmICgocmV0dmFsID09IDEgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VjdHJsX2J1ZlswXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikgfHxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mzg2OlxcdCAgICAocmV0dmFsIFxcdTAwM2U9IDIgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VjdHJsX2J1ZlsxXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikpIHtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzg3LVxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZGV2LVxcdTAwM2VuZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTM5Nz1zdGF0aWMgdm9pZCBpcGhldGhfY2Fycmllcl9jaGVja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDItXFx0aXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQwMzpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrLCBJUEhFVEhfQ0FSUklFUl9DSEVDS19USU1FT1VUKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDA0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00MDY9c3RhdGljIGludCBpcGhldGhfZ2V0X21hY2FkZHIoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTItXFx0cmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxMzpcXHRcXHRcXHRcXHQgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIElQSEVUSF9DVFJMX0VORFApLFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MTQ6XFx0XFx0XFx0XFx0IElQSEVUSF9DTURfR0VUX01BQ0FERFIsIC8qIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDE1LVxcdFxcdFxcdFxcdCAweGMwLCAvKiByZXF1ZXN0IHR5cGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTgtXFx0XFx0XFx0XFx0IGRldi1cXHUwMDNlY3RybF9idWYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxOTpcXHRcXHRcXHRcXHQgSVBIRVRIX0NUUkxfQlVGX1NJWkUsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQyMDpcXHRcXHRcXHRcXHQgSVBIRVRIX0NUUkxfVElNRU9VVCk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQyMS1cXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQzNz1zdGF0aWMgaW50IGlwaGV0aF9lbmFibGVfbmNtKHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDQyLVxcdHJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0NDM6XFx0XFx0XFx0XFx0IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCBJUEhFVEhfQ1RSTF9FTkRQKSxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDQ0OlxcdFxcdFxcdFxcdCBJUEhFVEhfQ01EX0VOQUJMRV9OQ00sIC8qIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDQ1LVxcdFxcdFxcdFxcdCAweDQxLCAvKiByZXF1ZXN0IHR5cGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NDktXFx0XFx0XFx0XFx0IDAsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ1MDpcXHRcXHRcXHRcXHQgSVBIRVRIX0NUUkxfVElNRU9VVCk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ1MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00Nzc9c3RhdGljIGludCBpcGhldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ4Mi1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDgzOlxcdHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIElQSEVUSF9JTlRGTlVNLCBJUEhFVEhfQUxUX0lOVEZOVU0pO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00ODQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDkzLVxcdGVuYWJsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDk0OlxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00OTUtXFx0cmV0dXJuIHJldHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz01MTI9c3RhdGljIG5ldGRldl90eF90IGlwaGV0aF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxOC1cXHQvKiBQYXJhbm9pZCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1MTk6XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgSVBIRVRIX1RYX0JVRl9TSVpFKSB7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUyMC1cXHRcXHRXQVJOKDEsIFxcXCIlczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXFxcblxcXCIsIF9fZnVuY19fLCBza2ItXFx1MDAzZWxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTc4PXN0YXRpYyBpbnQgaXBoZXRoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU5Mi1cXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2aXBoZXRoX25ldGRldl9vcHM7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU5MzpcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gSVBIRVRIX1RYX1RJTUVPVVQ7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU5NC1cXHRzdHJzY3B5KG5ldGRldi1cXHUwMDNlbmFtZSwgXFxcImV0aCVkXFxcIiwgc2l6ZW9mKG5ldGRldi1cXHUwMDNlbmFtZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwMC1cXHRkZXYtXFx1MDAzZWNvbmZpcm1lZF9wYWlyaW5nID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjYwMTpcXHRkZXYtXFx1MDAzZXJ4X2J1Zl9sZW4gPSBJUEhFVEhfUlhfQlVGX1NJWkVfTEVHQUNZO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MDItXFx0ZGV2LVxcdTAwM2VyY3ZidWxrX2NhbGxiYWNrID0gaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbGVnYWN5O1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MDMtXFx0LyogU2V0IHVwIGVuZHBvaW50cyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MDQ6XFx0aGludGYgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwgSVBIRVRIX0FMVF9JTlRGTlVNKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjA1LVxcdGlmIChoaW50ZiA9PSBOVUxMKSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjIwLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MjE6XFx0ZGV2LVxcdTAwM2VjdHJsX2J1ZiA9IGttYWxsb2MoSVBIRVRIX0NUUkxfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MjItXFx0aWYgKGRldi1cXHUwMDNlY3RybF9idWYgPT0gTlVMTCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYzMi1cXHRpZiAoIXJldHZhbCkge1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MzM6XFx0XFx0ZGV2LVxcdTAwM2VyeF9idWZfbGVuID0gSVBIRVRIX1JYX0JVRl9TSVpFX05DTTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjM0LVxcdFxcdGRldi1cXHUwMDNlcmN2YnVsa19jYWxsYmFjayA9IGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrX25jbTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzM6NTcuOTAzOTAwMTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5Mzc0MDU4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgVVNCX0lQSEVUSCBpbiB0aGUgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgVVNCX0lQSEVUSGAgaXMgaGFuZGxlZCwgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgVVNCX0lQSEVUSGAuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaXQncyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIG9yIGhlbHAgdGV4dCBtaWdodCByZXZlYWwgYWJvdXQgaXRzIGludGVuZGVkIHVzZSBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGF0IGhhbmQgYW5kIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9uIG9mIGl0cyBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM0OjE4Ljg0MTMwODM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NTpcXHRcXHRoZWxwXFxuIDU3NjpcXHRcXHQgIENob29zZSB0aGlzIG9wdGlvbiB0byBzdXBwb3J0IHRoZSBQaG9uZXQgaW50ZXJmYWNlIHRvIGEgTm9raWFcXG4gNTc3OlxcdFxcdCAgY2VsbHVsYXIgbW9kZW0sIGFzIGZvdW5kIG9uIG1vc3QgTm9raWEgaGFuZHNldHMgd2l0aCB0aGVcXG4gNTc4OlxcdFxcdCAgXFxcIlBDIHN1aXRlXFxcIiBVU0IgcHJvZmlsZS5cXG4gNTc5OlxcdFxcbiA1ODA6XFx0Y29uZmlnIFVTQl9JUEhFVEhcXG4gNTgxOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRyaXZlclxcXCJcXG4gNTgyOlxcdFxcdGRlZmF1bHQgblxcbiA1ODM6XFx0XFx0aGVscFxcbiA1ODQ6XFx0XFx0ICBNb2R1bGUgdXNlZCB0byBzaGFyZSBJbnRlcm5ldCBjb25uZWN0aW9uICh0ZXRoZXJpbmcpIGZyb20geW91clxcbiA1ODU6XFx0XFx0ICBpUGhvbmUgdG8geW91ciBzeXN0ZW0uXFxuIDU4NjpcXHRcXHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIGNvcnJlc3BvbmRpbmcgdXNlcnNwYWNlIGxpYnJhcnkvcHJvZ3JhbVxcbiA1ODc6XFx0XFx0ICB0byBwYWlyIHlvdXIgZGV2aWNlIHdpdGggeW91ciBzeXN0ZW0sIGZvciBleGFtcGxlIHVzYm11eGRcXG4gNTg4OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZ2l0aHViLmNvbS9saWJpbW9iaWxlZGV2aWNlL3VzYm11eGRcXHUwMDNlLlxcbiA1ODk6XFx0XFxuIDU5MDpcXHRjb25maWcgVVNCX1NJRVJSQV9ORVRcXG4gNTkxOlxcdFxcdHRyaXN0YXRlIFxcXCJVU0ItdG8tV1dBTiBEcml2ZXIgZm9yIFNpZXJyYSBXaXJlbGVzcyBtb2RlbXNcXFwiXFxuIDU5MjpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gNTkzOlxcdFxcdGhlbHBcXG4gNTk0OlxcdFxcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2llcnJhIFdpcmVsZXNzIFVTQi10by1XV0FOIGRldmljZS5cXG4gNTk1OlxcdFxcbiA1OTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTk3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpZXJyYV9uZXQuXFxuIDU5ODpcXHRcXG4gNTk5OlxcdGNvbmZpZyBVU0JfVkw2MDBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzQ6MTguODQxNDQxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjYyODU5NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVVNCLUlQSEVUSCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgVVNCX0lQSEVUSGAgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBwbGFuIGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSdsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbCBsaW5lcywgcGVyaGFwcyB0aGUgZmlyc3QgNTAgb3Igc28sIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IHJlbGF0aW9uc2hpcHMuIEFsdGVybmF0aXZlbHksIGlmIHRoYXQgZG9lc24ndCB5aWVsZCBpbW1lZGlhdGUgY2xhcml0eSwgSSdsbCBnbyByaWdodCB0byB0aGUgdG9wIG9mIGJvdGggYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBhbmQsIGFzIGEgYnJvYWRlciBwZXJzcGVjdGl2ZSwgYGRyaXZlcnMvbmV0L0tjb25maWdgLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgZnJhbWV3b3JrIG9mIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNDozNC4xMDQzMDMzODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNDozNC4xMDQzNzc4NzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM0OTMzNDIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwaGV0aF9jbG9zZSBGdW5jdGlvbiBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBpcGhldGhfY2xvc2VgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gc3RvcHBpbmcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIChgbmV0aWZfc3RvcF9xdWV1ZWApLCBkaXNhYmxpbmcgYW5kIHN5bmNocm9uaXppbmcgdGhlIGNhcnJpZXIgd29yayAoYGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmNgKSwgYW5kIGtpbGxpbmcgVVJCcyAoYGlwaGV0aF9raWxsX3VyYnNgKS4gVGhpcyBpcyBhbGwgcHJldHR5IHN0YW5kYXJkIGZvciBhIG5ldHdvcmsgaW50ZXJmYWNlIHNodXRkb3duLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIHRoZSBuZXh0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kIGlzLCBkb2VzIFN5emthbGxlciBldmVuIGZ1enogVVNCIGV0aGVybmV0IGRyaXZlcnM/IEkgKnRoaW5rKiBzbywgcmlnaHQ/IEFoLCB5ZXMsIGl0IHVzZXMgUmF3IEdhZGdldCAvIER1bW15IEhDRCAvIFVTQiBlbXVsYXRpb24uIFRoYXQgc2hvdWxkIGNvdmVyIHRoaXMuIEdyZWF0LlxuXG5CdXQgbm93IEkgaGF2ZSB0byBjaGVjayB0aGUgZnV6emluZyBydWxlcy4gSSBjYW4ndCBqdXN0IGRpdmUgaW4uIExldCdzIHNlZS4uLiB0aGUgcnVsZXMgc2F5IEkgc2hvdWxkIHNraXAgcGF0Y2hlcyB0aGF0IGluY2x1ZGUgY2hhbmdlcyB3aGljaCBhcmU6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEl0IGFsc28gc2F5cyBub3QgdG8gZnV6eiBjZXJ0YWluIGRyaXZlciBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgZXRjLikgdGhhdCBvbmx5IHRyaWdnZXIgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIGRyaXZlciB1bmJpbmQuXG5cbkFscmlnaHQsIGJhY2sgdG8gYGlwaGV0aF9jbG9zZWAuIElzIHRoaXMgYSB0ZWFyZG93biBjYWxsYmFjayBsaWtlIGAucmVtb3ZlYCBvciBgLnNodXRkb3duYD8gTm8sIGl0J3Mgbm90LiBGcm9tIG1lbW9yeSwgYGlwaGV0aF9jbG9zZWAgaXMgdGhlIGBuZG9fc3RvcGAgY2FsbGJhY2sgb2YgYG5ldGRldl9vcHNgLiBTbyBpdCdzIGV4ZWN1dGVkIHdoZW4gdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IGRvd24gd2l0aCBjb21tYW5kcyBsaWtlIGBpcCBsaW5rIHNldCBkZXYgZXRoWCBkb3duYCBvciBldmVuIGBkZXZfY2xvc2VgIG9yIGBTSU9DU0lGRkxBR1NgIGlmZG93bi4gVG8gYmUgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIGxpbmtlZCB0byBgaXBoZXRoX25ldGRldl9vcHNgLiBUaGVyZWZvcmUsIGl0J3MgcHJvYmFibHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA3NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM0OjQwLjQ1MzcxNjA4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2NTpcXHR9XFxuIDU2NjpcXHRcXG4gNTY3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0ge1xcbiA1Njg6XFx0XFx0LmdldF9saW5rID0gaXBoZXRoX2V0aHRvb2xfb3BfZ2V0X2xpbmtcXG4gNTY5OlxcdH07XFxuIDU3MDpcXHRcXG4gNTcxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XFxuIDU3MjpcXHRcXHQubmRvX29wZW4gPSBpcGhldGhfb3BlbixcXG4gNTczOlxcdFxcdC5uZG9fc3RvcCA9IGlwaGV0aF9jbG9zZSxcXG4gNTc0OlxcdFxcdC5uZG9fc3RhcnRfeG1pdCA9IGlwaGV0aF90eCxcXG4gNTc1OlxcdFxcdC5uZG9fdHhfdGltZW91dCA9IGlwaGV0aF90eF90aW1lb3V0LFxcbiA1NzY6XFx0fTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIDU3OTpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDU4MDpcXHR7XFxuIDU4MTpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDU4MjpcXHRcXHRzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2luLCAqZXBfb3V0O1xcbiA1ODM6XFx0XFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaGludGY7XFxuIDU4NDpcXHRcXHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNDo0MC40NTM4NTg3NzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUzNTEzMjc2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGlwaGV0aF9raWxsX3VyYnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLCBgaXBoZXRoX2tpbGxfdXJic2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMg4oCTIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBcInVyYnMuXCIgR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJIHN1c3BlY3QgdGhhdCBcInVyYnNcIiBpcyBhIGtleSBwaWVjZSBvZiBkYXRhIG9yIGEgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdGhpcyBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gdG8gc2VlIHdoYXQgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGRvZXMuIE15IGZhbWlsaWFyaXR5IHdpdGggbmFtaW5nIGNvbnZlbnRpb25zIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBhY3Rpb24gdG8gdGVybWluYXRlLCByZW1vdmUsIG9yIHJlbmRlciBpbmVydCBzb21ldGhpbmcgcmVsYXRlZCB0byBcInVyYnMuXCIgSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM0OjU1LjgwNTE4ODkxM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MTE5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBoZXRoX2tpbGxfdXJic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTE2Nj1zdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc1LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQ5OD1zdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwNy1cXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZWNhcnJpZXJfd29yayk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjUwODpcXHRpcGhldGhfa2lsbF91cmJzKGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz02Nzc9c3RhdGljIHZvaWQgaXBoZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjgzLVxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldi1cXHUwMDNlbmV0KTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Njg0OlxcdFxcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjg1LVxcdFxcdGlwaGV0aF9mcmVlX3VyYnMoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzQ6NTUuODk3ODA1MDg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3MzYxNjU0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLi4uXG5cbioqSW5zcGVjdGluZyB0aGUgQ29udGVudHMgb2YgYGlwaGV0aF9raWxsX3VyYnNgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGFjdHVhbGx5IHdpdGhpbiBgaXBoZXRoX2tpbGxfdXJic2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wb25lbnRzLiBXaGF0J3MgdGhlIHN0cnVjdHVyZT8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZSwgYSBwcm9ncmFtLCBhIHNjcmlwdCwgb3Igd2hhdD8gV2hhdCB2YXJpYWJsZXMgYXJlIGRlZmluZWQ/IEFyZSB0aGVyZSBjYWxscyB0byBvdGhlciByb3V0aW5lcyBvciBmdW5jdGlvbnM/IE1vcmUgaW1wb3J0YW50bHksIHdoYXQgcHJvYmxlbSBpcyB0aGlzIHBhcnRpY3VsYXIgdGhpbmcgYXR0ZW1wdGluZyB0byBzb2x2ZT8gV2hhdCBpcyBpdHMgaW50ZW5kZWQgcHVycG9zZT8gS25vd2luZyB0aGF0IGNvbnRleHQgd2lsbCBjbGFyaWZ5IGFsbCBvZiBpdHMgaW5uZXIgd29ya2luZ3MuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGllY2Ugb2YgY29kZSBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjA0LjYzMzk3MzA3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc1OlxcdFxcbiAxNzY6XFx0c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbiAxNzc6XFx0e1xcbiAxNzg6XFx0XFx0dXNiX2tpbGxfdXJiKGRldi1cXHUwMDNldHhfdXJiKTtcXG4gMTc5OlxcdFxcdHVzYl9raWxsX3VyYihkZXYtXFx1MDAzZXJ4X3VyYik7XFxuIDE4MDpcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdHN0YXRpYyBpbnQgaXBoZXRoX2NvbnN1bWVfc2tiKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4gMTgzOlxcdHtcXG4gMTg0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IobGVuKTtcXG4gMTg3OlxcdFxcdGlmICghc2tiKSB7XFxuIDE4ODpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbiAxODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE5MDpcXHRcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHNrYl9wdXRfZGF0YShza2IsIGJ1ZiwgbGVuKTtcXG4gMTkzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuIDE5NDpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjA0LjYzNDA5ODIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjY4NjEzNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgRHJpdmVyIENoYW5nZSoqXG5cbk9rYXksIHNvIGBpcGhldGhfY2xvc2VgIG5vdyBpbmNsdWRlcyBhIGNhbGwgdG8gYGlwaGV0aF9raWxsX3VyYnMoZGV2KWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgdGhlIGlwaGV0aCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlICpyZWFsbHkqIHB1c2ggdGhpcz8gSXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIGFkZXF1YXRlbHkgdGVzdD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBjaGFuZ2UgbWVyaXRzIHNjcnV0aW55LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFVTQi5cblxuR29vZCBuZXdzOiB3ZSAqY2FuKiB0ZXN0IHRoaXMsIGJvdGggaW4gUUVNVSBhbmQsIGNydWNpYWxseSwgaW4gU3l6a2FsbGVyISBXZSBjYW4gdXNlIFVTQiByYXdfZ2FkZ2V0IG9yIGR1bW15X2hjZCwgb3IgbGV2ZXJhZ2UgU3l6a2FsbGVyJ3MgVVNCIGVtdWxhdGlvbi4gV2UgY2FuIGJyaW5nIHRoZSBBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRldmljZSB1cCwgZG93biwgc2VuZCBhbmQgcmVjZWl2ZSBwYWNrZXRzLiBQZXJmZWN0ISBTbywgZGVmaW5pdGVseSBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCB3ZSBuZWVkIHRvIGJ1aWxkIGEgdGVzdCBlbnZpcm9ubWVudC5cblxuRmlyc3QsIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYFVTQl9ORVRfRFJJVkVSU2AgcmVsaWVzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IE5FVGAsIGFuZCBgVVNCX0lQSEVUSGAgaXMgdW5kZXIgdGhhdCBtZW51Y29uZmlnLiBObyBhZGRpdGlvbmFsIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfSVBIRVRIYCBpdHNlbGYsIHRoYXQgSSBjYW4gc2VlLiBUaGF0J3MgZ29vZC4gU2ltcGxlLCB1c3VhbGx5IGluZGljYXRlcyB3ZSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtcy5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIGlmIGBVU0JfSVBIRVRIYCBzaG93cyB1cCBhbnl3aGVyZSBlbHNlIGluIHRoZSBLY29uZmlnIGZpbGVzIGZvciBjb250ZXh0LiBZZXAsIGp1c3QgdGhhdCBtZW51Y29uZmlnIGVudHJ5LlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHdlIHNob3VsZCBmb2N1cyBvbi4gT2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSSdtIHRoaW5raW5nIGBpcGhldGhfY2xvc2VgLCBidXQgYWxzbywgcHJvYmFibHkgYGlwaGV0aF9wcm9iZWAsIGBpcGhldGhfdHhgLCBhbmQgYGlwaGV0aF9vcGVuYC4gV2FpdCwgYGlwaGV0aF9jbG9zZWAgaXMgc3RhdGljLCBidXQgbGV0J3MgbWFrZSBzdXJlIGl0J3MgcmVmZXJlbmNlZCBpbiBgaXBoZXRoX25ldGRldl9vcHNgIChmdW5jdGlvbiBwb2ludGVycyBhcmUgbm90IGlubGluZWQpLiBHb3R0YSBiZSBzdXJlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBpcGhldGguYyBmaWxlIHRvIGVuc3VyZSBJIGRpZG4ndCBtaXNzIGFueXRoaW5nIG9idmlvdXMuIExldCdzIHNlZSBhbGwgdGhlIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYC4gVGhlbiwgd2UgY2FuIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNToxNi45MDI3MTQ3ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTExOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X10rLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTEwND1zdHJ1Y3QgaXBoZXRoX2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTIwLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxMjE6c3RhdGljIGludCBpcGhldGhfcnhfc3VibWl0KHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYsIGdmcF90IG1lbV9mbGFncyk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEyMi1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTIzOnN0YXRpYyBpbnQgaXBoZXRoX2FsbG9jX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNjUtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE2NjpzdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc1LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE4MS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTgyOnN0YXRpYyBpbnQgaXBoZXRoX2NvbnN1bWVfc2tiKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMDItXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjIwMzpzdGF0aWMgaW50IGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrX2xlZ2FjeShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIwNC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjI4LSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMjk6c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19uY20oc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI4NS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mjg2OnN0YXRpYyB2b2lkIGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zMzgtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjMzOTpzdGF0aWMgdm9pZCBpcGhldGhfc25kYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM0MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzYxLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNjI6c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zOTYtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM5NzpzdGF0aWMgdm9pZCBpcGhldGhfY2Fycmllcl9jaGVja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDUtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQwNjpzdGF0aWMgaW50IGlwaGV0aF9nZXRfbWFjYWRkcihzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQzNi1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDM3OnN0YXRpYyBpbnQgaXBoZXRoX2VuYWJsZV9uY20oc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTctXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ1ODpzdGF0aWMgaW50IGlwaGV0aF9yeF9zdWJtaXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldiwgZ2ZwX3QgbWVtX2ZsYWdzKVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ3Ni1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDc3OnN0YXRpYyBpbnQgaXBoZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00OTctXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ5ODpzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxMS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTEyOnN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01NTEtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU1MjpzdGF0aWMgdm9pZCBpcGhldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSlcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01NjAtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU2MTpzdGF0aWMgdTMyIGlwaGV0aF9ldGh0b29sX29wX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTc3LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1Nzg6c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU3OS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjc2LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2Nzc6c3RhdGljIHZvaWQgaXBoZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY3OC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NjkzPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpcGhldGhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTcwMC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzAxOm1vZHVsZV91c2JfZHJpdmVyKGlwaGV0aF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy03MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjE2Ljk5MjgzMjUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTE5OTQ3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGlwaGV0aCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcGhldGhgIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc2NydXRpbml6ZSB0aGUgY29yZSBmdW5jdGlvbnMgaW1wYWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEknbSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgbGlrZSBgaXBoZXRoX2Nsb3NlYCwgYGlwaGV0aF9vcGVuYCwgYGlwaGV0aF9wcm9iZWAsIGFuZCBgaXBoZXRoX2Rpc2Nvbm5lY3RgLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYGlwaGV0aF9jbG9zZWAsIHNwZWNpZmljYWxseSB0aGUgYWRkaXRpb24gb2YgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgLiBUaGF0J3MgYSBrZXkgZGV0YWlsOyBraWxsaW5nIFVSQnMgc3VnZ2VzdHMgdGhleSdyZSBhZGRyZXNzaW5nIHBlbmRpbmcgb3IgY29uY3VycmVudCBjb21wbGV0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBiZWluZyBjbG9zZWQuIFRoZSBpbmNsdXNpb24gb2YgYGlwaGV0aF9jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AgY29uZmlybXMgdGhpcyBhcyB0aGUgZm9jYWwgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gQSBxdWljayBjaGVjayBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGluIG9yZGVyLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYFVTQl9JUEhFVEhgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYCBhcmUgYWxsIGVuYWJsZWQuIFRoaXMgZW5zdXJlcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGFuZCBjb3JyZWN0bHkgZW5hYmxlZCBmb3IgdGVzdGluZy5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmdXp6aW5nIHBsYW46IEkgc2VlIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCdzIHB1cnBvc2U6IGl0IG1vZGlmaWVzIGEgY3JpdGljYWwgYXNwZWN0IG9mIGRyaXZlciBiZWhhdmlvciBwb3RlbnRpYWxseSBzdXNjZXB0aWJsZSB0byByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgZHVyaW5nIGludGVyZmFjZSBjbG9zdXJlLiBUaGUgYFJlYXNvbmluZ2AgbmVhdGx5IHN1bW1hcml6ZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiB0aGUgYGlwaGV0aGAgZHJpdmVyIGNhbiBiZSBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQvZW11bGF0aW9uLCBzbyBpdCdzIHBlcmZlY3RseSBzdWl0ZWQgZm9yIGZ1enppbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcnJheSBleHBsaWNpdGx5IGxpc3RzIGBpcGhldGhfY2xvc2VgLCB3aGljaCBJIGFscmVhZHkga25ldyB3YXMgaW1wb3J0YW50LiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IHZlcmlmaWVzIHRoZSBleHBlY3RlZCBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMsIGFuZCB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgIHNpZ25hbHMgdGhhdCBteSB3b3JrIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2NiwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzU6MjEuOTA0ODMwMzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjg5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfSVBIRVRIXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBoZXRoX2Nsb3NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gaXBoZXRoX2tpbGxfdXJicygpIGluIGlwaGV0aF9jbG9zZSgpIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVU0IgZW11bGF0aW9uL3Jhdy1nYWRnZXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0lQSEVUSFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaGV0aF9jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGlwaGV0aF9raWxsX3VyYnMoKSBpbiBpcGhldGhfY2xvc2UoKSB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIGVtdWxhdGlvbi9yYXctZ2FkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNToyMi4wMjYxMjg2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTY2NTkwNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzU6MjIuMDI2OTk4NTA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA5NjU3MTU1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgIGluIGBpcGhldGhfY2xvc2UoKWAgdG8gY2FuY2VsIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgYWRkcmVzc2VzIFVSQiBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdXBvbiBpbnRlcmZhY2UgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjMyOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG5pbmRleCAyYjQ5MDExNGQyMzI3Li5mMTI3YWVhYjcwMzFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbkBAIC01MDUsNiArNTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIFx0ICovXG4gXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuK1x0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzU6MjIuMDI3MDAwMDA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MDkzNDEyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGlwaGV0aCBEcml2ZXIgQ2xvc3VyZSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgYmVlbiBpbnRyb2R1Y2VkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYCBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGBpcGhldGhfa2lsbF91cmJzKGRldik7YCB3aXRoaW4gdGhlIGBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHRoZSBleGlzdGluZyBjb2RlLCBhbmQgdGhlbiBzZWUgd2hhdCB0aGlzIGFkZGl0aW9uIG1lYW5zLiBJJ2xsIHVzZSBhIGZpbGUgcmVhZGVyIHRvIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTA1IG9mIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IGZvciBgaXBoZXRoX2Nsb3NlKClgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGV5IGNob3NlIHRvIGtpbGwgdGhlIFVSQnMgYXQgY2xvc2UsIGFuZCB3aGF0IHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMsIG9yIGltcHJvdmVtZW50cyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjI3LjkzNjM0NDAyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRldi1cXHUwMDNldWRldjtcXG4gNDgxOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHR1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBJUEhFVEhfSU5URk5VTSwgSVBIRVRIX0FMVF9JTlRGTlVNKTtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0cmV0dmFsID0gaXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XFxuIDQ4NjpcXHRcXHRpZiAocmV0dmFsKVxcbiA0ODc6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0cmV0dmFsID0gaXBoZXRoX3J4X3N1Ym1pdChkZXYsIEdGUF9LRVJORUwpO1xcbiA0OTA6XFx0XFx0aWYgKHJldHZhbClcXG4gNDkxOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQ5MjpcXHRcXG4gNDkzOlxcdFxcdGVuYWJsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrKTtcXG4gNDk0OlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xcbiA0OTU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDk2OlxcdH1cXG4gNDk3OlxcdFxcbiA0OTg6XFx0c3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gNDk5OlxcdHtcXG4gNTAwOlxcdFxcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRuZXRpZl9zdG9wX3F1ZXVlKG5ldCk7XFxuIDUwMzpcXHRcXHQvKiBBIFRYIFVSQiBjYW4gc3RpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBhZnRlciB0aGlzIHBvaW50IGFuZFxcbiA1MDQ6XFx0XFx0ICogdHJ5IHRvIHJlLWFybSB0aGUgY2FycmllciB3b3JrLiBEaXNhYmxlIGl0IGluc3RlYWQgb2YgY2FuY2VsbGluZ1xcbiA1MDU6XFx0XFx0ICogaXQsIHNvIHRoYXQgc3VjaCBhIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpIGlzIGEgbm8tb3AuXFxuIDUwNjpcXHRcXHQgKi9cXG4gNTA3OlxcdFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrKTtcXG4gNTA4OlxcdFxcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcXG4gNTA5OlxcdFxcdHJldHVybiAwO1xcbiA1MTA6XFx0fVxcbiA1MTE6XFx0XFxuIDUxMjpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgaXBoZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuIDUxMzpcXHR7XFxuIDUxNDpcXHRcXHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4gNTE1OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVxcdTAwM2V1ZGV2O1xcbiA1MTY6XFx0XFx0aW50IHJldHZhbDtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0LyogUGFyYW5vaWQgKi9cXG4gNTE5OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIElQSEVUSF9UWF9CVUZfU0laRSkge1xcbiA1MjA6XFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IHNrYiB0b28gbGFyZ2U6ICVkIGJ5dGVzXFxcXG5cXFwiLCBfX2Z1bmNfXywgc2tiLVxcdTAwM2VsZW4pO1xcbiA1MjE6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4gNTIyOlxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIDUyMzpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiA1MjQ6XFx0XFx0fVxcbiA1MjU6XFx0XFxuIDUyNjpcXHRcXHRtZW1jcHkoZGV2LVxcdTAwM2V0eF9idWYsIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHR1c2JfZmlsbF9idWxrX3VyYihkZXYtXFx1MDAzZXR4X3VyYiwgdWRldixcXG4gNTI5OlxcdFxcdFxcdFxcdCAgdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi1cXHUwMDNlYnVsa19vdXQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNToyNy45MzY0NzI5MDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxOTg1MzE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCBhc3N1bWluZyBleHBlcnRpc2UgaW4gdGhlIHJlbGV2YW50IGZpZWxkOlxuXG4qKkludmVzdGlnYXRpbmcgYGlwaGV0aF9raWxsX3VyYnNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiwgYGlwaGV0aF9raWxsX3VyYnNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIGl0IHBlcmZvcm1zPyBJIG5lZWQgdGhlIGdyYW51bGFyIGRldGFpbHMuIEkgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnM7IEkgbmVlZCB0byBrbm93IHRoZSBleGFjdCBhbGdvcml0aG0uIE1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20g4oCTIHdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucz8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgY3JpdGljYWwuIElzIGl0IGlzb2xhdGVkIG9yIGlzIGl0IGNvcmU/IEEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIHByb2plY3Qgc2hvdWxkIHJldmVhbCBhbGwgdGhlIGNhbGwgc2l0ZXMgYW5kIHBhaW50IGEgcGljdHVyZSBvZiBpdHMgb3ZlcmFsbCBpbmZsdWVuY2UuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGl0IGNvdWxkIGJlIGEgbGluY2hwaW4gaW4gc29tZSBjcnVjaWFsIHByb2Nlc3MuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGlzIHBhcmFtb3VudCB0byBkZXRlcm1pbmluZyBpdHMgc2lnbmlmaWNhbmNlLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNTo0Mi4xMzUwMDg5NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODU5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaGV0aF9raWxsX3VyYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0xNjY9c3RhdGljIHZvaWQgaXBoZXRoX2ZyZWVfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqaXBob25lKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3NS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTc2OnN0YXRpYyB2b2lkIGlwaGV0aF9raWxsX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00OTg9c3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDctXFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmspO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1MDg6XFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDktXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9Njc3PXN0YXRpYyB2b2lkIGlwaGV0aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4My1cXHRcXHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXFx1MDAzZW5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjY4NDpcXHRcXHRpcGhldGhfa2lsbF91cmJzKGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4NS1cXHRcXHRpcGhldGhfZnJlZV91cmJzKGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjQyLjIwMzg4NjI2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzQ3MDk3MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwaGV0aF9raWxsX3VyYnNgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXBoZXRoX2tpbGxfdXJic2AuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGhhbmRsaW5nIHRoZSB0ZXJtaW5hdGlvbiBvciBjbGVhbnVwIG9mIFVSQnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gaS1waGQtZXRoIGRyaXZlciBvciByZWxhdGVkIHN5c3RlbS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRoaW5nIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycnVwdCBoYW5kbGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgc2NlbmFyaW9zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIFVSQiBwb2ludGVycywgc2hhcmVkIG1lbW9yeSBhY2Nlc3MsIG9yIGF0b21pY2l0eSBndWFyYW50ZWVzIGFyb3VuZCB0aGUgVVJCIGxpc3QuIEknbGwgbmVlZCB0byBwaW5wb2ludCBhbnkgYXJlYXMgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQvZW5hYmxlZCwgdG8gc2VlIGlmIHRoZXkgYXJlIHByb3Blcmx5IGhhbmRsZWQuIEFsc28sIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGluY29tcGxldGUgdHJhbnNhY3Rpb25zLCBlc3BlY2lhbGx5IGFueSBzaXR1YXRpb25zIHdoZXJlIGEgVVJCIGlzIHF1ZXVlZCBidXQgaXMgbm90IG1hcmtlZCB0byBhbGxvdyBzYWZlIHVubGlua2luZy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIOKAkyBhcmUgZmFpbGVkIFVSQiBzdWJtaXNzaW9ucyBoYW5kbGVkIGdyYWNlZnVsbHksIGFuZCBhcmUgcmVzb3VyY2VzIHByb3Blcmx5IGZyZWVkIGluIGFsbCBlcnJvciBwYXRocz8gSWYgdGhlcmUgYXJlIGFueSBsb2NrcywgaG93IGFyZSB0aGV5IGFjcXVpcmVkIGFuZCByZWxlYXNlZD8gQXJlIHRoZXkgZmluZS1ncmFpbmVkIGVub3VnaCwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW5kaWNhdGlvbiBvZiBhIGxlYWsgb2YgVVJCczsgaXQgaXMgYSBjcml0aWNhbCByZXNvdXJjZSBhbmQgbXVzdCBiZSBjbGVhbmVkIHVwIHByb3Blcmx5LCBvciB0aGUgc3lzdGVtIHdpbGwgY3Jhc2ggdW5kZXIgbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjQ5LjU1MDk4Nzc4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXG4gMTY2OlxcdHN0YXRpYyB2b2lkIGlwaGV0aF9mcmVlX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdHVzYl9mcmVlX2NvaGVyZW50KGlwaG9uZS1cXHUwMDNldWRldiwgaXBob25lLVxcdTAwM2VyeF9idWZfbGVuLCBpcGhvbmUtXFx1MDAzZXJ4X2J1ZixcXG4gMTY5OlxcdFxcdFxcdFxcdCAgaXBob25lLVxcdTAwM2VyeF91cmItXFx1MDAzZXRyYW5zZmVyX2RtYSk7XFxuIDE3MDpcXHRcXHR1c2JfZnJlZV9jb2hlcmVudChpcGhvbmUtXFx1MDAzZXVkZXYsIElQSEVUSF9UWF9CVUZfU0laRSwgaXBob25lLVxcdTAwM2V0eF9idWYsXFxuIDE3MTpcXHRcXHRcXHRcXHQgIGlwaG9uZS1cXHUwMDNldHhfdXJiLVxcdTAwM2V0cmFuc2Zlcl9kbWEpO1xcbiAxNzI6XFx0XFx0dXNiX2ZyZWVfdXJiKGlwaG9uZS1cXHUwMDNlcnhfdXJiKTtcXG4gMTczOlxcdFxcdHVzYl9mcmVlX3VyYihpcGhvbmUtXFx1MDAzZXR4X3VyYik7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyB2b2lkIGlwaGV0aF9raWxsX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4gMTc3OlxcdHtcXG4gMTc4OlxcdFxcdHVzYl9raWxsX3VyYihkZXYtXFx1MDAzZXR4X3VyYik7XFxuIDE3OTpcXHRcXHR1c2Jfa2lsbF91cmIoZGV2LVxcdTAwM2VyeF91cmIpO1xcbiAxODA6XFx0fVxcbiAxODE6XFx0XFxuIDE4MjpcXHRzdGF0aWMgaW50IGlwaGV0aF9jb25zdW1lX3NrYihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXFxuIDE4MzpcXHR7XFxuIDE4NDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7XFxuIDE4NzpcXHRcXHRpZiAoIXNrYikge1xcbiAxODg6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcXG4gMTg5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxOTA6XFx0XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRza2JfcHV0X2RhdGEoc2tiLCBidWYsIGxlbik7XFxuIDE5MzpcXHRcXHRza2ItXFx1MDAzZWRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAxOTQ6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVxcdTAwM2VuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNTo0OS41NTExMTE2MDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0NDE1NzQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBgaXBoZXRoX2tpbGxfdXJicyhkZXYpO2Agd2l0aGluIGBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClgLiBFc3NlbnRpYWxseSwgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIHVzaW5nIHRoZSBpcGhldGggZHJpdmVyIGlzIGNsb3NlZCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IGRvd24sIHRoaXMgZW5zdXJlcyB0aGF0IGFueSBpbi1mbGlnaHQgVHJhbnNtaXQgKFRYKSBhbmQgUmVjZWl2ZSAoUlgpIFVSQnMgYXJlIGltbWVkaWF0ZWx5IGNhbmNlbGVkIHN5bmNocm9ub3VzbHkgdXNpbmcgYHVzYl9raWxsX3VyYigpYC4gVGhpcyBpcyBnb29kLCBpdCBwcmV2ZW50cyB0aG9zZSBVUkJzIGZyb20gY29udGludWluZyB0byBydW4gb3IgY29tcGxldGUgYWZ0ZXIgdGhlIGRldmljZSBpcyBkZWFjdGl2YXRlZC4gSXQncyBhIGxpZmVjeWNsZSBmaXguIFByZXZpb3VzbHksIHRoaXMgbGFjayBvZiBjYW5jZWxsYXRpb24gY3JlYXRlZCB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIGFuZCB1bndhbnRlZCBwcm9jZXNzaW5nLCBzbyB0aGlzIGlzIGEgc29saWQgZml4LlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBLTVNBTiBzY3J1dGlueS4gSSBoYXZlIHRvIHRoaW5rIHRocm91Z2ggdGhlIHBvdGVudGlhbCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG4xLiAgKipEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSBleHBvc2VkPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC5cbjIuICAqKkRvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyoqIEFic29sdXRlbHkgbm90LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNhbGwgdG8gY2FuY2VsIFVSQnMuXG4zLiAgKipEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8qKiBOb3BlLiBKdXN0IFVSQiBjYW5jZWxsYXRpb24uXG40LiAgKipEb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMsIHBvdGVudGlhbGx5IGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnM/KiogTm8gd2F5LCB0aGlzIGp1c3QgY2xlYW5zIHVwIHBlbmRpbmcgb3BlcmF0aW9ucy5cblxuVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQg4oCTIGNsZWFuaW5nIHVwIHJlc291cmNlcy4gVGhlIGFjdHVhbCBsb2dpYyBpcyBzaW1wbGUgYW5kIGNsZWFybHkgYWRkcmVzc2VzIGEga25vd24gaXNzdWUsIHdoaWNoIEkgYXNzdW1lIGlzIGFscmVhZHkgYmVpbmcgdHJhY2tlZCBieSBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGRldGVjdG9ycy4gIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSBjb25maXJtaW5nOlxuXG4qICAgYE5lZWRzS01TQU5gOiBmYWxzZVxuKiAgIGBLTVNBTlJlYXNvbmluZ2A6IENsZWFyIGV4cGxhbmF0aW9uLCBjb250cmFzdGluZyB0aGUgYXBwbGljYXRpb24gb2YgS0FTQU4vS01TQU4uXG5cbk9rYXksIEknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNywiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNjowMi45OTI2ODg2NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgIGluIGBpcGhldGhfY2xvc2UoKWAgdG8gY2FuY2VsIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgYWRkcmVzc2VzIFVSQiBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdXBvbiBpbnRlcmZhY2UgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGlwaGV0aF9raWxsX3VyYnMoZGV2KWAgaW4gYGlwaGV0aF9jbG9zZSgpYCB0byBjYW5jZWwgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBhZGRyZXNzZXMgVVJCIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB1cG9uIGludGVyZmFjZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownlx22[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 10:17:02 +0000 UTC FinishedAt: 2026-08-31 10:36:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_IPHETH", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_IPHETH", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "4323ea57-894f-4d51-b71d-0a2d84f49f1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipheth_close" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9JUEhFVEgmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGhldGhfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBpcGhldGhfa2lsbF91cmJzKCkgaW4gaXBoZXRoX2Nsb3NlKCkgdG8gcHJvcGVybHkgdGVybWluYXRlIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIFVTQiBlbXVsYXRpb24vcmF3LWdhZGdldC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU3YmQ2MmYyZDY4MWRkY2IzYWQyZTIwYTI1MDQxM2RjN2VhMjY0NWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDozMjo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbmluZGV4IDJiNDkwMTE0ZDIzMjcuLmYxMjdhZWFiNzAzMWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguY1xuQEAgLTUwNSw2ICYjNDM7NTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIFx0ICovXG4gXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuJiM0MztcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfSVBIRVRIJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBoZXRoX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGlwaGV0aF9raWxsX3VyYnMoKSBpbiBpcGhldGhfY2xvc2UoKSB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIGVtdWxhdGlvbi9yYXctZ2FkZ2V0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEwOjMyOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCmluZGV4IDJiNDkwMTE0ZDIzMjcuLmYxMjdhZWFiNzAzMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKQEAgLTUwNSw2ICYjNDM7NTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIAkgKiBpdCwgc28gdGhhdCBzdWNoIGEgc2NoZWR1bGVfZGVsYXllZF93b3JrKCkgaXMgYSBuby1vcC4KIAkgKi8KIAlkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7ZGV2LSZndDtjYXJyaWVyX3dvcmspOwomIzQzOwlpcGhldGhfa2lsbF91cmJzKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGlwaGV0aC5jYCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB0YWtlIGEgZ29vZCwgaGFyZCBsb29rIGF0IGJvdGggdGhlIHByb3Bvc2VkIHBhdGNoIGl0c2VsZiBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhhdCBgaXBoZXRoLmNgIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSBpcyBjcnVjaWFsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4KClRvIGJlZ2luLCBJJiMzOTtsbCB1c2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcHVsbCB1cCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGNvbXBhcmUgYWdhaW5zdCBhbmQgZW5zdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvZGUgSSYjMzk7bSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaXBoZXRoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdFx0aWYgKHJldHZhbClcbiA0OTE6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiA0OTI6XHRcbiA0OTM6XHRcdGVuYWJsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG4gNDk0Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yaywgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCk7XG4gNDk1Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDQ5NjpcdH1cbiA0OTc6XHRcbiA0OTg6XHRzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIDQ5OTpcdHtcbiA1MDA6XHRcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuIDUwMTpcdFxuIDUwMjpcdFx0bmV0aWZfc3RvcF9xdWV1ZShuZXQpO1xuIDUwMzpcdFx0LyogQSBUWCBVUkIgY2FuIHN0aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYWZ0ZXIgdGhpcyBwb2ludCBhbmRcbiA1MDQ6XHRcdCAqIHRyeSB0byByZS1hcm0gdGhlIGNhcnJpZXIgd29yay4gRGlzYWJsZSBpdCBpbnN0ZWFkIG9mIGNhbmNlbGxpbmdcbiA1MDU6XHRcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIDUwNjpcdFx0ICovXG4gNTA3Olx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuIDUwODpcdFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIDUwOTpcdFx0cmV0dXJuIDA7XG4gNTEwOlx0fVxuIDUxMTpcdFxuIDUxMjpcdHN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiA1MTM6XHR7XG4gNTE0Olx0XHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiA1MTU6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVx1MDAzZXVkZXY7XG4gNTE2Olx0XHRpbnQgcmV0dmFsO1xuIDUxNzpcdFxuIDUxODpcdFx0LyogUGFyYW5vaWQgKi9cbiA1MTk6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBJUEhFVEhfVFhfQlVGX1NJWkUpIHtcbiA1MjA6XHRcdFx0V0FSTigxLCBcJiMzNDslczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXG5cJiMzNDssIF9fZnVuY19fLCBza2ItXHUwMDNlbGVuKTtcbiA1MjE6XHRcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbiA1MjI6XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiA1MjM6XHRcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA1MjQ6XHRcdH1cbiA1MjU6XHRcbiA1MjY6XHRcdG1lbWNweShkZXYtXHUwMDNldHhfYnVmLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNTI3Olx0XG4gNTI4Olx0XHR1c2JfZmlsbF9idWxrX3VyYihkZXYtXHUwMDNldHhfdXJiLCB1ZGV2LFxuIDUyOTpcdFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi1cdTAwM2VidWxrX291dCksXG4gNTMwOlx0XHRcdFx0ICBkZXYtXHUwMDNldHhfYnVmLCBza2ItXHUwMDNlbGVuLFxuIDUzMTpcdFx0XHRcdCAgaXBoZXRoX3NuZGJ1bGtfY2FsbGJhY2ssXG4gNTMyOlx0XHRcdFx0ICBkZXYpO1xuIDUzMzpcdFx0ZGV2LVx1MDAzZXR4X3VyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDtcbiA1MzQ6XHRcbiA1MzU6XHRcdG5ldGlmX3N0b3BfcXVldWUobmV0KTtcbiA1MzY6XHRcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi1cdTAwM2V0eF91cmIsIEdGUF9BVE9NSUMpO1xuIDUzNzpcdFx0aWYgKHJldHZhbCkge1xuIDUzODpcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXM6IHVzYl9zdWJtaXRfdXJiOiAlZFxcblwmIzM0OyxcbiA1Mzk6XHRcdFx0XHRfX2Z1bmNfXywgcmV0dmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGlwaGV0aC5jYCBEcml2ZXIgYW5kIEVtdWxhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZSBgaXBoZXRoLmNgIGRyaXZlciBpcyBhbGwgYWJvdXQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBjb25maWd1cmF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBhY3RpdmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGV4cGxvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGVtdWxhdGluZyB0aGlzIGRyaXZlciB3aXRoaW4gUUVNVSBvciBTeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGFsb25nIHRoZSBsaW5lcyBvZiBzZWVpbmcgaWYgdGhlIHN0YW5kYXJkIFVTQiBzdGFjaywgc3BlY2lmaWNhbGx5IHRoZSByYXctZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIG9yIHBlcmhhcHMgZXZlbiBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMsIGNvdWxkIGJlIGxldmVyYWdlZCB0byBtaW1pYyBpdHMgYmVoYXZpb3IuIEl0JiMzOTtzIGFib3V0IGZpZ3VyaW5nIG91dCB0aGUgYmVzdCBhbmQgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGludGVyYWN0IHdpdGggaXQgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LgoKU28sIGZpcnN0IHRoaW5ncyBmaXJzdDogSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgZm9yICYjMzQ7aXBoZXRoJiMzNDsgZGlyZWN0bHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQSEVUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTc5LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTgwOmNvbmZpZyBVU0JfSVBIRVRIXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01ODEtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfVVNCX05FVF9LQUxNSUEpXHQmIzQzOz0ga2FsbWlhLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfVVNCX0lQSEVUSClcdCYjNDM7PSBpcGhldGgub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcdCYjNDM7PSBzaWVycmFfbmV0Lm9cbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTgtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTk6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9DTEFTUyAgICAyNTVcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MDojZGVmaW5lIElQSEVUSF9VU0JJTlRGX1NVQkNMQVNTIDI1M1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjYxOiNkZWZpbmUgSVBIRVRIX1VTQklOVEZfUFJPVE8gICAgMVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYyLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjYzOiNkZWZpbmUgSVBIRVRIX0lQX0FMSUdOXHRcdDJcdC8qIHBhZGRpbmcgYXQgZnJvbnQgb2YgVVJCICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjQtLyogT24gaU9TIGRldmljZXMsIE5DTSBoZWFkZXJzIGluIFJYIGhhdmUgYSBmaXhlZCBzaXplIHJlZ2FyZGxlc3Mgb2YgRFBFIGNvdW50OlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02OS0gKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo3MDojZGVmaW5lIElQSEVUSF9ORFAxNl9NQVhfRFBFXHQyMlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcxOiNkZWZpbmUgSVBIRVRIX05EUDE2X0hFQURFUl9TSVpFIChzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2KSAmIzQzOyBcXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcyOlx0XHRcdFx0ICBJUEhFVEhfTkRQMTZfTUFYX0RQRSAqIFxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNzMtXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc0OiNkZWZpbmUgSVBIRVRIX05DTV9IRUFERVJfU0laRVx0KHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpICYjNDM7IFxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzU6XHRcdFx0XHQgSVBIRVRIX05EUDE2X0hFQURFUl9TSVpFKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc2OiNkZWZpbmUgSVBIRVRIX1RYX0JVRl9TSVpFICAgICAgRVRIX0ZSQU1FX0xFTlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc3OiNkZWZpbmUgSVBIRVRIX1JYX0JVRl9TSVpFX0xFR0FDWSAoSVBIRVRIX0lQX0FMSUdOICYjNDM7IEVUSF9GUkFNRV9MRU4pXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Nzg6I2RlZmluZSBJUEhFVEhfUlhfQlVGX1NJWkVfTkNNXHQ2NTUzNlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjgwOiNkZWZpbmUgSVBIRVRIX1RYX1RJTUVPVVQgICAgICAgKDUgKiBIWilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy04MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4MjojZGVmaW5lIElQSEVUSF9JTlRGTlVNICAgICAgICAgIDJcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4MzojZGVmaW5lIElQSEVUSF9BTFRfSU5URk5VTSAgICAgIDFcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy04NC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NTojZGVmaW5lIElQSEVUSF9DVFJMX0VORFAgICAgICAgIDB4MDBcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NjojZGVmaW5lIElQSEVUSF9DVFJMX0JVRl9TSVpFICAgIDB4NDBcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NzojZGVmaW5lIElQSEVUSF9DVFJMX1RJTUVPVVQgICAgICg1ICogSFopXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtODgtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6ODk6I2RlZmluZSBJUEhFVEhfQ01EX0dFVF9NQUNBRERSICAgMHgwMFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjkwOiNkZWZpbmUgSVBIRVRIX0NNRF9FTkFCTEVfTkNNICAgIDB4MDRcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5MTojZGVmaW5lIElQSEVUSF9DTURfQ0FSUklFUl9DSEVDSyAweDQ1XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtOTItXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6OTM6I2RlZmluZSBJUEhFVEhfQ0FSUklFUl9DSEVDS19USU1FT1VUIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMSAqIEhaKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk0OiNkZWZpbmUgSVBIRVRIX0NBUlJJRVJfT04gICAgICAgMHgwNFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTk1LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcGhldGhfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5NzpcdHsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oVVNCX1ZFTkRPUl9BUFBMRSwgSVBIRVRIX1VTQklOVEZfQ0xBU1MsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6OTg6XHRcdFx0XHRcdElQSEVUSF9VU0JJTlRGX1NVQkNMQVNTLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk5Olx0XHRcdFx0XHRJUEhFVEhfVVNCSU5URl9QUk9UTykgfSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xMDAtXHR7IH1cbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MTIzPXN0YXRpYyBpbnQgaXBoZXRoX2FsbG9jX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTM3LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjEzODpcdHR4X2J1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChpcGhvbmUtXHUwMDNldWRldiwgSVBIRVRIX1RYX0JVRl9TSVpFLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEzOS1cdFx0XHRcdCAgICBHRlBfS0VSTkVMLCBcdTAwMjZ0eF91cmItXHUwMDNldHJhbnNmZXJfZG1hKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTU1LWZyZWVfdHhfYnVmOlxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE1NjpcdHVzYl9mcmVlX2NvaGVyZW50KGlwaG9uZS1cdTAwM2V1ZGV2LCBJUEhFVEhfVFhfQlVGX1NJWkUsIHR4X2J1ZixcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNTctXHRcdFx0ICB0eF91cmItXHUwMDNldHJhbnNmZXJfZG1hKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MTY2PXN0YXRpYyB2b2lkIGlwaGV0aF9mcmVlX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTY5LVx0XHRcdCAgaXBob25lLVx1MDAzZXJ4X3VyYi1cdTAwM2V0cmFuc2Zlcl9kbWEpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE3MDpcdHVzYl9mcmVlX2NvaGVyZW50KGlwaG9uZS1cdTAwM2V1ZGV2LCBJUEhFVEhfVFhfQlVGX1NJWkUsIGlwaG9uZS1cdTAwM2V0eF9idWYsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTcxLVx0XHRcdCAgaXBob25lLVx1MDAzZXR4X3VyYi1cdTAwM2V0cmFuc2Zlcl9kbWEpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0yMDM9c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19sZWdhY3koc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMTAtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjExOlx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIFx1MDAzYz0gSVBIRVRIX0lQX0FMSUdOKSB7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjEyLVx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMTQtXHR9XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE1Olx0bGVuID0gdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGggLSBJUEhFVEhfSVBfQUxJR047XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE2Olx0YnVmID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciAmIzQzOyBJUEhFVEhfSVBfQUxJR047XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjE3LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0yMjk9c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19uY20oc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNDAtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjQxOlx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIFx1MDAzYyBJUEhFVEhfTkNNX0hFQURFUl9TSVpFKSB7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjQyLVx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNTYtXHRkcGUgPSBuY20wLVx1MDAzZWRwZTE2O1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI1NzpcdGZvciAoaW50IGRwZV9pID0gMDsgZHBlX2kgXHUwMDNjIElQSEVUSF9ORFAxNl9NQVhfRFBFOyAmIzQzOyYjNDM7ZHBlX2ksICYjNDM7JiM0MztkcGUpIHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNTgtXHRcdGRnX2lkeCA9IGxlMTZfdG9fY3B1KGRwZS1cdTAwM2V3RGF0YWdyYW1JbmRleCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI2Ni1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyNjc6XHRcdGlmIChkZ19pZHggXHUwMDNjIElQSEVUSF9OQ01fSEVBREVSX1NJWkUgfHxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNjgtXHRcdCAgICBkZ19pZHggXHUwMDNlPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCB8fFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0zNjI9c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzcxLVx0cmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MzcyOlx0XHRcdHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCBJUEhFVEhfQ1RSTF9FTkRQKSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzM6XHRcdFx0SVBIRVRIX0NNRF9DQVJSSUVSX0NIRUNLLCAvKiByZXF1ZXN0ICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc0LVx0XHRcdDB4YzAsIC8qIHJlcXVlc3QgdHlwZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zNzYtXHRcdFx0MHgwMiwgLyogaW5kZXggKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzc6XHRcdFx0ZGV2LVx1MDAzZWN0cmxfYnVmLCBJUEhFVEhfQ1RSTF9CVUZfU0laRSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzg6XHRcdFx0SVBIRVRIX0NUUkxfVElNRU9VVCk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc5LVx0aWYgKHJldHZhbCBcdTAwM2M9IDApIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzg0LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM4NTpcdGlmICgocmV0dmFsID09IDEgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VjdHJsX2J1ZlswXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikgfHxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozODY6XHQgICAgKHJldHZhbCBcdTAwM2U9IDIgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VjdHJsX2J1ZlsxXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikpIHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zODctXHRcdG5ldGlmX2NhcnJpZXJfb24oZGV2LVx1MDAzZW5ldCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTM5Nz1zdGF0aWMgdm9pZCBpcGhldGhfY2Fycmllcl9jaGVja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDAyLVx0aXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDAzOlx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQwNC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQwNj1zdGF0aWMgaW50IGlwaGV0aF9nZXRfbWFjYWRkcihzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTItXHRyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codWRldixcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MTM6XHRcdFx0XHQgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIElQSEVUSF9DVFJMX0VORFApLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxNDpcdFx0XHRcdCBJUEhFVEhfQ01EX0dFVF9NQUNBRERSLCAvKiByZXF1ZXN0ICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDE1LVx0XHRcdFx0IDB4YzAsIC8qIHJlcXVlc3QgdHlwZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTgtXHRcdFx0XHQgZGV2LVx1MDAzZWN0cmxfYnVmLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxOTpcdFx0XHRcdCBJUEhFVEhfQ1RSTF9CVUZfU0laRSxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MjA6XHRcdFx0XHQgSVBIRVRIX0NUUkxfVElNRU9VVCk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDIxLVx0aWYgKHJldHZhbCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00Mzc9c3RhdGljIGludCBpcGhldGhfZW5hYmxlX25jbShzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NDItXHRyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codWRldixcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0NDM6XHRcdFx0XHQgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIElQSEVUSF9DVFJMX0VORFApLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ0NDpcdFx0XHRcdCBJUEhFVEhfQ01EX0VOQUJMRV9OQ00sIC8qIHJlcXVlc3QgKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NDUtXHRcdFx0XHQgMHg0MSwgLyogcmVxdWVzdCB0eXBlICovXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ0OS1cdFx0XHRcdCAwLFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ1MDpcdFx0XHRcdCBJUEhFVEhfQ1RSTF9USU1FT1VUKTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTEtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQ3Nz1zdGF0aWMgaW50IGlwaGV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ4Mi1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0ODM6XHR1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBJUEhFVEhfSU5URk5VTSwgSVBIRVRIX0FMVF9JTlRGTlVNKTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00ODQtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ5My1cdGVuYWJsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDk0Olx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ5NS1cdHJldHVybiByZXR2YWw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTUxMj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBoZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxOC1cdC8qIFBhcmFub2lkICovXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTE5Olx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIElQSEVUSF9UWF9CVUZfU0laRSkge1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUyMC1cdFx0V0FSTigxLCBcJiMzNDslczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXG5cJiMzNDssIF9fZnVuY19fLCBza2ItXHUwMDNlbGVuKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTc4PXN0YXRpYyBpbnQgaXBoZXRoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01OTItXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmlwaGV0aF9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU5MzpcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IElQSEVUSF9UWF9USU1FT1VUO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU5NC1cdHN0cnNjcHkobmV0ZGV2LVx1MDAzZW5hbWUsIFwmIzM0O2V0aCVkXCYjMzQ7LCBzaXplb2YobmV0ZGV2LVx1MDAzZW5hbWUpKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjAwLVx0ZGV2LVx1MDAzZWNvbmZpcm1lZF9wYWlyaW5nID0gZmFsc2U7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NjAxOlx0ZGV2LVx1MDAzZXJ4X2J1Zl9sZW4gPSBJUEhFVEhfUlhfQlVGX1NJWkVfTEVHQUNZO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwMi1cdGRldi1cdTAwM2VyY3ZidWxrX2NhbGxiYWNrID0gaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbGVnYWN5O1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwMy1cdC8qIFNldCB1cCBlbmRwb2ludHMgKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MDQ6XHRoaW50ZiA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBJUEhFVEhfQUxUX0lOVEZOVU0pO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwNS1cdGlmIChoaW50ZiA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYyMC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MjE6XHRkZXYtXHUwMDNlY3RybF9idWYgPSBrbWFsbG9jKElQSEVUSF9DVFJMX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MjItXHRpZiAoZGV2LVx1MDAzZWN0cmxfYnVmID09IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjMyLVx0aWYgKCFyZXR2YWwpIHtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MzM6XHRcdGRldi1cdTAwM2VyeF9idWZfbGVuID0gSVBIRVRIX1JYX0JVRl9TSVpFX05DTTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MzQtXHRcdGRldi1cdTAwM2VyY3ZidWxrX2NhbGxiYWNrID0gaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbmNtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIFVTQl9JUEhFVEggaW4gdGhlIEtjb25maWcqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBVU0JfSVBIRVRIYCBpcyBoYW5kbGVkLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzZWN0aW9uIHJlbGF0ZWQgdG8gYFVTQl9JUEhFVEhgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGl0JiMzOTtzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgb3IgaGVscCB0ZXh0IG1pZ2h0IHJldmVhbCBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYXQgaGFuZCBhbmQgZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb24gb2YgaXRzIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NTpcdFx0aGVscFxuIDU3NjpcdFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc3VwcG9ydCB0aGUgUGhvbmV0IGludGVyZmFjZSB0byBhIE5va2lhXG4gNTc3Olx0XHQgIGNlbGx1bGFyIG1vZGVtLCBhcyBmb3VuZCBvbiBtb3N0IE5va2lhIGhhbmRzZXRzIHdpdGggdGhlXG4gNTc4Olx0XHQgIFwmIzM0O1BDIHN1aXRlXCYjMzQ7IFVTQiBwcm9maWxlLlxuIDU3OTpcdFxuIDU4MDpcdGNvbmZpZyBVU0JfSVBIRVRIXG4gNTgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuIDU4MjpcdFx0ZGVmYXVsdCBuXG4gNTgzOlx0XHRoZWxwXG4gNTg0Olx0XHQgIE1vZHVsZSB1c2VkIHRvIHNoYXJlIEludGVybmV0IGNvbm5lY3Rpb24gKHRldGhlcmluZykgZnJvbSB5b3VyXG4gNTg1Olx0XHQgIGlQaG9uZSB0byB5b3VyIHN5c3RlbS5cbiA1ODY6XHRcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgY29ycmVzcG9uZGluZyB1c2Vyc3BhY2UgbGlicmFyeS9wcm9ncmFtXG4gNTg3Olx0XHQgIHRvIHBhaXIgeW91ciBkZXZpY2Ugd2l0aCB5b3VyIHN5c3RlbSwgZm9yIGV4YW1wbGUgdXNibXV4ZFxuIDU4ODpcdFx0ICBcdTAwM2NodHRwczovL2dpdGh1Yi5jb20vbGliaW1vYmlsZWRldmljZS91c2JtdXhkXHUwMDNlLlxuIDU4OTpcdFxuIDU5MDpcdGNvbmZpZyBVU0JfU0lFUlJBX05FVFxuIDU5MTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXCYjMzQ7XG4gNTkyOlx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA1OTM6XHRcdGhlbHBcbiA1OTQ6XHRcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2llcnJhIFdpcmVsZXNzIFVTQi10by1XV0FOIGRldmljZS5cbiA1OTU6XHRcbiA1OTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTk3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaWVycmFfbmV0LlxuIDU5ODpcdFxuIDU5OTpcdGNvbmZpZyBVU0JfVkw2MDBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVU0ItSVBIRVRIIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9JUEhFVEhgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IHBsYW4gaXMgdG8gc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbCBsaW5lcywgcGVyaGFwcyB0aGUgZmlyc3QgNTAgb3Igc28sIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IHJlbGF0aW9uc2hpcHMuIEFsdGVybmF0aXZlbHksIGlmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgaW1tZWRpYXRlIGNsYXJpdHksIEkmIzM5O2xsIGdvIHJpZ2h0IHRvIHRoZSB0b3Agb2YgYm90aCBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGFuZCwgYXMgYSBicm9hZGVyIHBlcnNwZWN0aXZlLCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBmcmFtZXdvcmsgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuICAyMTpcdFx0ICBCZWxraW4gRjVVMDExXG4gIDIyOlx0XHQgIEJlbGtpbiBGNVUxMTFcbiAgMjM6XHRcdCAgQ0FUQyBOZXRNYXRlXG4gIDI0Olx0XHQgIENBVEMgTmV0TWF0ZSBJSVxuICAyNTpcdFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcbiAgMjY6XHRcbiAgMjc6XHRcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcbiAgMjg6XHRcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxuICAyOTpcdFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVVNCX0tBV0VUSFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XG4gIDM4Olx0XHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxuICAzOTpcdFx0ICAzQ29tIDNDMTkyNTBcbiAgNDA6XHRcdCAgQURTIFVTQi0xMEJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpcGhldGhfY2xvc2UgRnVuY3Rpb24gZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBpcGhldGhfY2xvc2VgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgZnVuY3Rpb24gcmVsYXRlZCB0byBzdG9wcGluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgKGBuZXRpZl9zdG9wX3F1ZXVlYCksIGRpc2FibGluZyBhbmQgc3luY2hyb25pemluZyB0aGUgY2FycmllciB3b3JrIChgZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luY2ApLCBhbmQga2lsbGluZyBVUkJzIChgaXBoZXRoX2tpbGxfdXJic2ApLiBUaGlzIGlzIGFsbCBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgbmV0d29yayBpbnRlcmZhY2Ugc2h1dGRvd24uCgpOb3csIHdhaXQgYSBtaW51dGUsIHRoZSBuZXh0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kIGlzLCBkb2VzIFN5emthbGxlciBldmVuIGZ1enogVVNCIGV0aGVybmV0IGRyaXZlcnM/IEkgKnRoaW5rKiBzbywgcmlnaHQ/IEFoLCB5ZXMsIGl0IHVzZXMgUmF3IEdhZGdldCAvIER1bW15IEhDRCAvIFVTQiBlbXVsYXRpb24uIFRoYXQgc2hvdWxkIGNvdmVyIHRoaXMuIEdyZWF0LgoKQnV0IG5vdyBJIGhhdmUgdG8gY2hlY2sgdGhlIGZ1enppbmcgcnVsZXMuIEkgY2FuJiMzOTt0IGp1c3QgZGl2ZSBpbi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcnVsZXMgc2F5IEkgc2hvdWxkIHNraXAgcGF0Y2hlcyB0aGF0IGluY2x1ZGUgY2hhbmdlcyB3aGljaCBhcmU6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBPa2F5LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgYWxzbyBzYXlzIG5vdCB0byBmdXp6IGNlcnRhaW4gZHJpdmVyIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBldGMuKSB0aGF0IG9ubHkgdHJpZ2dlciBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZC4KCkFscmlnaHQsIGJhY2sgdG8gYGlwaGV0aF9jbG9zZWAuIElzIHRoaXMgYSB0ZWFyZG93biBjYWxsYmFjayBsaWtlIGAucmVtb3ZlYCBvciBgLnNodXRkb3duYD8gTm8sIGl0JiMzOTtzIG5vdC4gRnJvbSBtZW1vcnksIGBpcGhldGhfY2xvc2VgIGlzIHRoZSBgbmRvX3N0b3BgIGNhbGxiYWNrIG9mIGBuZXRkZXZfb3BzYC4gU28gaXQmIzM5O3MgZXhlY3V0ZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93biB3aXRoIGNvbW1hbmRzIGxpa2UgYGlwIGxpbmsgc2V0IGRldiBldGhYIGRvd25gIG9yIGV2ZW4gYGRldl9jbG9zZWAgb3IgYFNJT0NTSUZGTEFHU2AgaWZkb3duLiBUbyBiZSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBsaW5rZWQgdG8gYGlwaGV0aF9uZXRkZXZfb3BzYC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0fVxuIDU2NjpcdFxuIDU2NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0ge1xuIDU2ODpcdFx0LmdldF9saW5rID0gaXBoZXRoX2V0aHRvb2xfb3BfZ2V0X2xpbmtcbiA1Njk6XHR9O1xuIDU3MDpcdFxuIDU3MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XG4gNTcyOlx0XHQubmRvX29wZW4gPSBpcGhldGhfb3BlbixcbiA1NzM6XHRcdC5uZG9fc3RvcCA9IGlwaGV0aF9jbG9zZSxcbiA1NzQ6XHRcdC5uZG9fc3RhcnRfeG1pdCA9IGlwaGV0aF90eCxcbiA1NzU6XHRcdC5uZG9fdHhfdGltZW91dCA9IGlwaGV0aF90eF90aW1lb3V0LFxuIDU3NjpcdH07XG4gNTc3Olx0XG4gNTc4Olx0c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gNTc5Olx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuIDU4MDpcdHtcbiA1ODE6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiA1ODI6XHRcdHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaW4sICplcF9vdXQ7XG4gNTgzOlx0XHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpoaW50ZjtcbiA1ODQ6XHRcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgaXBoZXRoX2tpbGxfdXJic2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgZnVuY3Rpb24sIGBpcGhldGhfa2lsbF91cmJzYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyDigJMgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoICYjMzQ7dXJicy4mIzM0OyBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEkgc3VzcGVjdCB0aGF0ICYjMzQ7dXJicyYjMzQ7IGlzIGEga2V5IHBpZWNlIG9mIGRhdGEgb3IgYSBkYXRhIHN0cnVjdHVyZSBpbnZvbHZlZCBpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gdG8gc2VlIHdoYXQgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGRvZXMuIE15IGZhbWlsaWFyaXR5IHdpdGggbmFtaW5nIGNvbnZlbnRpb25zIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBhY3Rpb24gdG8gdGVybWluYXRlLCByZW1vdmUsIG9yIHJlbmRlciBpbmVydCBzb21ldGhpbmcgcmVsYXRlZCB0byAmIzM0O3VyYnMuJiMzNDsgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwaGV0aF9raWxsX3VyYnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaXBoZXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTE2Nj1zdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQ5OD1zdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDctXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjUwODpcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDktXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9Njc3PXN0YXRpYyB2b2lkIGlwaGV0aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02ODMtXHRcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldi1cdTAwM2VuZXQpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjY4NDpcdFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4NS1cdFx0aXBoZXRoX2ZyZWVfdXJicyhkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuLi4KCioqSW5zcGVjdGluZyB0aGUgQ29udGVudHMgb2YgYGlwaGV0aF9raWxsX3VyYnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGFjdHVhbGx5IHdpdGhpbiBgaXBoZXRoX2tpbGxfdXJic2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wb25lbnRzLiBXaGF0JiMzOTtzIHRoZSBzdHJ1Y3R1cmU/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgcHJvZ3JhbSwgYSBzY3JpcHQsIG9yIHdoYXQ/IFdoYXQgdmFyaWFibGVzIGFyZSBkZWZpbmVkPyBBcmUgdGhlcmUgY2FsbHMgdG8gb3RoZXIgcm91dGluZXMgb3IgZnVuY3Rpb25zPyBNb3JlIGltcG9ydGFudGx5LCB3aGF0IHByb2JsZW0gaXMgdGhpcyBwYXJ0aWN1bGFyIHRoaW5nIGF0dGVtcHRpbmcgdG8gc29sdmU/IFdoYXQgaXMgaXRzIGludGVuZGVkIHB1cnBvc2U/IEtub3dpbmcgdGhhdCBjb250ZXh0IHdpbGwgY2xhcmlmeSBhbGwgb2YgaXRzIGlubmVyIHdvcmtpbmdzLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzU6XHRcbiAxNzY6XHRzdGF0aWMgdm9pZCBpcGhldGhfa2lsbF91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXG4gMTc3Olx0e1xuIDE3ODpcdFx0dXNiX2tpbGxfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuIDE3OTpcdFx0dXNiX2tpbGxfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuIDE4MDpcdH1cbiAxODE6XHRcbiAxODI6XHRzdGF0aWMgaW50IGlwaGV0aF9jb25zdW1lX3NrYihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXG4gMTgzOlx0e1xuIDE4NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxODU6XHRcbiAxODY6XHRcdHNrYiA9IGRldl9hbGxvY19za2IobGVuKTtcbiAxODc6XHRcdGlmICghc2tiKSB7XG4gMTg4Olx0XHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4gMTg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE5MDpcdFx0fVxuIDE5MTpcdFxuIDE5MjpcdFx0c2tiX3B1dF9kYXRhKHNrYiwgYnVmLCBsZW4pO1xuIDE5MzpcdFx0c2tiLVx1MDAzZWRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMTk0Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIERyaXZlciBDaGFuZ2UqKgoKT2theSwgc28gYGlwaGV0aF9jbG9zZWAgbm93IGluY2x1ZGVzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgdGhlIGlwaGV0aCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlICpyZWFsbHkqIHB1c2ggdGhpcz8gSXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIGFkZXF1YXRlbHkgdGVzdD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBjaGFuZ2UgbWVyaXRzIHNjcnV0aW55LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFVTQi4KCkdvb2QgbmV3czogd2UgKmNhbiogdGVzdCB0aGlzLCBib3RoIGluIFFFTVUgYW5kLCBjcnVjaWFsbHksIGluIFN5emthbGxlciEgV2UgY2FuIHVzZSBVU0IgcmF3X2dhZGdldCBvciBkdW1teV9oY2QsIG9yIGxldmVyYWdlIFN5emthbGxlciYjMzk7cyBVU0IgZW11bGF0aW9uLiBXZSBjYW4gYnJpbmcgdGhlIEFwcGxlIGlQaG9uZSBVU0IgRXRoZXJuZXQgZGV2aWNlIHVwLCBkb3duLCBzZW5kIGFuZCByZWNlaXZlIHBhY2tldHMuIFBlcmZlY3QhIFNvLCBkZWZpbml0ZWx5IFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgd2UgbmVlZCB0byBidWlsZCBhIHRlc3QgZW52aXJvbm1lbnQuCgpGaXJzdCwgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYFVTQl9ORVRfRFJJVkVSU2AgcmVsaWVzIG9uIGBVU0IgJmFtcDsmYW1wOyBORVRgLCBhbmQgYFVTQl9JUEhFVEhgIGlzIHVuZGVyIHRoYXQgbWVudWNvbmZpZy4gTm8gYWRkaXRpb25hbCBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciBgVVNCX0lQSEVUSGAgaXRzZWxmLCB0aGF0IEkgY2FuIHNlZS4gVGhhdCYjMzk7cyBnb29kLiBTaW1wbGUsIHVzdWFsbHkgaW5kaWNhdGVzIHdlIHNob3VsZCBoYXZlIG5vIHByb2JsZW1zLgoKSSBhbHNvIG5lZWQgdG8gc2VlIGlmIGBVU0JfSVBIRVRIYCBzaG93cyB1cCBhbnl3aGVyZSBlbHNlIGluIHRoZSBLY29uZmlnIGZpbGVzIGZvciBjb250ZXh0LiBZZXAsIGp1c3QgdGhhdCBtZW51Y29uZmlnIGVudHJ5LgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBzaG91bGQgZm9jdXMgb24uIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcgYGlwaGV0aF9jbG9zZWAsIGJ1dCBhbHNvLCBwcm9iYWJseSBgaXBoZXRoX3Byb2JlYCwgYGlwaGV0aF90eGAsIGFuZCBgaXBoZXRoX29wZW5gLiBXYWl0LCBgaXBoZXRoX2Nsb3NlYCBpcyBzdGF0aWMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIHJlZmVyZW5jZWQgaW4gYGlwaGV0aF9uZXRkZXZfb3BzYCAoZnVuY3Rpb24gcG9pbnRlcnMgYXJlIG5vdCBpbmxpbmVkKS4gR290dGEgYmUgc3VyZS4KCkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGlwaGV0aC5jIGZpbGUgdG8gZW5zdXJlIEkgZGlkbiYjMzk7dCBtaXNzIGFueXRoaW5nIG9idmlvdXMuIExldCYjMzk7cyBzZWUgYWxsIHRoZSBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AuIFRoZW4sIHdlIGNhbiBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X10mIzQzOy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0xMDQ9c3RydWN0IGlwaGV0aF9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xMjAtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTIxOnN0YXRpYyBpbnQgaXBoZXRoX3J4X3N1Ym1pdChzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2LCBnZnBfdCBtZW1fZmxhZ3MpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEyMi1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxMjM6c3RhdGljIGludCBpcGhldGhfYWxsb2NfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqaXBob25lKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEyNC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE2NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNjY6c3RhdGljIHZvaWQgaXBoZXRoX2ZyZWVfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqaXBob25lKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE2Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE4MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxODI6c3RhdGljIGludCBpcGhldGhfY29uc3VtZV9za2IoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE4My17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIwMi1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMDM6c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19sZWdhY3koc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIwNC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIyOC0gKi9cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMjk6c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19uY20oc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIzMC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI4NS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyODY6c3RhdGljIHZvaWQgaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI4Ny17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTMzOC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozMzk6c3RhdGljIHZvaWQgaXBoZXRoX3NuZGJ1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM0MC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM2MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNjI6c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zNjMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zOTYtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mzk3OnN0YXRpYyB2b2lkIGlwaGV0aF9jYXJyaWVyX2NoZWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQwNS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MDY6c3RhdGljIGludCBpcGhldGhfZ2V0X21hY2FkZHIoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MzYtXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDM3OnN0YXRpYyBpbnQgaXBoZXRoX2VuYWJsZV9uY20oc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00Mzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTctXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDU4OnN0YXRpYyBpbnQgaXBoZXRoX3J4X3N1Ym1pdChzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2LCBnZnBfdCBtZW1fZmxhZ3MpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDU5LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDc2LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ3NzpzdGF0aWMgaW50IGlwaGV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDc4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDk3LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ5ODpzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ5OS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxMS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1MTI6c3RhdGljIG5ldGRldl90eF90IGlwaGV0aF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU1MS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1NTI6c3RhdGljIHZvaWQgaXBoZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdW5zaWduZWQgaW50IHR4cXVldWUpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTUzLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTYwLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU2MTpzdGF0aWMgdTMyIGlwaGV0aF9ldGh0b29sX29wX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTYyLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU3Ny1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1Nzg6c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTc5LVx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjc2LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjY3NzpzdGF0aWMgdm9pZCBpcGhldGhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02Nzgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz02OTM9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwaGV0aF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTcwMC1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo3MDE6bW9kdWxlX3VzYl9kcml2ZXIoaXBoZXRoX2RyaXZlcik7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE2NgoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlwaGV0aCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwaGV0aGAgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBzY3J1dGluaXplIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbXBhY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgbGlrZSBgaXBoZXRoX2Nsb3NlYCwgYGlwaGV0aF9vcGVuYCwgYGlwaGV0aF9wcm9iZWAsIGFuZCBgaXBoZXRoX2Rpc2Nvbm5lY3RgLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYGlwaGV0aF9jbG9zZWAsIHNwZWNpZmljYWxseSB0aGUgYWRkaXRpb24gb2YgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbDsga2lsbGluZyBVUkJzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcGVuZGluZyBvciBjb25jdXJyZW50IGNvbXBsZXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGJlaW5nIGNsb3NlZC4gVGhlIGluY2x1c2lvbiBvZiBgaXBoZXRoX2Nsb3NlYCBpbiBgRm9jdXNTeW1ib2xzYCBjb25maXJtcyB0aGlzIGFzIHRoZSBmb2NhbCBwb2ludC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gQSBxdWljayBjaGVjayBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGluIG9yZGVyLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBVU0JfSVBIRVRIYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAgYXJlIGFsbCBlbmFibGVkLiBUaGlzIGVuc3VyZXMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCBhbmQgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRlc3RpbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZ1enppbmcgcGxhbjogSSBzZWUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLiBUaGlzIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2U6IGl0IG1vZGlmaWVzIGEgY3JpdGljYWwgYXNwZWN0IG9mIGRyaXZlciBiZWhhdmlvciBwb3RlbnRpYWxseSBzdXNjZXB0aWJsZSB0byByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgZHVyaW5nIGludGVyZmFjZSBjbG9zdXJlLiBUaGUgYFJlYXNvbmluZ2AgbmVhdGx5IHN1bW1hcml6ZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiB0aGUgYGlwaGV0aGAgZHJpdmVyIGNhbiBiZSBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQvZW11bGF0aW9uLCBzbyBpdCYjMzk7cyBwZXJmZWN0bHkgc3VpdGVkIGZvciBmdXp6aW5nLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgZXhwbGljaXRseSBsaXN0cyBgaXBoZXRoX2Nsb3NlYCwgd2hpY2ggSSBhbHJlYWR5IGtuZXcgd2FzIGltcG9ydGFudC4gVGhlIGBFbmFibGVDb25maWdzYCBhcnJheSB2ZXJpZmllcyB0aGUgZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYCBzaWduYWxzIHRoYXQgbXkgd29yayBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9JUEhFVEgmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGhldGhfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gaXBoZXRoX2tpbGxfdXJicygpIGluIGlwaGV0aF9jbG9zZSgpIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVU0IgZW11bGF0aW9uL3Jhdy1nYWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9JUEhFVEgmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGhldGhfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gaXBoZXRoX2tpbGxfdXJicygpIGluIGlwaGV0aF9jbG9zZSgpIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVU0IgZW11bGF0aW9uL3Jhdy1nYWRnZXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlN2JkNjJmMmQ2ODFkZGNiM2FkMmUyMGEyNTA0MTNkYzdlYTI2NDViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTA6MzI6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKaW5kZXggMmI0OTAxMTRkMjMyNy4uZjEyN2FlYWI3MDMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwpAQCAtNTA1LDYgJiM0Mzs1MDUsNyBAQCBzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogCSAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLgogCSAqLwogCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtkZXYtJmd0O2NhcnJpZXJfd29yayk7CiYjNDM7CWlwaGV0aF9raWxsX3VyYnMoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGlwaGV0aCBEcml2ZXIgQ2xvc3VyZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGludHJvZHVjZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYGlwaGV0aF9raWxsX3VyYnMoZGV2KTtgIHdpdGhpbiB0aGUgYGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGNvZGUsIGFuZCB0aGVuIHNlZSB3aGF0IHRoaXMgYWRkaXRpb24gbWVhbnMuIEkmIzM5O2xsIHVzZSBhIGZpbGUgcmVhZGVyIHRvIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTA1IG9mIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IGZvciBgaXBoZXRoX2Nsb3NlKClgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGV5IGNob3NlIHRvIGtpbGwgdGhlIFVSQnMgYXQgY2xvc2UsIGFuZCB3aGF0IHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMsIG9yIGltcHJvdmVtZW50cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVx1MDAzZXVkZXY7XG4gNDgxOlx0XHRpbnQgcmV0dmFsID0gMDtcbiA0ODI6XHRcbiA0ODM6XHRcdHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIElQSEVUSF9JTlRGTlVNLCBJUEhFVEhfQUxUX0lOVEZOVU0pO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0cmV0dmFsID0gaXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XG4gNDg2Olx0XHRpZiAocmV0dmFsKVxuIDQ4NzpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0cmV0dmFsID0gaXBoZXRoX3J4X3N1Ym1pdChkZXYsIEdGUF9LRVJORUwpO1xuIDQ5MDpcdFx0aWYgKHJldHZhbClcbiA0OTE6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiA0OTI6XHRcbiA0OTM6XHRcdGVuYWJsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG4gNDk0Olx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yaywgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCk7XG4gNDk1Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDQ5NjpcdH1cbiA0OTc6XHRcbiA0OTg6XHRzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIDQ5OTpcdHtcbiA1MDA6XHRcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuIDUwMTpcdFxuIDUwMjpcdFx0bmV0aWZfc3RvcF9xdWV1ZShuZXQpO1xuIDUwMzpcdFx0LyogQSBUWCBVUkIgY2FuIHN0aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYWZ0ZXIgdGhpcyBwb2ludCBhbmRcbiA1MDQ6XHRcdCAqIHRyeSB0byByZS1hcm0gdGhlIGNhcnJpZXIgd29yay4gRGlzYWJsZSBpdCBpbnN0ZWFkIG9mIGNhbmNlbGxpbmdcbiA1MDU6XHRcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIDUwNjpcdFx0ICovXG4gNTA3Olx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuIDUwODpcdFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIDUwOTpcdFx0cmV0dXJuIDA7XG4gNTEwOlx0fVxuIDUxMTpcdFxuIDUxMjpcdHN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiA1MTM6XHR7XG4gNTE0Olx0XHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiA1MTU6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVx1MDAzZXVkZXY7XG4gNTE2Olx0XHRpbnQgcmV0dmFsO1xuIDUxNzpcdFxuIDUxODpcdFx0LyogUGFyYW5vaWQgKi9cbiA1MTk6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBJUEhFVEhfVFhfQlVGX1NJWkUpIHtcbiA1MjA6XHRcdFx0V0FSTigxLCBcJiMzNDslczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXG5cJiMzNDssIF9fZnVuY19fLCBza2ItXHUwMDNlbGVuKTtcbiA1MjE6XHRcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbiA1MjI6XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiA1MjM6XHRcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA1MjQ6XHRcdH1cbiA1MjU6XHRcbiA1MjY6XHRcdG1lbWNweShkZXYtXHUwMDNldHhfYnVmLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNTI3Olx0XG4gNTI4Olx0XHR1c2JfZmlsbF9idWxrX3VyYihkZXYtXHUwMDNldHhfdXJiLCB1ZGV2LFxuIDUyOTpcdFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi1cdTAwM2VidWxrX291dCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCBhc3N1bWluZyBleHBlcnRpc2UgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIGBpcGhldGhfa2lsbF91cmJzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgaXBoZXRoX2tpbGxfdXJic2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIGl0IHBlcmZvcm1zPyBJIG5lZWQgdGhlIGdyYW51bGFyIGRldGFpbHMuIEkgY2FuJiMzOTt0IG1ha2UgYW55IGFzc3VtcHRpb25zOyBJIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgYWxnb3JpdGhtLiBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIOKAkyB3aGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnM/IFVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGlzIGNyaXRpY2FsLiBJcyBpdCBpc29sYXRlZCBvciBpcyBpdCBjb3JlPyBBIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBwcm9qZWN0IHNob3VsZCByZXZlYWwgYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCBwYWludCBhIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgaW5mbHVlbmNlLiBJdCBjb3VsZCBiZSBhIHNpbXBsZSB1dGlsaXR5IGZ1bmN0aW9uLCBvciBpdCBjb3VsZCBiZSBhIGxpbmNocGluIGluIHNvbWUgY3J1Y2lhbCBwcm9jZXNzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2FnZSBpcyBwYXJhbW91bnQgdG8gZGV0ZXJtaW5pbmcgaXRzIHNpZ25pZmljYW5jZS4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBoZXRoX2tpbGxfdXJicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MTY2PXN0YXRpYyB2b2lkIGlwaGV0aF9mcmVlX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc1LVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE3NjpzdGF0aWMgdm9pZCBpcGhldGhfa2lsbF91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc3LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NDk4PXN0YXRpYyBpbnQgaXBoZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwNy1cdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2ZGV2LVx1MDAzZWNhcnJpZXJfd29yayk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTA4Olx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwOS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz02Nzc9c3RhdGljIHZvaWQgaXBoZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4My1cdFx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVx1MDAzZW5ldCk7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Njg0Olx0XHRpcGhldGhfa2lsbF91cmJzKGRldik7XG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjg1LVx0XHRpcGhldGhfZnJlZV91cmJzKGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGlwaGV0aF9raWxsX3VyYnNgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpcGhldGhfa2lsbF91cmJzYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSB0ZXJtaW5hdGlvbiBvciBjbGVhbnVwIG9mIFVSQnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gaS1waGQtZXRoIGRyaXZlciBvciByZWxhdGVkIHN5c3RlbS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRoaW5nIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycnVwdCBoYW5kbGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgc2NlbmFyaW9zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGludm9sdmluZyBVUkIgcG9pbnRlcnMsIHNoYXJlZCBtZW1vcnkgYWNjZXNzLCBvciBhdG9taWNpdHkgZ3VhcmFudGVlcyBhcm91bmQgdGhlIFVSQiBsaXN0LiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IGFueSBhcmVhcyB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC9lbmFibGVkLCB0byBzZWUgaWYgdGhleSBhcmUgcHJvcGVybHkgaGFuZGxlZC4gQWxzbywgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGluY29tcGxldGUgdHJhbnNhY3Rpb25zLCBlc3BlY2lhbGx5IGFueSBzaXR1YXRpb25zIHdoZXJlIGEgVVJCIGlzIHF1ZXVlZCBidXQgaXMgbm90IG1hcmtlZCB0byBhbGxvdyBzYWZlIHVubGlua2luZy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyDigJMgYXJlIGZhaWxlZCBVUkIgc3VibWlzc2lvbnMgaGFuZGxlZCBncmFjZWZ1bGx5LCBhbmQgYXJlIHJlc291cmNlcyBwcm9wZXJseSBmcmVlZCBpbiBhbGwgZXJyb3IgcGF0aHM/IElmIHRoZXJlIGFyZSBhbnkgbG9ja3MsIGhvdyBhcmUgdGhleSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQ/IEFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBlbm91Z2gsIG9yIGFyZSB0aGVyZSBwb3RlbnRpYWwgYm90dGxlbmVja3M/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGluZGljYXRpb24gb2YgYSBsZWFrIG9mIFVSQnM7IGl0IGlzIGEgY3JpdGljYWwgcmVzb3VyY2UgYW5kIG11c3QgYmUgY2xlYW5lZCB1cCBwcm9wZXJseSwgb3IgdGhlIHN5c3RlbSB3aWxsIGNyYXNoIHVuZGVyIGxvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcbiAxNjY6XHRzdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXG4gMTY3Olx0e1xuIDE2ODpcdFx0dXNiX2ZyZWVfY29oZXJlbnQoaXBob25lLVx1MDAzZXVkZXYsIGlwaG9uZS1cdTAwM2VyeF9idWZfbGVuLCBpcGhvbmUtXHUwMDNlcnhfYnVmLFxuIDE2OTpcdFx0XHRcdCAgaXBob25lLVx1MDAzZXJ4X3VyYi1cdTAwM2V0cmFuc2Zlcl9kbWEpO1xuIDE3MDpcdFx0dXNiX2ZyZWVfY29oZXJlbnQoaXBob25lLVx1MDAzZXVkZXYsIElQSEVUSF9UWF9CVUZfU0laRSwgaXBob25lLVx1MDAzZXR4X2J1ZixcbiAxNzE6XHRcdFx0XHQgIGlwaG9uZS1cdTAwM2V0eF91cmItXHUwMDNldHJhbnNmZXJfZG1hKTtcbiAxNzI6XHRcdHVzYl9mcmVlX3VyYihpcGhvbmUtXHUwMDNlcnhfdXJiKTtcbiAxNzM6XHRcdHVzYl9mcmVlX3VyYihpcGhvbmUtXHUwMDNldHhfdXJiKTtcbiAxNzQ6XHR9XG4gMTc1Olx0XG4gMTc2Olx0c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuIDE3NzpcdHtcbiAxNzg6XHRcdHVzYl9raWxsX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbiAxNzk6XHRcdHVzYl9raWxsX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbiAxODA6XHR9XG4gMTgxOlx0XG4gMTgyOlx0c3RhdGljIGludCBpcGhldGhfY29uc3VtZV9za2IoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxuIDE4MzpcdHtcbiAxODQ6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMTg1Olx0XG4gMTg2Olx0XHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7XG4gMTg3Olx0XHRpZiAoIXNrYikge1xuIDE4ODpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuIDE4OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxOTA6XHRcdH1cbiAxOTE6XHRcbiAxOTI6XHRcdHNrYl9wdXRfZGF0YShza2IsIGJ1ZiwgbGVuKTtcbiAxOTM6XHRcdHNrYi1cdTAwM2VkZXYgPSBkZXYtXHUwMDNlbmV0O1xuIDE5NDpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNwoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAzMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBpcGhldGhfa2lsbF91cmJzKGRldik7YCB3aXRoaW4gYGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KWAuIEVzc2VudGlhbGx5LCB3aGVuIGEgbmV0d29yayBkZXZpY2UgdXNpbmcgdGhlIGlwaGV0aCBkcml2ZXIgaXMgY2xvc2VkLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93biwgdGhpcyBlbnN1cmVzIHRoYXQgYW55IGluLWZsaWdodCBUcmFuc21pdCAoVFgpIGFuZCBSZWNlaXZlIChSWCkgVVJCcyBhcmUgaW1tZWRpYXRlbHkgY2FuY2VsZWQgc3luY2hyb25vdXNseSB1c2luZyBgdXNiX2tpbGxfdXJiKClgLiBUaGlzIGlzIGdvb2QsIGl0IHByZXZlbnRzIHRob3NlIFVSQnMgZnJvbSBjb250aW51aW5nIHRvIHJ1biBvciBjb21wbGV0ZSBhZnRlciB0aGUgZGV2aWNlIGlzIGRlYWN0aXZhdGVkLiBJdCYjMzk7cyBhIGxpZmVjeWNsZSBmaXguIFByZXZpb3VzbHksIHRoaXMgbGFjayBvZiBjYW5jZWxsYXRpb24gY3JlYXRlZCB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIGFuZCB1bndhbnRlZCBwcm9jZXNzaW5nLCBzbyB0aGlzIGlzIGEgc29saWQgZml4LgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOIHNjcnV0aW55LiBJIGhhdmUgdG8gdGhpbmsgdGhyb3VnaCB0aGUgcG90ZW50aWFsIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoxLiAgKipEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSBleHBvc2VkPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC4KMi4gICoqRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/KiogQWJzb2x1dGVseSBub3QuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2FsbCB0byBjYW5jZWwgVVJCcy4KMy4gICoqRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/KiogTm9wZS4gSnVzdCBVUkIgY2FuY2VsbGF0aW9uLgo0LiAgKipEb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMsIHBvdGVudGlhbGx5IGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnM/KiogTm8gd2F5LCB0aGlzIGp1c3QgY2xlYW5zIHVwIHBlbmRpbmcgb3BlcmF0aW9ucy4KClRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IOKAkyBjbGVhbmluZyB1cCByZXNvdXJjZXMuIFRoZSBhY3R1YWwgbG9naWMgaXMgc2ltcGxlIGFuZCBjbGVhcmx5IGFkZHJlc3NlcyBhIGtub3duIGlzc3VlLCB3aGljaCBJIGFzc3VtZSBpcyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQgYnkgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBkZXRlY3RvcnMuICBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIGNvbmZpcm1pbmc6CgoqICAgYE5lZWRzS01TQU5gOiBmYWxzZQoqICAgYEtNU0FOUmVhc29uaW5nYDogQ2xlYXIgZXhwbGFuYXRpb24sIGNvbnRyYXN0aW5nIHRoZSBhcHBsaWNhdGlvbiBvZiBLQVNBTi9LTVNBTi4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgIGluIGBpcGhldGhfY2xvc2UoKWAgdG8gY2FuY2VsIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgYWRkcmVzc2VzIFVSQiBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdXBvbiBpbnRlcmZhY2UgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMjo0OC4xNTQ4Mjc3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDgzNzkwNDQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfSVBIRVRIXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBoZXRoX2Nsb3NlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgaXBoZXRoX2tpbGxfdXJicyhkZXYpYCBpbiBgaXBoZXRoX2Nsb3NlKClgIHRvIGNhbmNlbCBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGFkZHJlc3NlcyBVUkIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVwb24gaW50ZXJmYWNlIHRlYXJkb3duLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGlwaGV0aF9raWxsX3VyYnMoKSBpbiBpcGhldGhfY2xvc2UoKSB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIGVtdWxhdGlvbi9yYXctZ2FkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMjo0OC4xNTQ4MzYzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzOTc1OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDozMjo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcXG5pbmRleCAyYjQ5MDExNGQyMzI3Li5mMTI3YWVhYjcwMzFlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguY1xcbkBAIC01MDUsNiArNTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gXFx0ICogaXQsIHNvIHRoYXQgc3VjaCBhIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpIGlzIGEgbm8tb3AuXFxuIFxcdCAqL1xcbiBcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZWNhcnJpZXJfd29yayk7XFxuK1xcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjMyOjQ4LjU0OTQ0OTc3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUzNDc2NjczNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9JUEhFVEhcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcGhldGhfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBpcGhldGhfa2lsbF91cmJzKCkgaW4gaXBoZXRoX2Nsb3NlKCkgdG8gcHJvcGVybHkgdGVybWluYXRlIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgZHJpdmVyIGNhbiBiZSBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIFVTQiBlbXVsYXRpb24vcmF3LWdhZGdldC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjMyOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG5pbmRleCAyYjQ5MDExNGQyMzI3Li5mMTI3YWVhYjcwMzFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbkBAIC01MDUsNiArNTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIFx0ICovXG4gXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuK1x0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzI6NDguNTQ5NDUyODEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU2ODk4NjE1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlwaGV0aC5jYCBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AuIExldCdzIGdldCByaWdodCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGdvb2QsIGhhcmQgbG9vayBhdCBib3RoIHRoZSBwcm9wb3NlZCBwYXRjaCBpdHNlbGYgYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgYGlwaGV0aC5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UgaXMgY3J1Y2lhbCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuXG5cblRvIGJlZ2luLCBJJ2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBwdWxsIHVwIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUgdG8gY29tcGFyZSBhZ2FpbnN0IGFuZCBlbnN1cmUgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgY29kZSBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMzozNC4yMzkzMTg2MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHRcXHRpZiAocmV0dmFsKVxcbiA0OTE6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0ZW5hYmxlX2RlbGF5ZWRfd29yayhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmspO1xcbiA0OTQ6XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZkZXYtXFx1MDAzZWNhcnJpZXJfd29yaywgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCk7XFxuIDQ5NTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0OTY6XFx0fVxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbiA0OTk6XFx0e1xcbiA1MDA6XFx0XFx0c3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdG5ldGlmX3N0b3BfcXVldWUobmV0KTtcXG4gNTAzOlxcdFxcdC8qIEEgVFggVVJCIGNhbiBzdGlsbCBjb21wbGV0ZSB3aXRoIGFuIGVycm9yIGFmdGVyIHRoaXMgcG9pbnQgYW5kXFxuIDUwNDpcXHRcXHQgKiB0cnkgdG8gcmUtYXJtIHRoZSBjYXJyaWVyIHdvcmsuIERpc2FibGUgaXQgaW5zdGVhZCBvZiBjYW5jZWxsaW5nXFxuIDUwNTpcXHRcXHQgKiBpdCwgc28gdGhhdCBzdWNoIGEgc2NoZWR1bGVfZGVsYXllZF93b3JrKCkgaXMgYSBuby1vcC5cXG4gNTA2OlxcdFxcdCAqL1xcbiA1MDc6XFx0XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmspO1xcbiA1MDg6XFx0XFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xcbiA1MDk6XFx0XFx0cmV0dXJuIDA7XFxuIDUxMDpcXHR9XFxuIDUxMTpcXHRcXG4gNTEyOlxcdHN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gNTEzOlxcdHtcXG4gNTE0OlxcdFxcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbiA1MTU6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBkZXYtXFx1MDAzZXVkZXY7XFxuIDUxNjpcXHRcXHRpbnQgcmV0dmFsO1xcbiA1MTc6XFx0XFxuIDUxODpcXHRcXHQvKiBQYXJhbm9pZCAqL1xcbiA1MTk6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgSVBIRVRIX1RYX0JVRl9TSVpFKSB7XFxuIDUyMDpcXHRcXHRcXHRXQVJOKDEsIFxcXCIlczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXFxcblxcXCIsIF9fZnVuY19fLCBza2ItXFx1MDAzZWxlbik7XFxuIDUyMTpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbiA1MjI6XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gNTIzOlxcdFxcdFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIDUyNDpcXHRcXHR9XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdG1lbWNweShkZXYtXFx1MDAzZXR4X2J1Ziwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuIDUyNzpcXHRcXG4gNTI4OlxcdFxcdHVzYl9maWxsX2J1bGtfdXJiKGRldi1cXHUwMDNldHhfdXJiLCB1ZGV2LFxcbiA1Mjk6XFx0XFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUodWRldiwgZGV2LVxcdTAwM2VidWxrX291dCksXFxuIDUzMDpcXHRcXHRcXHRcXHQgIGRldi1cXHUwMDNldHhfYnVmLCBza2ItXFx1MDAzZWxlbixcXG4gNTMxOlxcdFxcdFxcdFxcdCAgaXBoZXRoX3NuZGJ1bGtfY2FsbGJhY2ssXFxuIDUzMjpcXHRcXHRcXHRcXHQgIGRldik7XFxuIDUzMzpcXHRcXHRkZXYtXFx1MDAzZXR4X3VyYi1cXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7XFxuIDUzNDpcXHRcXG4gNTM1OlxcdFxcdG5ldGlmX3N0b3BfcXVldWUobmV0KTtcXG4gNTM2OlxcdFxcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi1cXHUwMDNldHhfdXJiLCBHRlBfQVRPTUlDKTtcXG4gNTM3OlxcdFxcdGlmIChyZXR2YWwpIHtcXG4gNTM4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiJXM6IHVzYl9zdWJtaXRfdXJiOiAlZFxcXFxuXFxcIixcXG4gNTM5OlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXR2YWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMzozNC4yMzk0Njg2MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzU1MjUwMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXBoZXRoLmNgIERyaXZlciBhbmQgRW11bGF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZSBgaXBoZXRoLmNgIGRyaXZlciBpcyBhbGwgYWJvdXQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBjb25maWd1cmF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBhY3RpdmF0aW9uLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS5cblxuVGhlbiwgSSdtIGdvaW5nIHRvIGV4cGxvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGVtdWxhdGluZyB0aGlzIGRyaXZlciB3aXRoaW4gUUVNVSBvciBTeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGFsb25nIHRoZSBsaW5lcyBvZiBzZWVpbmcgaWYgdGhlIHN0YW5kYXJkIFVTQiBzdGFjaywgc3BlY2lmaWNhbGx5IHRoZSByYXctZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIG9yIHBlcmhhcHMgZXZlbiBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMsIGNvdWxkIGJlIGxldmVyYWdlZCB0byBtaW1pYyBpdHMgYmVoYXZpb3IuIEl0J3MgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8gaW50ZXJhY3Qgd2l0aCBpdCBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuXG5cblNvLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IEknbSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgZm9yIFwiaXBoZXRoXCIgZGlyZWN0bHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozMzo1Ny43OTE5NzM2MTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTIxNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQSEVUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTcyPWNvbmZpZyBVU0JfQ0RDX1BIT05FVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTc5LVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU4MDpjb25maWcgVVNCX0lQSEVUSFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU4MS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgaVBob25lIFVTQiBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX1VTQl9ORVRfS0FMTUlBKVxcdCs9IGthbG1pYS5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19VU0JfSVBIRVRIKVxcdCs9IGlwaGV0aC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcXHQrPSBzaWVycmFfbmV0Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01OC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTk6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9DTEFTUyAgICAyNTVcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NjA6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9TVUJDTEFTUyAyNTNcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NjE6I2RlZmluZSBJUEhFVEhfVVNCSU5URl9QUk9UTyAgICAxXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYyLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MzojZGVmaW5lIElQSEVUSF9JUF9BTElHTlxcdFxcdDJcXHQvKiBwYWRkaW5nIGF0IGZyb250IG9mIFVSQiAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02NC0vKiBPbiBpT1MgZGV2aWNlcywgTkNNIGhlYWRlcnMgaW4gUlggaGF2ZSBhIGZpeGVkIHNpemUgcmVnYXJkbGVzcyBvZiBEUEUgY291bnQ6XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjktICovXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcwOiNkZWZpbmUgSVBIRVRIX05EUDE2X01BWF9EUEVcXHQyMlxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo3MTojZGVmaW5lIElQSEVUSF9ORFAxNl9IRUFERVJfU0laRSAoc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNikgKyBcXFxcXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjcyOlxcdFxcdFxcdFxcdCAgSVBIRVRIX05EUDE2X01BWF9EUEUgKiBcXFxcXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTczLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc0OiNkZWZpbmUgSVBIRVRIX05DTV9IRUFERVJfU0laRVxcdChzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSArIFxcXFxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzU6XFx0XFx0XFx0XFx0IElQSEVUSF9ORFAxNl9IRUFERVJfU0laRSlcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzY6I2RlZmluZSBJUEhFVEhfVFhfQlVGX1NJWkUgICAgICBFVEhfRlJBTUVfTEVOXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjc3OiNkZWZpbmUgSVBIRVRIX1JYX0JVRl9TSVpFX0xFR0FDWSAoSVBIRVRIX0lQX0FMSUdOICsgRVRIX0ZSQU1FX0xFTilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Nzg6I2RlZmluZSBJUEhFVEhfUlhfQlVGX1NJWkVfTkNNXFx0NjU1MzZcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNzktXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjgwOiNkZWZpbmUgSVBIRVRIX1RYX1RJTUVPVVQgICAgICAgKDUgKiBIWilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtODEtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjgyOiNkZWZpbmUgSVBIRVRIX0lOVEZOVU0gICAgICAgICAgMlxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4MzojZGVmaW5lIElQSEVUSF9BTFRfSU5URk5VTSAgICAgIDFcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtODQtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjg1OiNkZWZpbmUgSVBIRVRIX0NUUkxfRU5EUCAgICAgICAgMHgwMFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo4NjojZGVmaW5lIElQSEVUSF9DVFJMX0JVRl9TSVpFICAgIDB4NDBcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6ODc6I2RlZmluZSBJUEhFVEhfQ1RSTF9USU1FT1VUICAgICAoNSAqIEhaKVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy04OC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6ODk6I2RlZmluZSBJUEhFVEhfQ01EX0dFVF9NQUNBRERSICAgMHgwMFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5MDojZGVmaW5lIElQSEVUSF9DTURfRU5BQkxFX05DTSAgICAweDA0XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjkxOiNkZWZpbmUgSVBIRVRIX0NNRF9DQVJSSUVSX0NIRUNLIDB4NDVcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtOTItXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjkzOiNkZWZpbmUgSVBIRVRIX0NBUlJJRVJfQ0hFQ0tfVElNRU9VVCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDEgKiBIWilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6OTQ6I2RlZmluZSBJUEhFVEhfQ0FSUklFUl9PTiAgICAgICAweDA0XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTk1LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz05Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXBoZXRoX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk3OlxcdHsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oVVNCX1ZFTkRPUl9BUFBMRSwgSVBIRVRIX1VTQklOVEZfQ0xBU1MsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjk4OlxcdFxcdFxcdFxcdFxcdElQSEVUSF9VU0JJTlRGX1NVQkNMQVNTLFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo5OTpcXHRcXHRcXHRcXHRcXHRJUEhFVEhfVVNCSU5URl9QUk9UTykgfSxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTAwLVxcdHsgfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTEyMz1zdGF0aWMgaW50IGlwaGV0aF9hbGxvY191cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTM3LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxMzg6XFx0dHhfYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGlwaG9uZS1cXHUwMDNldWRldiwgSVBIRVRIX1RYX0JVRl9TSVpFLFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xMzktXFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwsIFxcdTAwMjZ0eF91cmItXFx1MDAzZXRyYW5zZmVyX2RtYSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTU1LWZyZWVfdHhfYnVmOlxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNTY6XFx0dXNiX2ZyZWVfY29oZXJlbnQoaXBob25lLVxcdTAwM2V1ZGV2LCBJUEhFVEhfVFhfQlVGX1NJWkUsIHR4X2J1ZixcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTU3LVxcdFxcdFxcdCAgdHhfdXJiLVxcdTAwM2V0cmFuc2Zlcl9kbWEpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTE2Nj1zdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTY5LVxcdFxcdFxcdCAgaXBob25lLVxcdTAwM2VyeF91cmItXFx1MDAzZXRyYW5zZmVyX2RtYSk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE3MDpcXHR1c2JfZnJlZV9jb2hlcmVudChpcGhvbmUtXFx1MDAzZXVkZXYsIElQSEVUSF9UWF9CVUZfU0laRSwgaXBob25lLVxcdTAwM2V0eF9idWYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3MS1cXHRcXHRcXHQgIGlwaG9uZS1cXHUwMDNldHhfdXJiLVxcdTAwM2V0cmFuc2Zlcl9kbWEpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTIwMz1zdGF0aWMgaW50IGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrX2xlZ2FjeShzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjEwLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMTE6XFx0aWYgKHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCBcXHUwMDNjPSBJUEhFVEhfSVBfQUxJR04pIHtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjEyLVxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjE0LVxcdH1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE1OlxcdGxlbiA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCAtIElQSEVUSF9JUF9BTElHTjtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MjE2OlxcdGJ1ZiA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyICsgSVBIRVRIX0lQX0FMSUdOO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMTctXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9MjI5PXN0YXRpYyBpbnQgaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbmNtKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNDAtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI0MTpcXHRpZiAodXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoIFxcdTAwM2MgSVBIRVRIX05DTV9IRUFERVJfU0laRSkge1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNDItXFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNTYtXFx0ZHBlID0gbmNtMC1cXHUwMDNlZHBlMTY7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI1NzpcXHRmb3IgKGludCBkcGVfaSA9IDA7IGRwZV9pIFxcdTAwM2MgSVBIRVRIX05EUDE2X01BWF9EUEU7ICsrZHBlX2ksICsrZHBlKSB7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI1OC1cXHRcXHRkZ19pZHggPSBsZTE2X3RvX2NwdShkcGUtXFx1MDAzZXdEYXRhZ3JhbUluZGV4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNjYtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjI2NzpcXHRcXHRpZiAoZGdfaWR4IFxcdTAwM2MgSVBIRVRIX05DTV9IRUFERVJfU0laRSB8fFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yNjgtXFx0XFx0ICAgIGRnX2lkeCBcXHUwMDNlPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGggfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0zNjI9c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zNzEtXFx0cmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM3MjpcXHRcXHRcXHR1c2JfcmN2Y3RybHBpcGUodWRldiwgSVBIRVRIX0NUUkxfRU5EUCksXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM3MzpcXHRcXHRcXHRJUEhFVEhfQ01EX0NBUlJJRVJfQ0hFQ0ssIC8qIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc0LVxcdFxcdFxcdDB4YzAsIC8qIHJlcXVlc3QgdHlwZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM3Ni1cXHRcXHRcXHQweDAyLCAvKiBpbmRleCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNzc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VjdHJsX2J1ZiwgSVBIRVRIX0NUUkxfQlVGX1NJWkUsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM3ODpcXHRcXHRcXHRJUEhFVEhfQ1RSTF9USU1FT1VUKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzc5LVxcdGlmIChyZXR2YWwgXFx1MDAzYz0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM4NC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mzg1OlxcdGlmICgocmV0dmFsID09IDEgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VjdHJsX2J1ZlswXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikgfHxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mzg2OlxcdCAgICAocmV0dmFsIFxcdTAwM2U9IDIgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VjdHJsX2J1ZlsxXSA9PSBJUEhFVEhfQ0FSUklFUl9PTikpIHtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzg3LVxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZGV2LVxcdTAwM2VuZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTM5Nz1zdGF0aWMgdm9pZCBpcGhldGhfY2Fycmllcl9jaGVja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDItXFx0aXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQwMzpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrLCBJUEhFVEhfQ0FSUklFUl9DSEVDS19USU1FT1VUKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDA0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00MDY9c3RhdGljIGludCBpcGhldGhfZ2V0X21hY2FkZHIoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTItXFx0cmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxMzpcXHRcXHRcXHRcXHQgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIElQSEVUSF9DVFJMX0VORFApLFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0MTQ6XFx0XFx0XFx0XFx0IElQSEVUSF9DTURfR0VUX01BQ0FERFIsIC8qIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDE1LVxcdFxcdFxcdFxcdCAweGMwLCAvKiByZXF1ZXN0IHR5cGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MTgtXFx0XFx0XFx0XFx0IGRldi1cXHUwMDNlY3RybF9idWYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQxOTpcXHRcXHRcXHRcXHQgSVBIRVRIX0NUUkxfQlVGX1NJWkUsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQyMDpcXHRcXHRcXHRcXHQgSVBIRVRIX0NUUkxfVElNRU9VVCk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQyMS1cXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQzNz1zdGF0aWMgaW50IGlwaGV0aF9lbmFibGVfbmNtKHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDQyLVxcdHJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo0NDM6XFx0XFx0XFx0XFx0IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCBJUEhFVEhfQ1RSTF9FTkRQKSxcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDQ0OlxcdFxcdFxcdFxcdCBJUEhFVEhfQ01EX0VOQUJMRV9OQ00sIC8qIHJlcXVlc3QgKi9cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDQ1LVxcdFxcdFxcdFxcdCAweDQxLCAvKiByZXF1ZXN0IHR5cGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NDktXFx0XFx0XFx0XFx0IDAsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ1MDpcXHRcXHRcXHRcXHQgSVBIRVRIX0NUUkxfVElNRU9VVCk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ1MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00Nzc9c3RhdGljIGludCBpcGhldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ4Mi1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDgzOlxcdHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIElQSEVUSF9JTlRGTlVNLCBJUEhFVEhfQUxUX0lOVEZOVU0pO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00ODQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDkzLVxcdGVuYWJsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDk0OlxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00OTUtXFx0cmV0dXJuIHJldHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz01MTI9c3RhdGljIG5ldGRldl90eF90IGlwaGV0aF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxOC1cXHQvKiBQYXJhbm9pZCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1MTk6XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgSVBIRVRIX1RYX0JVRl9TSVpFKSB7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUyMC1cXHRcXHRXQVJOKDEsIFxcXCIlczogc2tiIHRvbyBsYXJnZTogJWQgYnl0ZXNcXFxcblxcXCIsIF9fZnVuY19fLCBza2ItXFx1MDAzZWxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTc4PXN0YXRpYyBpbnQgaXBoZXRoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU5Mi1cXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2aXBoZXRoX25ldGRldl9vcHM7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU5MzpcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gSVBIRVRIX1RYX1RJTUVPVVQ7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU5NC1cXHRzdHJzY3B5KG5ldGRldi1cXHUwMDNlbmFtZSwgXFxcImV0aCVkXFxcIiwgc2l6ZW9mKG5ldGRldi1cXHUwMDNlbmFtZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYwMC1cXHRkZXYtXFx1MDAzZWNvbmZpcm1lZF9wYWlyaW5nID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjYwMTpcXHRkZXYtXFx1MDAzZXJ4X2J1Zl9sZW4gPSBJUEhFVEhfUlhfQlVGX1NJWkVfTEVHQUNZO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MDItXFx0ZGV2LVxcdTAwM2VyY3ZidWxrX2NhbGxiYWNrID0gaXBoZXRoX3JjdmJ1bGtfY2FsbGJhY2tfbGVnYWN5O1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MDMtXFx0LyogU2V0IHVwIGVuZHBvaW50cyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MDQ6XFx0aGludGYgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwgSVBIRVRIX0FMVF9JTlRGTlVNKTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjA1LVxcdGlmIChoaW50ZiA9PSBOVUxMKSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjIwLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MjE6XFx0ZGV2LVxcdTAwM2VjdHJsX2J1ZiA9IGttYWxsb2MoSVBIRVRIX0NUUkxfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy02MjItXFx0aWYgKGRldi1cXHUwMDNlY3RybF9idWYgPT0gTlVMTCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTYzMi1cXHRpZiAoIXJldHZhbCkge1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2MzM6XFx0XFx0ZGV2LVxcdTAwM2VyeF9idWZfbGVuID0gSVBIRVRIX1JYX0JVRl9TSVpFX05DTTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjM0LVxcdFxcdGRldi1cXHUwMDNlcmN2YnVsa19jYWxsYmFjayA9IGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrX25jbTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzM6NTcuOTAzOTAwMTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5Mzc0MDU4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgVVNCX0lQSEVUSCBpbiB0aGUgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgVVNCX0lQSEVUSGAgaXMgaGFuZGxlZCwgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgVVNCX0lQSEVUSGAuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaXQncyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIG9yIGhlbHAgdGV4dCBtaWdodCByZXZlYWwgYWJvdXQgaXRzIGludGVuZGVkIHVzZSBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGF0IGhhbmQgYW5kIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9uIG9mIGl0cyBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM0OjE4Ljg0MTMwODM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NTpcXHRcXHRoZWxwXFxuIDU3NjpcXHRcXHQgIENob29zZSB0aGlzIG9wdGlvbiB0byBzdXBwb3J0IHRoZSBQaG9uZXQgaW50ZXJmYWNlIHRvIGEgTm9raWFcXG4gNTc3OlxcdFxcdCAgY2VsbHVsYXIgbW9kZW0sIGFzIGZvdW5kIG9uIG1vc3QgTm9raWEgaGFuZHNldHMgd2l0aCB0aGVcXG4gNTc4OlxcdFxcdCAgXFxcIlBDIHN1aXRlXFxcIiBVU0IgcHJvZmlsZS5cXG4gNTc5OlxcdFxcbiA1ODA6XFx0Y29uZmlnIFVTQl9JUEhFVEhcXG4gNTgxOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRyaXZlclxcXCJcXG4gNTgyOlxcdFxcdGRlZmF1bHQgblxcbiA1ODM6XFx0XFx0aGVscFxcbiA1ODQ6XFx0XFx0ICBNb2R1bGUgdXNlZCB0byBzaGFyZSBJbnRlcm5ldCBjb25uZWN0aW9uICh0ZXRoZXJpbmcpIGZyb20geW91clxcbiA1ODU6XFx0XFx0ICBpUGhvbmUgdG8geW91ciBzeXN0ZW0uXFxuIDU4NjpcXHRcXHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIGNvcnJlc3BvbmRpbmcgdXNlcnNwYWNlIGxpYnJhcnkvcHJvZ3JhbVxcbiA1ODc6XFx0XFx0ICB0byBwYWlyIHlvdXIgZGV2aWNlIHdpdGggeW91ciBzeXN0ZW0sIGZvciBleGFtcGxlIHVzYm11eGRcXG4gNTg4OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZ2l0aHViLmNvbS9saWJpbW9iaWxlZGV2aWNlL3VzYm11eGRcXHUwMDNlLlxcbiA1ODk6XFx0XFxuIDU5MDpcXHRjb25maWcgVVNCX1NJRVJSQV9ORVRcXG4gNTkxOlxcdFxcdHRyaXN0YXRlIFxcXCJVU0ItdG8tV1dBTiBEcml2ZXIgZm9yIFNpZXJyYSBXaXJlbGVzcyBtb2RlbXNcXFwiXFxuIDU5MjpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gNTkzOlxcdFxcdGhlbHBcXG4gNTk0OlxcdFxcdCAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2llcnJhIFdpcmVsZXNzIFVTQi10by1XV0FOIGRldmljZS5cXG4gNTk1OlxcdFxcbiA1OTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTk3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpZXJyYV9uZXQuXFxuIDU5ODpcXHRcXG4gNTk5OlxcdGNvbmZpZyBVU0JfVkw2MDBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzQ6MTguODQxNDQxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjYyODU5NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVVNCLUlQSEVUSCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgVVNCX0lQSEVUSGAgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBwbGFuIGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSdsbCBmb2N1cyBvbiB0aGUgaW5pdGlhbCBsaW5lcywgcGVyaGFwcyB0aGUgZmlyc3QgNTAgb3Igc28sIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IHJlbGF0aW9uc2hpcHMuIEFsdGVybmF0aXZlbHksIGlmIHRoYXQgZG9lc24ndCB5aWVsZCBpbW1lZGlhdGUgY2xhcml0eSwgSSdsbCBnbyByaWdodCB0byB0aGUgdG9wIG9mIGJvdGggYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBhbmQsIGFzIGEgYnJvYWRlciBwZXJzcGVjdGl2ZSwgYGRyaXZlcnMvbmV0L0tjb25maWdgLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgZnJhbWV3b3JrIG9mIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNDozNC4xMDQzMDMzODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNDozNC4xMDQzNzc4NzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM0OTMzNDIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwaGV0aF9jbG9zZSBGdW5jdGlvbiBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBpcGhldGhfY2xvc2VgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gc3RvcHBpbmcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIChgbmV0aWZfc3RvcF9xdWV1ZWApLCBkaXNhYmxpbmcgYW5kIHN5bmNocm9uaXppbmcgdGhlIGNhcnJpZXIgd29yayAoYGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmNgKSwgYW5kIGtpbGxpbmcgVVJCcyAoYGlwaGV0aF9raWxsX3VyYnNgKS4gVGhpcyBpcyBhbGwgcHJldHR5IHN0YW5kYXJkIGZvciBhIG5ldHdvcmsgaW50ZXJmYWNlIHNodXRkb3duLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIHRoZSBuZXh0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kIGlzLCBkb2VzIFN5emthbGxlciBldmVuIGZ1enogVVNCIGV0aGVybmV0IGRyaXZlcnM/IEkgKnRoaW5rKiBzbywgcmlnaHQ/IEFoLCB5ZXMsIGl0IHVzZXMgUmF3IEdhZGdldCAvIER1bW15IEhDRCAvIFVTQiBlbXVsYXRpb24uIFRoYXQgc2hvdWxkIGNvdmVyIHRoaXMuIEdyZWF0LlxuXG5CdXQgbm93IEkgaGF2ZSB0byBjaGVjayB0aGUgZnV6emluZyBydWxlcy4gSSBjYW4ndCBqdXN0IGRpdmUgaW4uIExldCdzIHNlZS4uLiB0aGUgcnVsZXMgc2F5IEkgc2hvdWxkIHNraXAgcGF0Y2hlcyB0aGF0IGluY2x1ZGUgY2hhbmdlcyB3aGljaCBhcmU6IGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEl0IGFsc28gc2F5cyBub3QgdG8gZnV6eiBjZXJ0YWluIGRyaXZlciBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgZXRjLikgdGhhdCBvbmx5IHRyaWdnZXIgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIGRyaXZlciB1bmJpbmQuXG5cbkFscmlnaHQsIGJhY2sgdG8gYGlwaGV0aF9jbG9zZWAuIElzIHRoaXMgYSB0ZWFyZG93biBjYWxsYmFjayBsaWtlIGAucmVtb3ZlYCBvciBgLnNodXRkb3duYD8gTm8sIGl0J3Mgbm90LiBGcm9tIG1lbW9yeSwgYGlwaGV0aF9jbG9zZWAgaXMgdGhlIGBuZG9fc3RvcGAgY2FsbGJhY2sgb2YgYG5ldGRldl9vcHNgLiBTbyBpdCdzIGV4ZWN1dGVkIHdoZW4gdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IGRvd24gd2l0aCBjb21tYW5kcyBsaWtlIGBpcCBsaW5rIHNldCBkZXYgZXRoWCBkb3duYCBvciBldmVuIGBkZXZfY2xvc2VgIG9yIGBTSU9DU0lGRkxBR1NgIGlmZG93bi4gVG8gYmUgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3VzYi9pcGhldGguY2AgYW5kIG1ha2Ugc3VyZSBpdCdzIGxpbmtlZCB0byBgaXBoZXRoX25ldGRldl9vcHNgLiBUaGVyZWZvcmUsIGl0J3MgcHJvYmFibHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA3NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM0OjQwLjQ1MzcxNjA4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU2NTpcXHR9XFxuIDU2NjpcXHRcXG4gNTY3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0ge1xcbiA1Njg6XFx0XFx0LmdldF9saW5rID0gaXBoZXRoX2V0aHRvb2xfb3BfZ2V0X2xpbmtcXG4gNTY5OlxcdH07XFxuIDU3MDpcXHRcXG4gNTcxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XFxuIDU3MjpcXHRcXHQubmRvX29wZW4gPSBpcGhldGhfb3BlbixcXG4gNTczOlxcdFxcdC5uZG9fc3RvcCA9IGlwaGV0aF9jbG9zZSxcXG4gNTc0OlxcdFxcdC5uZG9fc3RhcnRfeG1pdCA9IGlwaGV0aF90eCxcXG4gNTc1OlxcdFxcdC5uZG9fdHhfdGltZW91dCA9IGlwaGV0aF90eF90aW1lb3V0LFxcbiA1NzY6XFx0fTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIDU3OTpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDU4MDpcXHR7XFxuIDU4MTpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDU4MjpcXHRcXHRzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2luLCAqZXBfb3V0O1xcbiA1ODM6XFx0XFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaGludGY7XFxuIDU4NDpcXHRcXHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNDo0MC40NTM4NTg3NzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUzNTEzMjc2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGlwaGV0aF9raWxsX3VyYnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLCBgaXBoZXRoX2tpbGxfdXJic2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMg4oCTIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBcInVyYnMuXCIgR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJIHN1c3BlY3QgdGhhdCBcInVyYnNcIiBpcyBhIGtleSBwaWVjZSBvZiBkYXRhIG9yIGEgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdGhpcyBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gdG8gc2VlIHdoYXQgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGRvZXMuIE15IGZhbWlsaWFyaXR5IHdpdGggbmFtaW5nIGNvbnZlbnRpb25zIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBhY3Rpb24gdG8gdGVybWluYXRlLCByZW1vdmUsIG9yIHJlbmRlciBpbmVydCBzb21ldGhpbmcgcmVsYXRlZCB0byBcInVyYnMuXCIgSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM0OjU1LjgwNTE4ODkxM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MTE5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBoZXRoX2tpbGxfdXJic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTE2Nj1zdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc1LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTQ5OD1zdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwNy1cXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZWNhcnJpZXJfd29yayk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjUwODpcXHRpcGhldGhfa2lsbF91cmJzKGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUwOS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz02Nzc9c3RhdGljIHZvaWQgaXBoZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjgzLVxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldi1cXHUwMDNlbmV0KTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Njg0OlxcdFxcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjg1LVxcdFxcdGlwaGV0aF9mcmVlX3VyYnMoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzQ6NTUuODk3ODA1MDg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3MzYxNjU0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLi4uXG5cbioqSW5zcGVjdGluZyB0aGUgQ29udGVudHMgb2YgYGlwaGV0aF9raWxsX3VyYnNgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGFjdHVhbGx5IHdpdGhpbiBgaXBoZXRoX2tpbGxfdXJic2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wb25lbnRzLiBXaGF0J3MgdGhlIHN0cnVjdHVyZT8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZSwgYSBwcm9ncmFtLCBhIHNjcmlwdCwgb3Igd2hhdD8gV2hhdCB2YXJpYWJsZXMgYXJlIGRlZmluZWQ/IEFyZSB0aGVyZSBjYWxscyB0byBvdGhlciByb3V0aW5lcyBvciBmdW5jdGlvbnM/IE1vcmUgaW1wb3J0YW50bHksIHdoYXQgcHJvYmxlbSBpcyB0aGlzIHBhcnRpY3VsYXIgdGhpbmcgYXR0ZW1wdGluZyB0byBzb2x2ZT8gV2hhdCBpcyBpdHMgaW50ZW5kZWQgcHVycG9zZT8gS25vd2luZyB0aGF0IGNvbnRleHQgd2lsbCBjbGFyaWZ5IGFsbCBvZiBpdHMgaW5uZXIgd29ya2luZ3MuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGllY2Ugb2YgY29kZSBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjA0LjYzMzk3MzA3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc1OlxcdFxcbiAxNzY6XFx0c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbiAxNzc6XFx0e1xcbiAxNzg6XFx0XFx0dXNiX2tpbGxfdXJiKGRldi1cXHUwMDNldHhfdXJiKTtcXG4gMTc5OlxcdFxcdHVzYl9raWxsX3VyYihkZXYtXFx1MDAzZXJ4X3VyYik7XFxuIDE4MDpcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdHN0YXRpYyBpbnQgaXBoZXRoX2NvbnN1bWVfc2tiKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4gMTgzOlxcdHtcXG4gMTg0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IobGVuKTtcXG4gMTg3OlxcdFxcdGlmICghc2tiKSB7XFxuIDE4ODpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbiAxODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE5MDpcXHRcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHNrYl9wdXRfZGF0YShza2IsIGJ1ZiwgbGVuKTtcXG4gMTkzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuIDE5NDpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjA0LjYzNDA5ODIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjY4NjEzNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgRHJpdmVyIENoYW5nZSoqXG5cbk9rYXksIHNvIGBpcGhldGhfY2xvc2VgIG5vdyBpbmNsdWRlcyBhIGNhbGwgdG8gYGlwaGV0aF9raWxsX3VyYnMoZGV2KWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgdGhlIGlwaGV0aCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlICpyZWFsbHkqIHB1c2ggdGhpcz8gSXMgdGhpcyBzb21ldGhpbmcgd2UgY2FuIGFkZXF1YXRlbHkgdGVzdD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBjaGFuZ2UgbWVyaXRzIHNjcnV0aW55LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFVTQi5cblxuR29vZCBuZXdzOiB3ZSAqY2FuKiB0ZXN0IHRoaXMsIGJvdGggaW4gUUVNVSBhbmQsIGNydWNpYWxseSwgaW4gU3l6a2FsbGVyISBXZSBjYW4gdXNlIFVTQiByYXdfZ2FkZ2V0IG9yIGR1bW15X2hjZCwgb3IgbGV2ZXJhZ2UgU3l6a2FsbGVyJ3MgVVNCIGVtdWxhdGlvbi4gV2UgY2FuIGJyaW5nIHRoZSBBcHBsZSBpUGhvbmUgVVNCIEV0aGVybmV0IGRldmljZSB1cCwgZG93biwgc2VuZCBhbmQgcmVjZWl2ZSBwYWNrZXRzLiBQZXJmZWN0ISBTbywgZGVmaW5pdGVseSBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCB3ZSBuZWVkIHRvIGJ1aWxkIGEgdGVzdCBlbnZpcm9ubWVudC5cblxuRmlyc3QsIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYFVTQl9ORVRfRFJJVkVSU2AgcmVsaWVzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IE5FVGAsIGFuZCBgVVNCX0lQSEVUSGAgaXMgdW5kZXIgdGhhdCBtZW51Y29uZmlnLiBObyBhZGRpdGlvbmFsIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfSVBIRVRIYCBpdHNlbGYsIHRoYXQgSSBjYW4gc2VlLiBUaGF0J3MgZ29vZC4gU2ltcGxlLCB1c3VhbGx5IGluZGljYXRlcyB3ZSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtcy5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIGlmIGBVU0JfSVBIRVRIYCBzaG93cyB1cCBhbnl3aGVyZSBlbHNlIGluIHRoZSBLY29uZmlnIGZpbGVzIGZvciBjb250ZXh0LiBZZXAsIGp1c3QgdGhhdCBtZW51Y29uZmlnIGVudHJ5LlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHdlIHNob3VsZCBmb2N1cyBvbi4gT2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSSdtIHRoaW5raW5nIGBpcGhldGhfY2xvc2VgLCBidXQgYWxzbywgcHJvYmFibHkgYGlwaGV0aF9wcm9iZWAsIGBpcGhldGhfdHhgLCBhbmQgYGlwaGV0aF9vcGVuYC4gV2FpdCwgYGlwaGV0aF9jbG9zZWAgaXMgc3RhdGljLCBidXQgbGV0J3MgbWFrZSBzdXJlIGl0J3MgcmVmZXJlbmNlZCBpbiBgaXBoZXRoX25ldGRldl9vcHNgIChmdW5jdGlvbiBwb2ludGVycyBhcmUgbm90IGlubGluZWQpLiBHb3R0YSBiZSBzdXJlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBpcGhldGguYyBmaWxlIHRvIGVuc3VyZSBJIGRpZG4ndCBtaXNzIGFueXRoaW5nIG9idmlvdXMuIExldCdzIHNlZSBhbGwgdGhlIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYC4gVGhlbiwgd2UgY2FuIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNToxNi45MDI3MTQ3ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTExOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X10rLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jPTEwND1zdHJ1Y3QgaXBoZXRoX2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTIwLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxMjE6c3RhdGljIGludCBpcGhldGhfcnhfc3VibWl0KHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYsIGdmcF90IG1lbV9mbGFncyk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTEyMi1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTIzOnN0YXRpYyBpbnQgaXBoZXRoX2FsbG9jX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNjUtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjE2NjpzdGF0aWMgdm9pZCBpcGhldGhfZnJlZV91cmJzKHN0cnVjdCBpcGhldGhfZGV2aWNlICppcGhvbmUpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc1LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoxNzY6c3RhdGljIHZvaWQgaXBoZXRoX2tpbGxfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0xNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE4MS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTgyOnN0YXRpYyBpbnQgaXBoZXRoX2NvbnN1bWVfc2tiKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMDItXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjIwMzpzdGF0aWMgaW50IGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrX2xlZ2FjeShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTIwNC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjI4LSAqL1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzoyMjk6c3RhdGljIGludCBpcGhldGhfcmN2YnVsa19jYWxsYmFja19uY20oc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0yMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTI4NS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6Mjg2OnN0YXRpYyB2b2lkIGlwaGV0aF9yY3ZidWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zMzgtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjMzOTpzdGF0aWMgdm9pZCBpcGhldGhfc25kYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTM0MC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzYxLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzozNjI6c3RhdGljIGludCBpcGhldGhfY2Fycmllcl9zZXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy0zOTYtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjM5NzpzdGF0aWMgdm9pZCBpcGhldGhfY2Fycmllcl9jaGVja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMzk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDUtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQwNjpzdGF0aWMgaW50IGlwaGV0aF9nZXRfbWFjYWRkcihzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00MDcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQzNi1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDM3OnN0YXRpYyBpbnQgaXBoZXRoX2VuYWJsZV9uY20oc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTctXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ1ODpzdGF0aWMgaW50IGlwaGV0aF9yeF9zdWJtaXQoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldiwgZ2ZwX3QgbWVtX2ZsYWdzKVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTQ3Ni1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NDc3OnN0YXRpYyBpbnQgaXBoZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNDc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00OTctXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjQ5ODpzdGF0aWMgaW50IGlwaGV0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy00OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTUxMS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NTEyOnN0YXRpYyBuZXRkZXZfdHhfdCBpcGhldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01NTEtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU1MjpzdGF0aWMgdm9pZCBpcGhldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSlcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01NjAtXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjU2MTpzdGF0aWMgdTMyIGlwaGV0aF9ldGh0b29sX29wX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBoZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNTc3LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1Nzg6c3RhdGljIGludCBpcGhldGhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTU3OS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtNjc2LVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo2Nzc6c3RhdGljIHZvaWQgaXBoZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY3OC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9NjkzPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpcGhldGhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTcwMC1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6NzAxOm1vZHVsZV91c2JfZHJpdmVyKGlwaGV0aF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy03MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjE2Ljk5MjgzMjUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTE5OTQ3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGlwaGV0aCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcGhldGhgIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc2NydXRpbml6ZSB0aGUgY29yZSBmdW5jdGlvbnMgaW1wYWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEknbSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgbGlrZSBgaXBoZXRoX2Nsb3NlYCwgYGlwaGV0aF9vcGVuYCwgYGlwaGV0aF9wcm9iZWAsIGFuZCBgaXBoZXRoX2Rpc2Nvbm5lY3RgLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYGlwaGV0aF9jbG9zZWAsIHNwZWNpZmljYWxseSB0aGUgYWRkaXRpb24gb2YgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgLiBUaGF0J3MgYSBrZXkgZGV0YWlsOyBraWxsaW5nIFVSQnMgc3VnZ2VzdHMgdGhleSdyZSBhZGRyZXNzaW5nIHBlbmRpbmcgb3IgY29uY3VycmVudCBjb21wbGV0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBiZWluZyBjbG9zZWQuIFRoZSBpbmNsdXNpb24gb2YgYGlwaGV0aF9jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AgY29uZmlybXMgdGhpcyBhcyB0aGUgZm9jYWwgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gQSBxdWljayBjaGVjayBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGluIG9yZGVyLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYFVTQl9JUEhFVEhgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYCBhcmUgYWxsIGVuYWJsZWQuIFRoaXMgZW5zdXJlcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGFuZCBjb3JyZWN0bHkgZW5hYmxlZCBmb3IgdGVzdGluZy5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmdXp6aW5nIHBsYW46IEkgc2VlIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCdzIHB1cnBvc2U6IGl0IG1vZGlmaWVzIGEgY3JpdGljYWwgYXNwZWN0IG9mIGRyaXZlciBiZWhhdmlvciBwb3RlbnRpYWxseSBzdXNjZXB0aWJsZSB0byByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgZHVyaW5nIGludGVyZmFjZSBjbG9zdXJlLiBUaGUgYFJlYXNvbmluZ2AgbmVhdGx5IHN1bW1hcml6ZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiB0aGUgYGlwaGV0aGAgZHJpdmVyIGNhbiBiZSBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQvZW11bGF0aW9uLCBzbyBpdCdzIHBlcmZlY3RseSBzdWl0ZWQgZm9yIGZ1enppbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcnJheSBleHBsaWNpdGx5IGxpc3RzIGBpcGhldGhfY2xvc2VgLCB3aGljaCBJIGFscmVhZHkga25ldyB3YXMgaW1wb3J0YW50LiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IHZlcmlmaWVzIHRoZSBleHBlY3RlZCBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMsIGFuZCB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgIHNpZ25hbHMgdGhhdCBteSB3b3JrIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2NiwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzU6MjEuOTA0ODMwMzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjg5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfSVBIRVRIXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBoZXRoX2Nsb3NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gaXBoZXRoX2tpbGxfdXJicygpIGluIGlwaGV0aF9jbG9zZSgpIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhY3RpdmUgVFggYW5kIFJYIFVSQnMgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgYnJvdWdodCBkb3duLiBUaGlzIGRyaXZlciBjYW4gYmUgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBVU0IgZW11bGF0aW9uL3Jhdy1nYWRnZXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0lQSEVUSFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwaGV0aF9jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGlwaGV0aF9raWxsX3VyYnMoKSBpbiBpcGhldGhfY2xvc2UoKSB0byBwcm9wZXJseSB0ZXJtaW5hdGUgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBkcml2ZXIgY2FuIGJlIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIGVtdWxhdGlvbi9yYXctZ2FkZ2V0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNToyMi4wMjYxMjg2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTY2NTkwNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzU6MjIuMDI2OTk4NTA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA5NjU3MTU1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgIGluIGBpcGhldGhfY2xvc2UoKWAgdG8gY2FuY2VsIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgYWRkcmVzc2VzIFVSQiBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdXBvbiBpbnRlcmZhY2UgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTdiZDYyZjJkNjgxZGRjYjNhZDJlMjBhMjUwNDEzZGM3ZWEyNjQ1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjMyOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG5pbmRleCAyYjQ5MDExNGQyMzI3Li5mMTI3YWVhYjcwMzFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmNcbkBAIC01MDUsNiArNTA1LDcgQEAgc3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdCAqIGl0LCBzbyB0aGF0IHN1Y2ggYSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKSBpcyBhIG5vLW9wLlxuIFx0ICovXG4gXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VjYXJyaWVyX3dvcmspO1xuK1x0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MzU6MjIuMDI3MDAwMDA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MDkzNDEyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGlwaGV0aCBEcml2ZXIgQ2xvc3VyZSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgYmVlbiBpbnRyb2R1Y2VkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jYCBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGBpcGhldGhfa2lsbF91cmJzKGRldik7YCB3aXRoaW4gdGhlIGBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHRoZSBleGlzdGluZyBjb2RlLCBhbmQgdGhlbiBzZWUgd2hhdCB0aGlzIGFkZGl0aW9uIG1lYW5zLiBJJ2xsIHVzZSBhIGZpbGUgcmVhZGVyIHRvIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTA1IG9mIGBkcml2ZXJzL25ldC91c2IvaXBoZXRoLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0IGZvciBgaXBoZXRoX2Nsb3NlKClgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGV5IGNob3NlIHRvIGtpbGwgdGhlIFVSQnMgYXQgY2xvc2UsIGFuZCB3aGF0IHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMsIG9yIGltcHJvdmVtZW50cyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjI3LjkzNjM0NDAyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRldi1cXHUwMDNldWRldjtcXG4gNDgxOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHR1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBJUEhFVEhfSU5URk5VTSwgSVBIRVRIX0FMVF9JTlRGTlVNKTtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0cmV0dmFsID0gaXBoZXRoX2NhcnJpZXJfc2V0KGRldik7XFxuIDQ4NjpcXHRcXHRpZiAocmV0dmFsKVxcbiA0ODc6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0cmV0dmFsID0gaXBoZXRoX3J4X3N1Ym1pdChkZXYsIEdGUF9LRVJORUwpO1xcbiA0OTA6XFx0XFx0aWYgKHJldHZhbClcXG4gNDkxOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQ5MjpcXHRcXG4gNDkzOlxcdFxcdGVuYWJsZV9kZWxheWVkX3dvcmsoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrKTtcXG4gNDk0OlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmssIElQSEVUSF9DQVJSSUVSX0NIRUNLX1RJTUVPVVQpO1xcbiA0OTU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDk2OlxcdH1cXG4gNDk3OlxcdFxcbiA0OTg6XFx0c3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gNDk5OlxcdHtcXG4gNTAwOlxcdFxcdHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRuZXRpZl9zdG9wX3F1ZXVlKG5ldCk7XFxuIDUwMzpcXHRcXHQvKiBBIFRYIFVSQiBjYW4gc3RpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBhZnRlciB0aGlzIHBvaW50IGFuZFxcbiA1MDQ6XFx0XFx0ICogdHJ5IHRvIHJlLWFybSB0aGUgY2FycmllciB3b3JrLiBEaXNhYmxlIGl0IGluc3RlYWQgb2YgY2FuY2VsbGluZ1xcbiA1MDU6XFx0XFx0ICogaXQsIHNvIHRoYXQgc3VjaCBhIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpIGlzIGEgbm8tb3AuXFxuIDUwNjpcXHRcXHQgKi9cXG4gNTA3OlxcdFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmRldi1cXHUwMDNlY2Fycmllcl93b3JrKTtcXG4gNTA4OlxcdFxcdGlwaGV0aF9raWxsX3VyYnMoZGV2KTtcXG4gNTA5OlxcdFxcdHJldHVybiAwO1xcbiA1MTA6XFx0fVxcbiA1MTE6XFx0XFxuIDUxMjpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgaXBoZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuIDUxMzpcXHR7XFxuIDUxNDpcXHRcXHRzdHJ1Y3QgaXBoZXRoX2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4gNTE1OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LVxcdTAwM2V1ZGV2O1xcbiA1MTY6XFx0XFx0aW50IHJldHZhbDtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0LyogUGFyYW5vaWQgKi9cXG4gNTE5OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIElQSEVUSF9UWF9CVUZfU0laRSkge1xcbiA1MjA6XFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IHNrYiB0b28gbGFyZ2U6ICVkIGJ5dGVzXFxcXG5cXFwiLCBfX2Z1bmNfXywgc2tiLVxcdTAwM2VsZW4pO1xcbiA1MjE6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4gNTIyOlxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIDUyMzpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiA1MjQ6XFx0XFx0fVxcbiA1MjU6XFx0XFxuIDUyNjpcXHRcXHRtZW1jcHkoZGV2LVxcdTAwM2V0eF9idWYsIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHR1c2JfZmlsbF9idWxrX3VyYihkZXYtXFx1MDAzZXR4X3VyYiwgdWRldixcXG4gNTI5OlxcdFxcdFxcdFxcdCAgdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi1cXHUwMDNlYnVsa19vdXQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNToyNy45MzY0NzI5MDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxOTg1MzE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCBhc3N1bWluZyBleHBlcnRpc2UgaW4gdGhlIHJlbGV2YW50IGZpZWxkOlxuXG4qKkludmVzdGlnYXRpbmcgYGlwaGV0aF9raWxsX3VyYnNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiwgYGlwaGV0aF9raWxsX3VyYnNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIGl0IHBlcmZvcm1zPyBJIG5lZWQgdGhlIGdyYW51bGFyIGRldGFpbHMuIEkgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnM7IEkgbmVlZCB0byBrbm93IHRoZSBleGFjdCBhbGdvcml0aG0uIE1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20g4oCTIHdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucz8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgY3JpdGljYWwuIElzIGl0IGlzb2xhdGVkIG9yIGlzIGl0IGNvcmU/IEEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIHByb2plY3Qgc2hvdWxkIHJldmVhbCBhbGwgdGhlIGNhbGwgc2l0ZXMgYW5kIHBhaW50IGEgcGljdHVyZSBvZiBpdHMgb3ZlcmFsbCBpbmZsdWVuY2UuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGl0IGNvdWxkIGJlIGEgbGluY2hwaW4gaW4gc29tZSBjcnVjaWFsIHByb2Nlc3MuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGlzIHBhcmFtb3VudCB0byBkZXRlcm1pbmluZyBpdHMgc2lnbmlmaWNhbmNlLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNTo0Mi4xMzUwMDg5NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODU5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaGV0aF9raWxsX3VyYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz0xNjY9c3RhdGljIHZvaWQgaXBoZXRoX2ZyZWVfdXJicyhzdHJ1Y3QgaXBoZXRoX2RldmljZSAqaXBob25lKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTE3NS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM6MTc2OnN0YXRpYyB2b2lkIGlwaGV0aF9raWxsX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMtMTc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYz00OTg9c3RhdGljIGludCBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDctXFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2ZGV2LVxcdTAwM2VjYXJyaWVyX3dvcmspO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYzo1MDg6XFx0aXBoZXRoX2tpbGxfdXJicyhkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9pcGhldGguYy01MDktXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaXBoZXRoLmM9Njc3PXN0YXRpYyB2b2lkIGlwaGV0aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4My1cXHRcXHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXFx1MDAzZW5ldCk7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jOjY4NDpcXHRcXHRpcGhldGhfa2lsbF91cmJzKGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jLTY4NS1cXHRcXHRpcGhldGhfZnJlZV91cmJzKGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjQyLjIwMzg4NjI2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzQ3MDk3MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwaGV0aF9raWxsX3VyYnNgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXBoZXRoX2tpbGxfdXJic2AuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGhhbmRsaW5nIHRoZSB0ZXJtaW5hdGlvbiBvciBjbGVhbnVwIG9mIFVSQnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gaS1waGQtZXRoIGRyaXZlciBvciByZWxhdGVkIHN5c3RlbS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRoaW5nIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycnVwdCBoYW5kbGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgc2NlbmFyaW9zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIFVSQiBwb2ludGVycywgc2hhcmVkIG1lbW9yeSBhY2Nlc3MsIG9yIGF0b21pY2l0eSBndWFyYW50ZWVzIGFyb3VuZCB0aGUgVVJCIGxpc3QuIEknbGwgbmVlZCB0byBwaW5wb2ludCBhbnkgYXJlYXMgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQvZW5hYmxlZCwgdG8gc2VlIGlmIHRoZXkgYXJlIHByb3Blcmx5IGhhbmRsZWQuIEFsc28sIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGluY29tcGxldGUgdHJhbnNhY3Rpb25zLCBlc3BlY2lhbGx5IGFueSBzaXR1YXRpb25zIHdoZXJlIGEgVVJCIGlzIHF1ZXVlZCBidXQgaXMgbm90IG1hcmtlZCB0byBhbGxvdyBzYWZlIHVubGlua2luZy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIOKAkyBhcmUgZmFpbGVkIFVSQiBzdWJtaXNzaW9ucyBoYW5kbGVkIGdyYWNlZnVsbHksIGFuZCBhcmUgcmVzb3VyY2VzIHByb3Blcmx5IGZyZWVkIGluIGFsbCBlcnJvciBwYXRocz8gSWYgdGhlcmUgYXJlIGFueSBsb2NrcywgaG93IGFyZSB0aGV5IGFjcXVpcmVkIGFuZCByZWxlYXNlZD8gQXJlIHRoZXkgZmluZS1ncmFpbmVkIGVub3VnaCwgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW5kaWNhdGlvbiBvZiBhIGxlYWsgb2YgVVJCczsgaXQgaXMgYSBjcml0aWNhbCByZXNvdXJjZSBhbmQgbXVzdCBiZSBjbGVhbmVkIHVwIHByb3Blcmx5LCBvciB0aGUgc3lzdGVtIHdpbGwgY3Jhc2ggdW5kZXIgbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjM1OjQ5LjU1MDk4Nzc4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXG4gMTY2OlxcdHN0YXRpYyB2b2lkIGlwaGV0aF9mcmVlX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmlwaG9uZSlcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdHVzYl9mcmVlX2NvaGVyZW50KGlwaG9uZS1cXHUwMDNldWRldiwgaXBob25lLVxcdTAwM2VyeF9idWZfbGVuLCBpcGhvbmUtXFx1MDAzZXJ4X2J1ZixcXG4gMTY5OlxcdFxcdFxcdFxcdCAgaXBob25lLVxcdTAwM2VyeF91cmItXFx1MDAzZXRyYW5zZmVyX2RtYSk7XFxuIDE3MDpcXHRcXHR1c2JfZnJlZV9jb2hlcmVudChpcGhvbmUtXFx1MDAzZXVkZXYsIElQSEVUSF9UWF9CVUZfU0laRSwgaXBob25lLVxcdTAwM2V0eF9idWYsXFxuIDE3MTpcXHRcXHRcXHRcXHQgIGlwaG9uZS1cXHUwMDNldHhfdXJiLVxcdTAwM2V0cmFuc2Zlcl9kbWEpO1xcbiAxNzI6XFx0XFx0dXNiX2ZyZWVfdXJiKGlwaG9uZS1cXHUwMDNlcnhfdXJiKTtcXG4gMTczOlxcdFxcdHVzYl9mcmVlX3VyYihpcGhvbmUtXFx1MDAzZXR4X3VyYik7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyB2b2lkIGlwaGV0aF9raWxsX3VyYnMoc3RydWN0IGlwaGV0aF9kZXZpY2UgKmRldilcXG4gMTc3OlxcdHtcXG4gMTc4OlxcdFxcdHVzYl9raWxsX3VyYihkZXYtXFx1MDAzZXR4X3VyYik7XFxuIDE3OTpcXHRcXHR1c2Jfa2lsbF91cmIoZGV2LVxcdTAwM2VyeF91cmIpO1xcbiAxODA6XFx0fVxcbiAxODE6XFx0XFxuIDE4MjpcXHRzdGF0aWMgaW50IGlwaGV0aF9jb25zdW1lX3NrYihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCBpcGhldGhfZGV2aWNlICpkZXYpXFxuIDE4MzpcXHR7XFxuIDE4NDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7XFxuIDE4NzpcXHRcXHRpZiAoIXNrYikge1xcbiAxODg6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcXG4gMTg5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxOTA6XFx0XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRza2JfcHV0X2RhdGEoc2tiLCBidWYsIGxlbik7XFxuIDE5MzpcXHRcXHRza2ItXFx1MDAzZWRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAxOTQ6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVxcdTAwM2VuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNTo0OS41NTExMTE2MDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0NDE1NzQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBgaXBoZXRoX2tpbGxfdXJicyhkZXYpO2Agd2l0aGluIGBpcGhldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClgLiBFc3NlbnRpYWxseSwgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIHVzaW5nIHRoZSBpcGhldGggZHJpdmVyIGlzIGNsb3NlZCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IGRvd24sIHRoaXMgZW5zdXJlcyB0aGF0IGFueSBpbi1mbGlnaHQgVHJhbnNtaXQgKFRYKSBhbmQgUmVjZWl2ZSAoUlgpIFVSQnMgYXJlIGltbWVkaWF0ZWx5IGNhbmNlbGVkIHN5bmNocm9ub3VzbHkgdXNpbmcgYHVzYl9raWxsX3VyYigpYC4gVGhpcyBpcyBnb29kLCBpdCBwcmV2ZW50cyB0aG9zZSBVUkJzIGZyb20gY29udGludWluZyB0byBydW4gb3IgY29tcGxldGUgYWZ0ZXIgdGhlIGRldmljZSBpcyBkZWFjdGl2YXRlZC4gSXQncyBhIGxpZmVjeWNsZSBmaXguIFByZXZpb3VzbHksIHRoaXMgbGFjayBvZiBjYW5jZWxsYXRpb24gY3JlYXRlZCB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIGFuZCB1bndhbnRlZCBwcm9jZXNzaW5nLCBzbyB0aGlzIGlzIGEgc29saWQgZml4LlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBLTVNBTiBzY3J1dGlueS4gSSBoYXZlIHRvIHRoaW5rIHRocm91Z2ggdGhlIHBvdGVudGlhbCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG4xLiAgKipEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSBleHBvc2VkPyoqIE5vLCBkZWZpbml0ZWx5IG5vdC5cbjIuICAqKkRvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyoqIEFic29sdXRlbHkgbm90LiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNhbGwgdG8gY2FuY2VsIFVSQnMuXG4zLiAgKipEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8qKiBOb3BlLiBKdXN0IFVSQiBjYW5jZWxsYXRpb24uXG40LiAgKipEb2VzIGl0IG1vZGlmeSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMsIHBvdGVudGlhbGx5IGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnM/KiogTm8gd2F5LCB0aGlzIGp1c3QgY2xlYW5zIHVwIHBlbmRpbmcgb3BlcmF0aW9ucy5cblxuVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQg4oCTIGNsZWFuaW5nIHVwIHJlc291cmNlcy4gVGhlIGFjdHVhbCBsb2dpYyBpcyBzaW1wbGUgYW5kIGNsZWFybHkgYWRkcmVzc2VzIGEga25vd24gaXNzdWUsIHdoaWNoIEkgYXNzdW1lIGlzIGFscmVhZHkgYmVpbmcgdHJhY2tlZCBieSBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGRldGVjdG9ycy4gIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSBjb25maXJtaW5nOlxuXG4qICAgYE5lZWRzS01TQU5gOiBmYWxzZVxuKiAgIGBLTVNBTlJlYXNvbmluZ2A6IENsZWFyIGV4cGxhbmF0aW9uLCBjb250cmFzdGluZyB0aGUgYXBwbGljYXRpb24gb2YgS0FTQU4vS01TQU4uXG5cbk9rYXksIEknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNywiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDozNjowMi45OTI2ODg2NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBpcGhldGhfa2lsbF91cmJzKGRldilgIGluIGBpcGhldGhfY2xvc2UoKWAgdG8gY2FuY2VsIGFjdGl2ZSBUWCBhbmQgUlggVVJCcyB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBicm91Z2h0IGRvd24uIFRoaXMgYWRkcmVzc2VzIFVSQiBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgcHJldmVudHMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdXBvbiBpbnRlcmZhY2UgdGVhcmRvd24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGlwaGV0aF9raWxsX3VyYnMoZGV2KWAgaW4gYGlwaGV0aF9jbG9zZSgpYCB0byBjYW5jZWwgYWN0aXZlIFRYIGFuZCBSWCBVUkJzIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGJyb3VnaHQgZG93bi4gVGhpcyBhZGRyZXNzZXMgVVJCIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB1cG9uIGludGVyZmFjZSB0ZWFyZG93biwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownlx22[1] Phase: Succeeded StartedAt: 2026-08-31 10:36:15 +0000 UTC FinishedAt: 2026-08-31 10:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 10:36:15 +0000 UTC FinishedAt: 2026-08-31 10:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2] Phase: Succeeded StartedAt: 2026-08-31 10:36:15 +0000 UTC FinishedAt: 2026-08-31 12:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 10:36:15 +0000 UTC FinishedAt: 2026-08-31 12:09:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 10:36:15 +0000 UTC FinishedAt: 2026-08-31 10:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 10:36:15 +0000 UTC FinishedAt: 2026-08-31 10:36:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownlx22/series-workflownlx22-convert-artifact-1631346758/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 10:36:25 +0000 UTC FinishedAt: 2026-08-31 10:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 10:36:25 +0000 UTC FinishedAt: 2026-08-31 10:52:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9bc30b4f-404b-4deb-a6b4-38504e21e798,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-workflownlx22/series-workflownlx22-convert-artifact-1631346758/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": "ad5cc9df-edff-484d-bbf0-3202b1537125", "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-workflownlx22/series-workflownlx22-build-action-2905157084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:36:25 +0000 UTC FinishedAt: 2026-08-31 10:52:39 +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:*9bc30b4f-404b-4deb-a6b4-38504e21e798,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-workflownlx22/series-workflownlx22-convert-artifact-1631346758/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": "ad5cc9df-edff-484d-bbf0-3202b1537125", "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-workflownlx22/series-workflownlx22-build-action-2905157084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 10:52:49 +0000 UTC FinishedAt: 2026-08-31 10:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 10:52:49 +0000 UTC FinishedAt: 2026-08-31 10:52:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 10:52:49 +0000 UTC FinishedAt: 2026-08-31 10:52:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 10:52:49 +0000 UTC FinishedAt: 2026-08-31 10:52:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownlx22/series-workflownlx22-convert-artifact-1088965529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 10:52:59 +0000 UTC FinishedAt: 2026-08-31 10:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 10:52:59 +0000 UTC FinishedAt: 2026-08-31 10:54:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad5cc9df-edff-484d-bbf0-3202b1537125,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-workflownlx22/series-workflownlx22-build-action-2905157084/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-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 10:54:52 +0000 UTC FinishedAt: 2026-08-31 10:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:54:52 +0000 UTC FinishedAt: 2026-08-31 10:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 10:54:52 +0000 UTC FinishedAt: 2026-08-31 11:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 10:54:52 +0000 UTC FinishedAt: 2026-08-31 11:13:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9bc30b4f-404b-4deb-a6b4-38504e21e798,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-workflownlx22/series-workflownlx22-convert-artifact-1088965529/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": "5138063a-87cc-48c7-ac93-5d0cd39c0ba1", "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-workflownlx22/series-workflownlx22-build-action-3033684725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:54:52 +0000 UTC FinishedAt: 2026-08-31 11:13:15 +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:*9bc30b4f-404b-4deb-a6b4-38504e21e798,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-workflownlx22/series-workflownlx22-convert-artifact-1088965529/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": "5138063a-87cc-48c7-ac93-5d0cd39c0ba1", "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-workflownlx22/series-workflownlx22-build-action-3033684725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 11:13:25 +0000 UTC FinishedAt: 2026-08-31 11:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 11:13:25 +0000 UTC FinishedAt: 2026-08-31 11:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 11:13:25 +0000 UTC FinishedAt: 2026-08-31 11:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 11:13:25 +0000 UTC FinishedAt: 2026-08-31 11:15:07 +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:*5138063a-87cc-48c7-ac93-5d0cd39c0ba1,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-workflownlx22/series-workflownlx22-build-action-3033684725/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-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 12:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 12:09:48 +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":["ipheth_close"],"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:*ad5cc9df-edff-484d-bbf0-3202b1537125,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5138063a-87cc-48c7-ac93-5d0cd39c0ba1,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-workflownlx22/series-workflownlx22-build-action-2905157084/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-workflownlx22/series-workflownlx22-build-action-3033684725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 11:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 11:15:21 +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":["ipheth_close"],"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-workflownlx22/series-workflownlx22-convert-artifact-1851892110/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 11:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 11:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 11:15:17 +0000 UTC FinishedAt: 2026-08-31 11:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 11:15:27 +0000 UTC FinishedAt: 2026-08-31 12:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownlx22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipheth_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_IPHETH","USB_NET_DRIVERS","USB","NET"],"series_id":"4323ea57-894f-4d51-b71d-0a2d84f49f1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 11:15:27 +0000 UTC FinishedAt: 2026-08-31 12:09:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad5cc9df-edff-484d-bbf0-3202b1537125,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5138063a-87cc-48c7-ac93-5d0cd39c0ba1,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-workflownlx22/series-workflownlx22-build-action-2905157084/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-workflownlx22/series-workflownlx22-build-action-3033684725/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-workflownlx22/series-workflownlx22-convert-artifact-1851892110/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,}