Name: series-workflowcxgd4 Phase: Succeeded StartedAt: 2026-08-01 02:27:07 +0000 UTC FinishedAt: 2026-08-01 04:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[0] Phase: Succeeded StartedAt: 2026-08-01 02:27:07 +0000 UTC FinishedAt: 2026-08-01 02:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 02:27:07 +0000 UTC FinishedAt: 2026-08-01 02:52:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "fbcae62b-40ac-470a-8d1a-6174faa8802f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dibs_dev_alloc", "dibs_dev_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgICAmIzM0O2RpYnNfZGV2X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzLVx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYjJmZjM1MTE1YmIyMzU3ODc0ZTE5YmUxMTgxNmFhOGVhYTgyMjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMjo1MDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbmluZGV4IDE0YzNlMmQ4NDkwMmUuLjRjMjZmZDA2OTczZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xuQEAgLTEzOCw2ICYjNDM7MTM4LDcgQEAgc3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKVxuIFx0ZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTtcbiBcdGlmICghZGlicylcbiBcdFx0cmV0dXJuIGRpYnM7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbiBcdGRpYnMtXHUwMDNlZGV2LnJlbGVhc2UgPSBkaWJzX2Rldl9yZWxlYXNlO1xuIFx0ZGlicy1cdTAwM2VkZXYuY2xhc3MgPSBcdTAwMjZkaWJzX2NsYXNzO1xuIFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuQEAgLTE4Niw3ICYjNDM7MTg3LDYgQEAgaW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gXHRpbnQgaSwgcmV0O1xuIFxuIFx0bWF4X2RtYnMgPSBkaWJzLVx1MDAzZW9wcy1cdTAwM2VtYXhfZG1icygpO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbiBcdGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FyciA9IGt6YWxsb2MobWF4X2RtYnMsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGlicy5oIGIvaW5jbHVkZS9saW51eC9kaWJzLmhcbmluZGV4IGM3NTYwN2Y4YTVjZjkuLmQzZTA3NzdmMjVhZTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RpYnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kaWJzLmhcbkBAIC00MzksNyAmIzQzOzQzOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZGlic19nZXRfcHJpdihzdHJ1Y3QgZGlic19kZXYgKmRldixcbiAvKipcbiAgKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlXG4gICpcbi0gKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldlxuJiM0MzsgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldiwgbG9ja1xuICAqIE5PVEU6IFVzZSBwdXRfZGV2aWNlKGRpYnNfZ2V0X2RldihAZGlicykpIHRvIGdpdmUgdXAgeW91ciByZWZlcmVuY2UgaW5zdGVhZFxuICAqIG9mIGZyZWVpbmcgQGRpYnMgQGRldiBkaXJlY3RseSBvbmNlIHlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgdGhpc1xuICAqIGZ1bmN0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWJzX2Rldl9hbGxvYyYjMzQ7LAogICAgJiMzNDtkaWJzX2Rldl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZGlicy1cdTAwM2Vsb2NrYCBzcGlubG9jayBmcm9tIGBkaWJzX2Rldl9hZGRgIHRvIGBkaWJzX2Rldl9hbGxvY2AuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgdGhlIGxvY2sgY291bGQgYmUgdXNlZCB1bmluaXRpYWxpemVkIGlmIGFuIGludGVycnVwdCBvY2N1cnMgb3IgYSBjbGVhbnVwIHBhdGggaXMgdGFrZW4gYmVmb3JlIGBkaWJzX2Rldl9hZGRgIGlzIGNhbGxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHRoZSBjb3JlIERJQlMgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGIyZmYzNTExNWJiMjM1Nzg3NGUxOWJlMTE4MTZhYThlYWE4MjIyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDI6NTA6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMKaW5kZXggMTRjM2UyZDg0OTAyZS4uNGMyNmZkMDY5NzNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uYwpAQCAtMTM4LDYgJiM0MzsxMzgsNyBAQCBzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpCiAJZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTsKIAlpZiAoIWRpYnMpCiAJCXJldHVybiBkaWJzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2RpYnMtJmd0O2xvY2spOwogCWRpYnMtJmd0O2Rldi5yZWxlYXNlID0gZGlic19kZXZfcmVsZWFzZTsKIAlkaWJzLSZndDtkZXYuY2xhc3MgPSAmYW1wO2RpYnNfY2xhc3M7CiAJZGV2aWNlX2luaXRpYWxpemUoJmFtcDtkaWJzLSZndDtkZXYpOwpAQCAtMTg2LDcgJiM0MzsxODcsNiBAQCBpbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicykKIAlpbnQgaSwgcmV0OwogCiAJbWF4X2RtYnMgPSBkaWJzLSZndDtvcHMtJmd0O21heF9kbWJzKCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFtcDtkaWJzLSZndDtsb2NrKTsKIAlkaWJzLSZndDtkbWJfY2xpZW50aWRfYXJyID0ga3phbGxvYyhtYXhfZG1icywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkaWJzLSZndDtkbWJfY2xpZW50aWRfYXJyKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGlicy5oIGIvaW5jbHVkZS9saW51eC9kaWJzLmgKaW5kZXggYzc1NjA3ZjhhNWNmOS4uZDNlMDc3N2YyNWFlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kaWJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kaWJzLmgKQEAgLTQzOSw3ICYjNDM7NDM5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpkaWJzX2dldF9wcml2KHN0cnVjdCBkaWJzX2RldiAqZGV2LAogLyoqCiAgKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogVGhlIGZvbGxvd2luZyBmaWVsZHMgd2lsbCBiZSB2YWxpZCB1cG9uIHN1Y2Nlc3NmdWwgcmV0dXJuOiBkZXYKJiM0MzsgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldiwgbG9jawogICogTk9URTogVXNlIHB1dF9kZXZpY2UoZGlic19nZXRfZGV2KEBkaWJzKSkgdG8gZ2l2ZSB1cCB5b3VyIHJlZmVyZW5jZSBpbnN0ZWFkCiAgKiBvZiBmcmVlaW5nIEBkaWJzIEBkZXYgZGlyZWN0bHkgb25jZSB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgY2FsbGVkIHRoaXMKICAqIGZ1bmN0aW9uLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGlicyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCBhbmQgYGluY2x1ZGUvbGludXgvZGlicy5oYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIG1vdmluZyBgc3Bpbl9sb2NrX2luaXQoJmFtcDtkaWJzLSZndDtsb2NrKTtgIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBGdW5jdGlvbmFsbHksIHRoaXMgaW5pdGlhbGl6ZXMgdGhlIGxvY2sgZWFybGllci4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlcmUgd2FzIHBvdGVudGlhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbG9jayBpc3N1ZS4gSWYgdGhlIGxvY2sgd2FzIGJlaW5nIHVzZWQgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgd2FzIGNhbGxlZCwgb3IsIGlmIGBkaWJzX2Rldl9hZGRgIHdhc24mIzM5O3QgYWx3YXlzIGNhbGxlZCwgdGhlbiB3ZSYjMzk7ZCBoYXZlIGEgcHJvYmxlbS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gb3IgcG90ZW50aWFsIHVzZS1iZWZvcmUtaW5pdGlhbGl6YXRpb24gYnVnLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIGNvbXBpbGVyLgoKRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgYGRpYnNgIGFjdHVhbGx5ICppcyouIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgaW4gYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AsIG9mIGNvdXJzZS4gT2theSwgbm93LCB3aGF0IGRvZXMgYGRpYnNgIHJlZmVyIHRvIGV4YWN0bHk/IEJldHRlciBkb3VibGUtY2hlY2sgd2hhdCB0aGUgc3RydWN0dXJlIGlzIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6aW5nLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUuIEkmIzM5O2xsIGdyZXAgZm9yIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBOZWVkIHRvIHNlZSB0aGUgY2FsbCBzaXRlcyB0byB0aG9zZSBmdW5jdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlIGBkaWJzYCBkZXZpY2UgaXMgYWxsb2NhdGVkIGFuZCBhZGRlZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBmb3IgdGhlIHVuaW5pdGlhbGl6ZWQgbG9jayBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2Rldl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zMDY9c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzE1LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMTY6XHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzE3LVx0aWYgKCFkaWJzKSB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMzgtXHRrZnJlZShkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMzk6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVx0cHV0X2RldmljZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNDY9c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTItXHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTQtXHRwdXRfZGV2aWNlKFx1MDAyNmxvX2Rldi1cdTAwM2VkaWJzLVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTEyNT1zdGF0aWMgdm9pZCBkaWJzX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTMzLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjEzNDpzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTQ3LX1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpdmluZyBpbnRvIHRoZSAmIzM0O0RpYnMmIzM0OyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gYnVybmluZzogd2hhdCBleGFjdGx5IGlzIHRoaXMgJiMzNDtkaWJzJiMzNDsgdGhpbmcgYWxsIGFib3V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdHJ1ZSBtZWFuaW5nIOKAkyBpdHMgcHVycG9zZSBhbmQgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuY292ZXIgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbi4gSSBrbm93IGl0IG11c3QgYmUgc29tZXdoZXJlIHdpdGhpbiB0aGUgc3lzdGVtLgoKRm9sbG93aW5nIHRoYXQsIGl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ga25vdyAqd2hhdCogaXQgaXMsIEkgaGF2ZSB0byBrbm93ICpob3cqIGl0JiMzOTtzIGltcGxlbWVudGVkLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgYWN0dWFsbHkgZW5hYmxlIG9yIGNvbnRyb2wgJiMzNDtkaWJzLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgdHJpZ2dlcnMg4oCTIGV2ZXJ5dGhpbmcuIEkgd2FudCB0aGUgY29tcGxldGUgcGljdHVyZSwgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERJQlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIERJQlM6IENoZWNraW5nIHRoZSBLY29uZmlnKioKCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIGNsZWFybHkgRElCUywgb3IgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nLiBJIGtub3cgdGhpcyBhcmNoaXRlY3R1cmUsIHNvIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGluLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQtdGltZSBjb250cm9scyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmZWF0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIHdpbGwgcXVpY2tseSBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBpdCBoYXMgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gcXVpY2tseSBhc3Nlc3MgYSBuZXcgb3IgdW5mYW1pbGlhciBhcmNoaXRlY3R1cmUgZmVhdHVyZS4gSXQmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgZm91bmRhdGlvbiBmb3IgdGhlIGRlZXAgZGl2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0Y29uZmlnIERJQlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG5cbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcbiAgIDc6XHRcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcbiAgIDg6XHRcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXG4gICA5Olx0XG4gIDEwOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXG4gIDExOlx0XHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cbiAgMTI6XHRcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIERJQlNfTE9cbiAgMTU6XHRcdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIERJQlNcbiAgMTc6XHRcdGRlZmF1bHQgblxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXG4gIDIwOlx0XHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cbiAgMjE6XHRcdCAgb2NjdXJzIHdpdGhpbiB0aGUgc2FtZSBPUy4gVGhpcyBoZWxwcyBpbiBjb252ZW5pZW50IHRlc3Rpbmcgb2ZcbiAgMjI6XHRcdCAgZGlicyBjbGllbnRzLCBzaW5jZSBkaWJzIGxvb3BiYWNrIGlzIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZSBvclxuICAyMzpcdFx0ICBoYXJkd2FyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBESUJTIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBpdCBpbnZvbHZlcyBhcmUgYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgdGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBtb3ZpbmcgYHNwaW5fbG9ja19pbml0KCZhbXA7ZGlicy0mZ3Q7bG9jayk7YCBpbnRvIGBkaWJzX2Rldl9hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCBleGFjdGx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UsIG9yIGFyZSBub3cgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBtb2RpZmljYXRpb24uIAoKSXQgbG9va3MgbGlrZSBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBhcmUgdGhlIHR3byBtYWpvciBwbGF5ZXJzIGhlcmUsIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbi4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBvdmVyYWxsIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgc2NoZW1lIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19kZXZfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMzAtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMzMTpcdHJldCA9IGRpYnNfZGV2X2FkZChkaWJzKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRpYnNfZGV2X2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE4My1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxODQ6aW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTg1LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjI0LX1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMjU6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWRkKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6CgoqKkV4YW1pbmluZyBESUJTIERyaXZlciBBbGxvY2F0aW9uICZhbXA7IEFkZGl0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgRElCUyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBhZGRpdGlvbiBsb2dpYywgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByaW1hcnkgZGV2aWNlIG1hbmFnZW1lbnQgc2hvdWxkIHJlc2lkZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBuZXcgRElCUyBkZXZpY2VzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZW4gaW5jb3Jwb3JhdGVkIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGVzZSBtZWNoYW5pc21zIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcGlucG9pbnRpbmcgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcbiAxMzE6XHRcdGtmcmVlKGRpYnMpO1xuIDEzMjpcdH1cbiAxMzM6XHRcbiAxMzQ6XHRzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuIDEzNzpcdFxuIDEzODpcdFx0ZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTtcbiAxMzk6XHRcdGlmICghZGlicylcbiAxNDA6XHRcdFx0cmV0dXJuIGRpYnM7XG4gMTQxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxvY2spO1xuIDE0MjpcdFx0ZGlicy1cdTAwM2VkZXYucmVsZWFzZSA9IGRpYnNfZGV2X3JlbGVhc2U7XG4gMTQzOlx0XHRkaWJzLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmRpYnNfY2xhc3M7XG4gMTQ0Olx0XHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRyZXR1cm4gZGlicztcbiAxNDc6XHR9XG4gMTQ4Olx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xuIDE0OTpcdFxuIDE1MDpcdHN0YXRpYyBzc2l6ZV90IGdpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTUxOlx0XHRcdFx0Y2hhciAqYnVmKVxuIDE1MjpcdHtcbiAxNTM6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAxNTQ6XHRcbiAxNTU6XHRcdGRpYnMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGlic19kZXYsIGRldik7XG4gMTU2Olx0XG4gMTU3Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwVWJcXG5cJiMzNDssIFx1MDAyNmRpYnMtXHUwMDNlZ2lkKTtcbiAxNTg6XHR9XG4gMTU5Olx0c3RhdGljIERFVklDRV9BVFRSX1JPKGdpZCk7XG4gMTYwOlx0XG4gMTYxOlx0c3RhdGljIHNzaXplX3QgZmFicmljX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiAxNjI6XHRcdFx0XHQgICAgICBjaGFyICpidWYpXG4gMTYzOlx0e1xuIDE2NDpcdFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuIDE2NTpcdFx0dTE2IGZhYnJpY19pZDtcbiAxNjY6XHRcbiAxNjc6XHRcdGRpYnMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGlic19kZXYsIGRldik7XG4gMTY4Olx0XHRmYWJyaWNfaWQgPSBkaWJzLVx1MDAzZW9wcy1cdTAwM2VnZXRfZmFicmljX2lkKGRpYnMpO1xuIDE2OTpcdFxuIDE3MDpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsweCUwNHhcXG5cJiMzNDssIGZhYnJpY19pZCk7XG4gMTcxOlx0fVxuIDE3MjpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhmYWJyaWNfaWQpO1xuIDE3MzpcdFxuIDE3NDpcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaWJzX2Rldl9hdHRyc1tdID0ge1xuIDE3NTpcdFx0XHUwMDI2ZGV2X2F0dHJfZ2lkLmF0dHIsXG4gMTc2Olx0XHRcdTAwMjZkZXZfYXR0cl9mYWJyaWNfaWQuYXR0cixcbiAxNzc6XHRcdE5VTEwsXG4gMTc4Olx0fTtcbiAxNzk6XHRcbiAxODA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkaWJzX2Rldl9hdHRyX2dyb3VwID0ge1xuIDE4MTpcdFx0LmF0dHJzID0gZGlic19kZXZfYXR0cnMsXG4gMTgyOlx0fTtcbiAxODM6XHRcbiAxODQ6XHRpbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbiAxODU6XHR7XG4gMTg2Olx0XHRpbnQgbWF4X2RtYnM7XG4gMTg3Olx0XHRpbnQgaSwgcmV0O1xuIDE4ODpcdFxuIDE4OTpcdFx0bWF4X2RtYnMgPSBkaWJzLVx1MDAzZW9wcy1cdTAwM2VtYXhfZG1icygpO1xuIDE5MDpcdFx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyID0ga3phbGxvYyhtYXhfZG1icywgR0ZQX0tFUk5FTCk7XG4gMTkxOlx0XHRpZiAoIWRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycilcbiAxOTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTkzOlx0XHRtZW1zZXQoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyLCBOT19ESUJTX0NMSUVOVCwgbWF4X2RtYnMpO1xuIDE5NDpcdFxuIDE5NTpcdFx0cmV0ID0gZGV2aWNlX2FkZChcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gMTk2Olx0XHRpZiAocmV0KVxuIDE5NzpcdFx0XHRnb3RvIGZyZWVfY2xpZW50X2FycjtcbiAxOTg6XHRcbiAxOTk6XHRcdHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZkaWJzLVx1MDAzZWRldi5rb2JqLCBcdTAwMjZkaWJzX2Rldl9hdHRyX2dyb3VwKTtcbiAyMDA6XHRcdGlmIChyZXQpIHtcbiAyMDE6XHRcdFx0ZGV2X2VycihcdTAwMjZkaWJzLVx1MDAzZWRldiwgXCYjMzQ7c3lzZnNfY3JlYXRlX2dyb3VwIGZhaWxlZCBmb3IgZGlic19kZXZcXG5cJiMzNDspO1xuIDIwMjpcdFx0XHRnb3RvIGVycl9kZXZpY2VfZGVsO1xuIDIwMzpcdFx0fVxuIDIwNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcbiAyMDU6XHRcdG11dGV4X2xvY2soXHUwMDI2Y2xpZW50c19sb2NrKTtcbiAyMDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heF9jbGllbnQ7ICYjNDM7JiM0MztpKSB7XG4gMjA3Olx0XHRcdGlmIChjbGllbnRzW2ldKSB7XG4gMjA4Olx0XHRcdFx0Y2xpZW50c1tpXS1cdTAwM2VvcHMtXHUwMDNlYWRkX2RldihkaWJzKTtcbiAyMDk6XHRcdFx0XHRkaWJzX3NldHVwX2ZvcndhcmRpbmcoY2xpZW50c1tpXSwgZGlicyk7XG4gMjEwOlx0XHRcdH1cbiAyMTE6XHRcdH1cbiAyMTI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjbGllbnRzX2xvY2spO1xuIDIxMzpcdFx0bGlzdF9hZGQoXHUwMDI2ZGlicy1cdTAwM2VsaXN0LCBcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QpO1xuIDIxNDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpYnNfZGV2X2xpc3QubXV0ZXgpO1xuIDIxNTpcdFxuIDIxNjpcdFx0cmV0dXJuIDA7XG4gMjE3Olx0XG4gMjE4Olx0ZXJyX2RldmljZV9kZWw6XG4gMjE5Olx0XHRkZXZpY2VfZGVsKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbiAyMjA6XHRmcmVlX2NsaWVudF9hcnI6XG4gMjIxOlx0XHRrZnJlZShkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xuIDIyMjpcdFx0cmV0dXJuIHJldDtcbiAyMjM6XHRcbiAyMjQ6XHR9XG4gMjI1Olx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWRkKTtcbiAyMjY6XHRcbiAyMjc6XHR2b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gMjI4Olx0e1xuIDIyOTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCBmb3IgRElCUyBEZXZpY2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgZnVuZGFtZW50YWwgaXNzdWUgaW4gdGhlIERJQlMgZGV2aWNlIG1hbmFnZW1lbnQgY29kZS4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIGJ1ZyB3aGVyZSB0aGUgYGRpYnMtJmd0O2xvY2tgIHNwaW5sb2NrIGlzIGJlaW5nIHVzZWQgYmVmb3JlIHRoZSBgZGlic19kZXZfYWRkYCBmdW5jdGlvbiBpcyBjYWxsZWQsIG9yIHBvdGVudGlhbGx5IGV2ZW4gd2hlbiBgZGlic19kZXZfYWRkYCBpcyBuZXZlciBjYWxsZWQgYXQgYWxsLiBUaGUgdW5kZXJseWluZyBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSB0aGUgc2VxdWVuY2Ugb2YgZGV2aWNlIGFsbG9jYXRpb24gYW5kIGFkZGl0aW9uOiBgZGlic19kZXZfYWxsb2NgIGhhbmRsZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCB0aGVuIGBkaWJzX2Rldl9hZGRgIHN1YnNlcXVlbnRseSBhZGRzIHRoaXMgZGV2aWNlIHRvIHRoZSBicm9hZGVyIHN5c3RlbS4gSWYgZm9yIHNvbWUgcmVhc29uIGBkaWJzX2Rldl9hZGRgIGlzbiYjMzk7dCBpbnZva2VkICphZnRlciogYWxsb2NhdGlvbiwgYW5kIHlldCB0aGUgZGV2aWNlIGlzIGZyZWVkLCBvciwgd29yc2UsIHNvbWUgb3RoZXIgY29kZSB0cmllcyB0byB1c2UgdGhlIGRldmljZSAqYmVmb3JlKiBpdCBoYXMgYmVlbiBwcm9wZXJseSBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSB2aWEgdGhlIGNhbGwgdG8gYGRpYnNfZGV2X2FkZGAsIHdlJiMzOTt2ZSBnb3QgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSByYWNlIGNvbmRpdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgYmFkbmVzcy4KClRoZSBzb2x1dGlvbiBiZWluZyBwcm9wb3NlZCBpcyB0byBtb3ZlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3BpbmxvY2ssIGBzcGluX2xvY2tfaW5pdCgmYW1wO2RpYnMtJmd0O2xvY2spYCwgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBpbnNpZGUgYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBpcyBlbnN1cmluZyB0aGUgbG9jayBpcyBpbml0aWFsaXplZCAqYXQgdGhlIHBvaW50IG9mIGRldmljZSBhbGxvY2F0aW9uKi4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgYXBwcm9hY2ggdG8gYWRkcmVzcyB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggdGhlIGBESUJTYCBhbmQgYERJQlNfTE9gIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBjb3ZlcmFnZSB3ZSBuZWVkLiBBbmQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBhcmUgZ29pbmcgdG8gYmUgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IG1heSBiZSBleGVyY2lzZWQuCgpXYWl0IGEgbWludXRlLCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBhcmUgZXhwb3J0ZWQgc3ltYm9scywgbWVhbmluZyBkcml2ZXJzIGFyZSBsaWtlbHkgY2FsbGluZyB0aGVtLiBUaGlzIGFkZHMgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIHRoZSByZXZpZXcgYW5kIHRlc3RpbmcuIFdlIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgZHJpdmVyIHVzYWdlIGlzIGNvcnJlY3QhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IGRyaXZlcnMgdXRpbGl6aW5nIHRoZXNlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19kZXZfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzA2PXN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzE2Olx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cdGlmICghZGlicykge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVx0a2ZyZWUoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5Olx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0MC1cdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTM6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU0LVx0cHV0X2RldmljZShcdTAwMjZsb19kZXYtXHUwMDNlZGlicy1cdTAwM2VkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBkaWJzX2xvX2Rldl9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBjb250ZXh0IGhlcmUgY2xlYXJseSBwb2ludHMgdG8gYSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGNhbGxlZCBgZGlic19sb19kZXZfcHJvYmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5ICp3aGF0KiBpdCBpcy4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCBsaWtlbHkgaW52b2x2ZXMgRGV2aWNlIEluaXRpYWxpemF0aW9uIEJsb2NrIFN1YnN5c3RlbSAoZGlicykgYW5kIGl0IGlzIGxvdy1sZXZlbCwgYSBwcm9iZS4gTXkgZXhwZXJpZW5jZSBpcyB0aGF0IGEgcHJvYmUgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGRldmljZSBkaXNjb3Zlcnkgb3IgaW5pdGlhbGl6YXRpb24gcm91dGluZSB3aXRoaW4gdGhlIGtlcm5lbCwgcXVpdGUgcG9zc2libHkgc3BlY2lmaWMgdG8gYSBzdG9yYWdlIG9yIEkvTyBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSXMgaXQgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBuZXcgaGFyZHdhcmU/IElzIGl0IHBhcnQgb2YgYSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IElzIHRoaXMgc29tZSBzb3J0IG9mIGVhcmx5IGJvb3Qgc3RhZ2UgY29tcG9uZW50PyBUaGUgJiMzNDtsbyYjMzQ7IHByZWZpeCBjb3VsZCBiZSBhIHJlZmVyZW5jZSB0byBhIExvdyBPdXRwdXQuIE15IGd1dCB0ZWxscyBtZSBJIHNob3VsZCBjaGVjayBrZXJuZWwgc291cmNlIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBkaWJzIHN1YnN5c3RlbSBvciBzdG9yYWdlIGRyaXZlcnMsIGFuZCBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGlkZW50aWZpZXIgd2l0aCBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgbG9nZ2luZyBtZXNzYWdlcyBpbiB0aGUgc3lzdGVtLiBUaGUgc3BlY2lmaWNzIGFyZSBrZXkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGNhbGxlZC4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2VzIG9yIGJ1cyBzeXN0ZW1zLiBVbmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHdvcmtmbG93IHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0c3RhdGljIHZvaWQgZGlic19sb19kZXZfZXhpdChzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2NudCkpXG4gMzAzOlx0XHRcdHdhaXRfZXZlbnQobGRldi1cdTAwM2VsZGV2X3JlbGVhc2UsICFhdG9taWNfcmVhZChcdTAwMjZsZGV2LVx1MDAzZWRtYl9jbnQpKTtcbiAzMDQ6XHR9XG4gMzA1Olx0XG4gMzA2Olx0c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxuIDMwNzpcdHtcbiAzMDg6XHRcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbiAzMDk6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAzMTA6XHRcdGludCByZXQ7XG4gMzExOlx0XG4gMzEyOlx0XHRsZGV2ID0ga3phbGxvY19vYmooKmxkZXYpO1xuIDMxMzpcdFx0aWYgKCFsZGV2KVxuIDMxNDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMTU6XHRcbiAzMTY6XHRcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuIDMxNzpcdFx0aWYgKCFkaWJzKSB7XG4gMzE4Olx0XHRcdGtmcmVlKGxkZXYpO1xuIDMxOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMjA6XHRcdH1cbiAzMjE6XHRcbiAzMjI6XHRcdGxkZXYtXHUwMDNlZGlicyA9IGRpYnM7XG4gMzIzOlx0XHRkaWJzLVx1MDAzZWRydl9wcml2ID0gbGRldjtcbiAzMjQ6XHRcdGRpYnNfbG9fZGV2X2luaXQobGRldik7XG4gMzI1Olx0XHR1dWlkX2dlbihcdTAwMjZkaWJzLVx1MDAzZWdpZCk7XG4gMzI2Olx0XHRkaWJzLVx1MDAzZW9wcyA9IFx1MDAyNmRpYnNfbG9fb3BzO1xuIDMyNzpcdFxuIDMyODpcdFx0ZGlicy1cdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcbiAzMjk6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZkaWJzLVx1MDAzZWRldiwgXCYjMzQ7JXNcJiMzNDssIGRpYnNfbG9fZGV2X25hbWUpO1xuIDMzMDpcdFxuIDMzMTpcdFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xuIDMzMjpcdFx0aWYgKHJldClcbiAzMzM6XHRcdFx0Z290byBlcnJfcmVnO1xuIDMzNDpcdFx0bG9fZGV2ID0gbGRldjtcbiAzMzU6XHRcdHJldHVybiAwO1xuIDMzNjpcdFxuIDMzNzpcdGVycl9yZWc6XG4gMzM4Olx0XHRrZnJlZShkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xuIDMzOTpcdFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG4gMzQwOlx0XHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbiAzNDE6XHRcdGtmcmVlKGxkZXYpO1xuIDM0MjpcdFxuIDM0MzpcdFx0cmV0dXJuIHJldDtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0aWYgKCFsb19kZXYpXG4gMzQ5Olx0XHRcdHJldHVybjtcbiAzNTA6XHRcbiAzNTE6XHRcdGRpYnNfZGV2X2RlbChsb19kZXYtXHUwMDNlZGlicyk7XG4gMzUyOlx0XHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XG4gMzUzOlx0XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbiAzNTQ6XHRcdHB1dF9kZXZpY2UoXHUwMDI2bG9fZGV2LVx1MDAzZWRpYnMtXHUwMDNlZGV2KTtcbiAzNTU6XHRcdGtmcmVlKGxvX2Rldik7XG4gMzU2Olx0XHRsb19kZXYgPSBOVUxMO1xuIDM1NzpcdH1cbiAzNTg6XHRcbiAzNTk6XHRpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXG4gMzYwOlx0e1xuIDM2MTpcdFx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XG4gMzYyOlx0fVxuIDM2MzpcdFxuIDM2NDpcdHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXG4gMzY1Olx0e1xuIDM2NjpcdFx0ZGlic19sb19kZXZfcmVtb3ZlKCk7XG4gMzY3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBkaWJzX2xvX2Rldl9wcm9iZWAqKgoKUmlnaHQsIHNvIGBkaWJzX2xvX2Rldl9wcm9iZWAuIEkmIzM5O20gc3RhcnRpbmcgZnJvbSB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0JiMzOTtzIGJlaW5nIGludm9rZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgYW5kIHRoZSBjYWxsIHN0YWNrIHN1Z2dlc3RzIGl0JiMzOTtzIGNvbWluZyBmcm9tIGBkaWJzX2xvb3BiYWNrX2luaXRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGRldmljZSBwcm9iZSBmdW5jdGlvbiBzbyBpdCBzdGFuZHMgdG8gcmVhc29uIGl0JiMzOTtzIHRpZWQgdG8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBhdCBzdGFydHVwLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gdHJhY2Ugd2hlcmUgYGRpYnNfbG9vcGJhY2tfaW5pdGAgaXRzZWxmIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBkZXBlbmRlbmN5IGZsb3csIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyBpdCBhbmQgYW55IHBvdGVudGlhbCB0aW1pbmcgaXNzdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19sb29wYmFja19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1OC1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzU5OmludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oPTM1PXN0cnVjdCBkaWJzX2xvX2RldiB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00My1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDQ6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDUtdm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ2LSNlbHNlXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjQ3OnN0YXRpYyBpbmxpbmUgaW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00OC17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTI1ND1zdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjYxLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjI2MjpcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjYzLVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzIyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgTW9kdWxlIFNldHVwKioKClJpZ2h0LCBzbyBgZGlic19sb29wYmFja19pbml0YCBpcyBpbnZva2VkIGZyb20gYGRpYnNfaW5pdGAuIGBkaWJzX2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzbiYjMzk7dCBzb21ldGhpbmcgdHJpZ2dlcmVkIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyBoYXBwZW5pbmcgYXMgcGFydCBvZiB0aGUgc3lzdGVtJiMzOTtzIHNldHVwIHByb2Nlc3Mgd2hlbiB0aGUgbW9kdWxlIGxvYWRzLgoKTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGxvY2F0aW9uLgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gZWxzZSBpcyBjYWxsaW5nIGBkaWJzX2Rldl9hbGxvY2AuIEl0IHNlZW1zIHRvIG1lIHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIHdvdWxkIGJyaW5nIGJldHRlciBpbnNpZ2h0cy4gVGltZSB0byBkbyBhIHF1aWNrIGdyZXAgc2VhcmNoIG9uIHRoZSB3aG9sZSBrZXJuZWwgZm9yIGNhbGxzIHRvIGBkaWJzX2Rldl9hbGxvY2AgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzA2PXN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzE2Olx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cdGlmICghZGlicykge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVx0a2ZyZWUoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5Olx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0MC1cdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTM6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU0LVx0cHV0X2RldmljZShcdTAwMjZsb19kZXYtXHUwMDNlZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0xMjU9c3RhdGljIHZvaWQgZGlic19kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxMzQ6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzNS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0Ny19XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTQ4OkVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2FsbG9jKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NTk0PXN0YXRpYyBpbnQgaXNtX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI0LVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjI1Olx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02MjYtXHRpZiAoIWRpYnMpIHtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjAtZXJyX2RpYnM6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2NjE6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY2Mi1cdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY3ND1zdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY4MC1cdGlzbV9kZXZfZXhpdChpc20pO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjgxOlx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODItXHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00Mjk9c3RhdGljIGlubGluZSB2b2lkICpkaWJzX2dldF9wcml2KHN0cnVjdCBkaWJzX2RldiAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTQzOS0vKipcbmluY2x1ZGUvbGludXgvZGlicy5oOjQ0MDogKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDEtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDctICovXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDg6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZGlicy5oLTQ0OS0vKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgczM5MCBTcGVjaWZpY2l0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIGBkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuY2AgZmlsZSBhbmQgSSBzZWUgdGhlIGNhbGwgdG8gYGRpYnNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBkaWJzYCBmdW5jdGlvbiBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGF0IGBpc21fZHJ2LmNgIGlzIGV4cGxpY2l0bHkgYW4gczM5MCBkcml2ZXIsIGl0IHJhaXNlcyB0aGUgcXVlc3Rpb24uCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgZmlsZS4gWWVzLCBjb25maXJtZWQsIGl0IHJlZmVycyB0byAmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0JiMzNDsuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoYXQgKm9ubHkqIGZvciBzMzkwPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHdpdGggYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYCB0byBiZSBzdXJlLCBhbmQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNlIHdpdGhpbiB0aGUgczM5MCBuZXR3b3JraW5nIGRyaXZlci4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVNNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnPTc4PWNvbmZpZyBDQ1dHUk9VUFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZy04MS1cbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZzo4Mjpjb25maWcgSVNNXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBJU00gdlBDSSBBZGFwdGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDUwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGlicyBEcml2ZXIgVXNhZ2UqKgoKT2theSwgc28gYElTTWAgaXMgZGVmaW5pdGVseSBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciwgbm8gc3VycHJpc2VzIHRoZXJlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBESUJTX0xPYCBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYSBsb29wYmFjayBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkga25vdyB0aGF0IGtpbmQgb2YgdGhpbmcgaXMgaGVscGZ1bCBmb3IgdGVzdGluZywgZXNwZWNpYWxseSBmb3IgZGlicyBjbGllbnRzLiBUaGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSYjMzk7cyBzb2Z0d2FyZS1iYXNlZCBuYXR1cmUgbWVhbnMgaXQmIzM5O3Mgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG9yIGhhcmR3YXJlLCB3aGljaCBpcyBhIGRlZmluaXRlIGFkdmFudGFnZS4gU28sIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgYERJQlNfTE9gICpzaG91bGQqIGJlIHVzYWJsZSBvbiBhbnkgYXJjaGl0ZWN0dXJlLiBOb3csIEkmIzM5O20gY3VyaW91cy4gQXJlIHRoZXJlIGFueSBvdGhlciBkcml2ZXJzIGJleW9uZCBgSVNNYCB0aGF0IGFyZSB1dGlsaXppbmcgdGhlIGBkaWJzYCBpbnRlcmZhY2U/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZGlic19jbGllbnRfcmVnaXN0ZXJgIGZ1bmN0aW9uLCB0byBzZWUgd2hlcmUgZWxzZSBkaWJzIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19jbGllbnRfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGRpYnNcX3JlZ2lzdGVyXF9jbGllbnQqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRpYnNfcmVnaXN0ZXJfY2xpZW50YC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuIEnigJltIHRoaW5raW5nIGFib3V0IHdoYXQgaXRzIHR5cGljYWwgcm9sZSBzaG91bGQgYmUgYW5kIEnigJlsbCBjb25zaWRlciB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlOiB3aGF0IGlzIGl0IGV4cGVjdGluZyBhcyBpbnB1dCwgYW5kIHdoYXQgZG9lcyBpdCBwcm9taXNlIHRvIGRlbGl2ZXIgaW4gdGVybXMgb2Ygb3V0cHV0PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGl0cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIC0gd2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgY2FsbCBvciB1c2U/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoaW4gdGhlIGJpZ2dlciBzeXN0ZW0sIGFuZCB3aGF0IHNwZWNpZmljIHJlc3BvbnNpYmlsaXRpZXMgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHdpdGhpbiB0aGUgZGlicyB3b3JrZmxvdy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiByaWdodCBhd2F5LiBJcyB0aGlzIGZ1bmN0aW9uIGEgcG9pbnQgb2YgY29udGVudGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucz8gRG9lcyB0aGlzIGZ1bmN0aW9uIGNhdXNlIG1vcmUgb3ZlcmhlYWQgdGhhbiBpdCBzaG91bGQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpYnNfcmVnaXN0ZXJfY2xpZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX21haW4uYz00MD1zdGF0aWMgdm9pZCBkaWJzX3NldHVwX2ZvcndhcmRpbmcoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQsXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ5LVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjUwOmludCBkaWJzX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy01MS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTgwLX1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo4MTpFWFBPUlRfU1lNQk9MX0dQTChkaWJzX3JlZ2lzdGVyX2NsaWVudCk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtODItXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9MTE2PXN0cnVjdCBkaWJzX2NsaWVudF9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTEyMC1cdCAqXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMjE6XHQgKiBXaWxsIGJlIGNhbGxlZCBkdXJpbmcgZGlic19yZWdpc3Rlcl9jbGllbnQoKSBmb3IgYWxsIGV4aXN0aW5nXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMjItXHQgKiBkaWJzIGRldmljZXMgYW5kIHdoZW5ldmVyIGEgbmV3IGRpYnMgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9MTY2PXN0cnVjdCBkaWJzX2NsaWVudCB7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTc2LS8qKlxuaW5jbHVkZS9saW51eC9kaWJzLmg6MTc3OiAqIGRpYnNfcmVnaXN0ZXJfY2xpZW50KCkgLSByZWdpc3RlciBhIGNsaWVudCB3aXRoIGRpYnMgbGF5ZXJcbmluY2x1ZGUvbGludXgvZGlicy5oLTE3OC0gKiBAY2xpZW50OiB0aGlzIGNsaWVudFxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTE4Mi0gKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjE4MzppbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtMTg0LS8qKlxuLS1cbm5ldC9zbWMvc21jX2lzbS5jPTYzMD1pbnQgc21jX2lzbV9pbml0KHZvaWQpXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtNjM2LVxubmV0L3NtYy9zbWNfaXNtLmM6NjM3Olx0cmMgPSBkaWJzX3JlZ2lzdGVyX2NsaWVudChcdTAwMjZzbWNfZGlic19jbGllbnQpO1xubmV0L3NtYy9zbWNfaXNtLmMtNjM4LVx0cmV0dXJuIHJjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTTUMgQ2xpZW50IFJlZ2lzdHJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvc21jL3NtY19pc20uY2AuIEl0IGxvb2tzIGxpa2UgdGhpcyBmaWxlIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIGNsaWVudCDigJMgdGhhdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludCwgbmF0dXJhbGx5LiBTTUMsIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIHRoYXQmIzM5O3Mgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUsIHJpZ2h0PyBPa2F5LCBzbyBJIHNob3VsZCBzZWUgaG93IHRoaXMgY2xpZW50IHJlZ2lzdHJhdGlvbiBpcyBjb25maWd1cmVkLiBBIHF1aWNrIGNoZWNrIG9mIGBuZXQvc21jL0tjb25maWdgIHNob3VsZCBwcm92aWRlIHRoZSBkZXRhaWxzIEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggb25lcyBkZXBlbmQgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk1NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYFNNQ2AgUGF0Y2ggb24gYERJQlNgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byBgU01DYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYERJQlNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYERJQlNfTE9gIGlzIGEgc29mdHdhcmUgbG9vcGJhY2sgZGV2aWNlLCBpdCBvZmZlcnMgYSBjb252ZW5pZW50LCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgdGVzdGluZyBncm91bmQgZm9yIHRoZXNlIGNoYW5nZXMuICBUaGUgcmVsZXZhbnQgY29uZmlncyB0byBlbmFibGUgYXBwZWFyIHRvIGJlIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AuCgpOb3csIGlmIEkgdGhpbmsgYWJvdXQgaXQgYSBiaXQgbW9yZSwgd291bGRuJiMzOTt0IHNpbXBseSBlbmFibGluZyBgRElCU2AgYW5kIGBESUJTX0xPYCBiZSBzdWZmaWNpZW50IHRvIGV4ZXJjaXNlIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgPyBSZWNhbGwgdGhhdCBgZGlic19sb29wYmFja19pbml0YCBjYWxscyBgZGlic19sb19kZXZfcHJvYmVgLCBhbmQgKnRoYXQqIGluIHR1cm4gY2FsbHMgYm90aCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gQWhhISBgZGlic19sb29wYmFja19pbml0YCBpcyBpbnZva2VkIHdpdGhpbiBgZGlic19pbml0YCwgd2hpY2ggaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGZvciBgZGlic2AuCgpUaGVyZWZvcmUsIGxvYWRpbmcgdGhlIGBkaWJzYCBtb2R1bGUgKG9yIGJvb3Rpbmcgd2l0aCBpdCBidWlsdC1pbikgc2hvdWxkIGRpcmVjdGx5IHRyaWdnZXIgdGhlIGV4ZWN1dGlvbiBvZiBib3RoIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBTbyB0aGF0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gdGVzdCB0aGUgYmFzZSBjaGFuZ2VzLiBCdXQgaXMgdGhlcmUgYSB1c2VyLXNwYWNlIHRyaWdnZXJhYmxlIHBhdGggSSBuZWVkIHRvIGNvbnNpZGVyPyBJdCBpcyBwb3NzaWJsZSB0aGF0IHdoZW4gYFNNQ2AgaXMgZW5hYmxlZCwgaXQgbWF5IHRyaWdnZXIgc29tZSBvcGVyYXRpb25zIG9uIHRoZSBgZGlic2AgZGV2aWNlcz8KClRoZSBwYXRjaCBpdHNlbGYgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgcmVsb2NhdGlvbiBvZiBgc3Bpbl9sb2NrX2luaXQoJmFtcDtkaWJzLSZndDtsb2NrKWAgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGlzIGNydWNpYWwuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlIGxvY2sgKGBkaWJzLSZndDtsb2NrYCkgbWlnaHQgaGF2ZSBiZWVuIHVzZWQgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgd2FzIGNhbGxlZCwgb3IsIGFsdGVybmF0aXZlbHksIHdoZW4gYGRpYnNfZGV2X2FkZGAgd2FzIG5vdCBjYWxsZWQgYXQgYWxsLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGBkaWJzLSZndDtsb2NrYCBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSB0aG9zZSB1c2VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzLVx1MDAzZWxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDg9c3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTA3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMDg6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTA5LVx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW3NiYV9pZHhdID0gY2xpZW50LVx1MDAzZWlkO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMTA6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMTEtXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0xMzI9c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNTgtXHRpZiAobGFzdCkge1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNTk6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNjAtXHRcdGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWJfbm9kZS1cdTAwM2VzYmFfaWR4XSA9IE5PX0RJQlNfQ0xJRU5UO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNjE6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2Mi1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTIzNT1zdGF0aWMgaW50IGRpYnNfbG9fbW92ZV9kYXRhKHN0cnVjdCBkaWJzX2RldiAqZGlicywgdTY0IGRtYl90b2ssXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNjktXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3MDpcdHNwaW5fbG9jayhcdTAwMjZkaWJzLVx1MDAzZWxvY2spO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzEtXHRjbGllbnRfaWQgPSBkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnJbc2JhX2lkeF07XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzQtXHRcdGRpYnMtXHUwMDNlc3Vic1tjbGllbnRfaWRdLVx1MDAzZW9wcy1cdTAwM2VoYW5kbGVfaXJxKGRpYnMsIHNiYV9pZHgsIHNfbWFzayk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3NTpcdHNwaW5fdW5sb2NrKFx1MDAyNmRpYnMtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI3Ni1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9NDA9c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy00NC1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo0NTpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ2LVx0ZGlicy1cdTAwM2VzdWJzW2NsaWVudC1cdTAwM2VpZF0gPSBjbGllbnQ7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6NDc6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ4LX1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9ODM9aW50IGRpYnNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTkxLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkaWJzLCBcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo5MjpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtOTMtXHRcdG1heF9kbWJzID0gZGlicy1cdTAwM2VvcHMtXHUwMDNlbWF4X2RtYnMoKTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTAzLVx0XHRkaWJzLVx1MDAzZXN1YnNbY2xpZW50LVx1MDAzZWlkXSA9IE5VTEw7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTA0Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEwNS1cdFx0Y2xpZW50c1tjbGllbnQtXHUwMDNlaWRdLVx1MDAzZW9wcy1cdTAwM2VkZWxfZGV2KGRpYnMpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMTgtZXJyX3JlZ19kbWI6XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTE5Olx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMjAtXHRtdXRleF91bmxvY2soXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTEzND1zdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0MC1cdFx0cmV0dXJuIGRpYnM7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTQxOlx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDItXHRkaWJzLVx1MDAzZWRldi5yZWxlYXNlID0gZGlic19kZXZfcmVsZWFzZTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjI3PXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjMzLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjIzNDpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIzNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICYjNDM7JiM0MztpKVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIzNi1cdFx0ZGlicy1cdTAwM2VzdWJzW2ldID0gTlVMTDtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMzc6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMgaW4gZGlicyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRpYnNfZGV2X2RlbGAgZnVuY3Rpb24sIGFuZCBpdCB1c2VzIGBkaWJzLSZndDtsb2NrYC4gUmlnaHQuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcHJvY2Vzcy4gSWYgYGRpYnNfZGV2X2FsbG9jYCBnZXRzIGNhbGxlZCwgYnV0IHNvbWV0aGluZyBnb2VzIHdyb25nIOKAkyBsaWtlIGBkaWJzX2Rldl9hZGRgIGZhaWxzIG9yIGlzbiYjMzk7dCBldmVuIGNhbGxlZCDigJMgYW5kIHRoZW4gYGRpYnNfZGV2X2RlbGAgZ2V0cyB0cmlnZ2VyZWQgZm9yIGNsZWFudXAsIHdlIG1pZ2h0IGhhdmUgYSBwcm9ibGVtLiBJdCBjb3VsZCBiZSB0cnlpbmcgdG8gdXNlIGFuIHVuaW5pdGlhbGl6ZWQgbG9jay4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8hCgpMZXQgbWUgdHJhY2UgdGhpcyBmdXJ0aGVyLi4uIGBkaWJzX2xvX2Rldl9wcm9iZWAgY2FsbHMgYGRpYnNfZGV2X2FsbG9jYCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQuIElmIGBkaWJzX2Rldl9hZGRgIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgZXJyX3JlZ2AuIEFuZCB3aGF0IGRvZXMgKnRoYXQqIGRvPyBBaCwgaXQgY2FsbHMgYHB1dF9kZXZpY2UoJmFtcDtkaWJzLSZndDtkZXYpYC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJiMzOTt0KiBjYWxsIGBkaWJzX2Rldl9kZWxgLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgY29uY2Vybi4KCk5vdywgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB3aGF0IGhhcHBlbnMgaWYgYGRpYnNfcmVnaXN0ZXJfY2xpZW50YCBpcyBjYWxsZWQgY29uY3VycmVudGx5PyBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGBkaWJzX2Rldl9saXN0YC4gUmVtZW1iZXIsIGEgZGV2aWNlIGlzIGFkZGVkIHRvIHRoaXMgbGlzdCBpbiBgZGlic19kZXZfYWRkYCwgc28gaXQmIzM5O3MgcHJvdGVjdGVkIHRvIGEgZGVncmVlLiBJdCB3b24mIzM5O3Qgc2VlIGFuIHVuaW5pdGlhbGl6ZWQgZGV2aWNlIGJlZm9yZSBgZGlic19kZXZfYWRkYC4gT2theSwgdGhhdCYjMzk7cyBzbGlnaHRseSBsZXNzIGNvbmNlcm5pbmcuLi4gYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlci4KClJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYGlzbV9kcnYuY2AuIFRoaXMgY291bGQgdmVyeSB3ZWxsIGhvbGQgYW5vdGhlciBwYXJ0IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2Rldl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz01OTQ9c3RhdGljIGludCBpc21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02MzUtXHQvKiBlbmFibGUgaXNtIGRldmljZSwgYnV0IGFueSBpbnRlcnJ1cHRzIGFuZCBldmVudHMgd2lsbCBiZSBpZ25vcmVkXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MzY6XHQgKiBiZWZvcmUgZGlic19kZXZfYWRkKCkgYWRkcyBpdCB0byBhbnkgY2xpZW50cy5cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYzNy1cdCAqL1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY1MS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY1MjpcdHJldCA9IGRpYnNfZGV2X2FkZChkaWJzKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY1My1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTA2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGlzbV9wcm9iZWAgaW4gdGhlIHMzOTAgTmV0d29yayBEcml2ZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaXNtX3Byb2JlYCB3aXRoaW4gYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBHaXZlbiB0aGUgZmlsZSBwYXRoLCB0aGlzIGlzIGxpa2VseSB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBJbnRlZ3JhdGVkIFN1YnN5c3RlbSBNdWx0aXBsZXhlciAoSVNNKSBuZXR3b3JrIGRyaXZlciBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGRpc2NvdmVyeSBhc3BlY3RzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIGhvdyBpdCBzZXRzIHVwIHRoZSBuZXR3b3JrIGludGVyZmFjZSwgYW5kIHdoYXQgcmVzb3VyY2VzIGl0IGNsYWltcy4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IHdoZW4gYSBuZXcgSVNNIGRldmljZSBpcyBkZXRlY3RlZCBieSB0aGUgc3lzdGVtIGFuZCBuZWVkcyB0byBiZSBicm91Z2h0IG9ubGluZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgZGVidWdnaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcuIEtub3dpbmcgdGhlIGRldmljZSB3ZWxsLCBJIGNhbiBiZSBzdXJlIHRvIGV4cGVjdCBjZXJ0YWluIHNwZWNpZmljIGNhbGxzLCBlcnJvciBjb25kaXRpb25zIGFuZCBzcGVjaWZpYyByZXNvdXJjZSB1c2FnZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiBhbnkgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgbWFuYWdpbmcgdGhlIElTTSBuZXR3b3JraW5nIGxheWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XG4gNjIxOlx0XHRkbWFfc2V0X3NlZ19ib3VuZGFyeShcdTAwMjZwZGV2LVx1MDAzZWRldiwgU1pfMU0gLSAxKTtcbiA2MjI6XHRcdGRtYV9zZXRfbWF4X3NlZ19zaXplKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBTWl8xTSk7XG4gNjIzOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiA2MjQ6XHRcbiA2MjU6XHRcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuIDYyNjpcdFx0aWYgKCFkaWJzKSB7XG4gNjI3Olx0XHRcdHJldCA9IC1FTk9NRU07XG4gNjI4Olx0XHRcdGdvdG8gZXJyX3Jlc291cmNlO1xuIDYyOTpcdFx0fVxuIDYzMDpcdFx0Lyogc2V0IHRoaXMgdXAgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzICovXG4gNjMxOlx0XHRpc20tXHUwMDNlZGlicyA9IGRpYnM7XG4gNjMyOlx0XHRkaWJzLVx1MDAzZWRydl9wcml2ID0gaXNtO1xuIDYzMzpcdFx0ZGlicy1cdTAwM2VvcHMgPSBcdTAwMjZpc21fb3BzO1xuIDYzNDpcdFxuIDYzNTpcdFx0LyogZW5hYmxlIGlzbSBkZXZpY2UsIGJ1dCBhbnkgaW50ZXJydXB0cyBhbmQgZXZlbnRzIHdpbGwgYmUgaWdub3JlZFxuIDYzNjpcdFx0ICogYmVmb3JlIGRpYnNfZGV2X2FkZCgpIGFkZHMgaXQgdG8gYW55IGNsaWVudHMuXG4gNjM3Olx0XHQgKi9cbiA2Mzg6XHRcdHJldCA9IGlzbV9kZXZfaW5pdChpc20pO1xuIDYzOTpcdFx0aWYgKHJldClcbiA2NDA6XHRcdFx0Z290byBlcnJfZGlicztcbiA2NDE6XHRcbiA2NDI6XHRcdC8qIGFmdGVyIGlzbV9kZXZfaW5pdCgpIHdlIGNhbiBjYWxsIGlzbSBmdW5jdGlvbiB0byBzZXQgZ2lkICovXG4gNjQzOlx0XHRyZXQgPSBpc21fcmVhZF9sb2NhbF9naWQoZGlicyk7XG4gNjQ0Olx0XHRpZiAocmV0KVxuIDY0NTpcdFx0XHRnb3RvIGVycl9pc207XG4gNjQ2Olx0XG4gNjQ3Olx0XHRkaWJzLVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA2NDg6XHRcbiA2NDk6XHRcdHpkZXYgPSB0b196cGNpKHBkZXYpO1xuIDY1MDpcdFx0ZGV2X3NldF9uYW1lKFx1MDAyNmRpYnMtXHUwMDNlZGV2LCBcJiMzNDtpc20leFwmIzM0OywgemRldi1cdTAwM2V1aWQgPyB6ZGV2LVx1MDAzZXVpZCA6IHpkZXYtXHUwMDNlZmlkKTtcbiA2NTE6XHRcbiA2NTI6XHRcdHJldCA9IGRpYnNfZGV2X2FkZChkaWJzKTtcbiA2NTM6XHRcdGlmIChyZXQpXG4gNjU0Olx0XHRcdGdvdG8gZXJyX2lzbTtcbiA2NTU6XHRcbiA2NTY6XHRcdHJldHVybiAwO1xuIDY1NzpcdFxuIDY1ODpcdGVycl9pc206XG4gNjU5Olx0XHRpc21fZGV2X2V4aXQoaXNtKTtcbiA2NjA6XHRlcnJfZGliczpcbiA2NjE6XHRcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuIDY2MjpcdFx0cHV0X2RldmljZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gNjYzOlx0ZXJyX3Jlc291cmNlOlxuIDY2NDpcdFx0cGNpX3JlbGVhc2VfbWVtX3JlZ2lvbnMocGRldik7XG4gNjY1Olx0ZXJyX2Rpc2FibGU6XG4gNjY2Olx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gNjY3Olx0ZXJyX2RldjpcbiA2Njg6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4gNjY5Olx0XHRrZnJlZShpc20pO1xuIDY3MDpcdFxuIDY3MTpcdFx0cmV0dXJuIHJldDtcbiA2NzI6XHR9XG4gNjczOlx0XG4gNjc0Olx0c3RhdGljIHZvaWQgaXNtX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiA2NzU6XHR7XG4gNjc2Olx0XHRzdHJ1Y3QgaXNtX2RldiAqaXNtID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiA2Nzc6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicyA9IGlzbS1cdTAwM2VkaWJzO1xuIDY3ODpcdFxuIDY3OTpcdFx0ZGlic19kZXZfZGVsKGRpYnMpO1xuIDY4MDpcdFx0aXNtX2Rldl9leGl0KGlzbSk7XG4gNjgxOlx0XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbiA2ODI6XHRcdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuIDY4MzpcdFxuIDY4NDpcdFx0cGNpX3JlbGVhc2VfbWVtX3JlZ2lvbnMocGRldik7XG4gNjg1Olx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gNjg2Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIE5VTEwpO1xuIDY4NzpcdFx0a2ZyZWUoaXNtKTtcbiA2ODg6XHR9XG4gNjg5Olx0XG4gNjkwOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlzbV9kcml2ZXIgPSB7XG4gNjkxOlx0XHQubmFtZVx0ICA9IERSVl9OQU1FLFxuIDY5MjpcdFx0LmlkX3RhYmxlID0gaXNtX2RldmljZV90YWJsZSxcbiA2OTM6XHRcdC5wcm9iZVx0ICA9IGlzbV9wcm9iZSxcbiA2OTQ6XHRcdC5yZW1vdmVcdCAgPSBpc21fcmVtb3ZlLFxuIDY5NTpcdH07XG4gNjk2Olx0XG4gNjk3Olx0c3RhdGljIGludCBfX2luaXQgaXNtX2luaXQodm9pZClcbiA2OTg6XHR7XG4gNjk5Olx0XHRpbnQgcmV0O1xuIDcwMDpcdFxuIDcwMTpcdFx0aXNtX2RlYnVnX2luZm8gPSBkZWJ1Z19yZWdpc3RlcihcJiMzNDtpc21cJiMzNDssIDIsIDEsIDE2KTtcbiA3MDI6XHRcdGlmICghaXNtX2RlYnVnX2luZm8pXG4gNzAzOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDcwNDpcdFxuIDcwNTpcdFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhpc21fZGVidWdfaW5mbywgXHUwMDI2ZGVidWdfaGV4X2FzY2lpX3ZpZXcpO1xuIDcwNjpcdFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpc21fZHJpdmVyKTtcbiA3MDc6XHRcdGlmIChyZXQpXG4gNzA4Olx0XHRcdGRlYnVnX3VucmVnaXN0ZXIoaXNtX2RlYnVnX2luZm8pO1xuIDcwOTpcdFxuIDcxMDpcdFx0cmV0dXJuIHJldDtcbiA3MTE6XHR9XG4gNzEyOlx0XG4gNzEzOlx0c3RhdGljIHZvaWQgX19leGl0IGlzbV9leGl0KHZvaWQpXG4gNzE0Olx0e1xuIDcxNTpcdFx0cGNpX3VucmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmlzbV9kcml2ZXIpO1xuIDcxNjpcdFx0ZGVidWdfdW5yZWdpc3Rlcihpc21fZGVidWdfaW5mbyk7XG4gNzE3Olx0fVxuIDcxODpcdFxuIDcxOTpcdG1vZHVsZV9pbml0KGlzbV9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJU00gUHJvYmUgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXNtX3Byb2JlYCBmdW5jdGlvbiBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBmaXJzdCBjYWxscyBgZGlic19kZXZfYWxsb2NgLCB3aGljaCBpcyBzdGFuZGFyZCwgdGhlbiBpbW1lZGlhdGVseSBwcm9jZWVkcyB0byBgaXNtX2Rldl9pbml0YC4gTm93LCBhIHJlZCBmbGFnIGlzIHBvcHBpbmcgdXAuIElmIGBpc21fZGV2X2luaXRgIGZhaWxzLCBpdCBqdW1wcyB0byBgZXJyX2RpYnNgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGVhc2VzIHRoZSBkZXZpY2UgdXNpbmcgYHB1dF9kZXZpY2UoJmFtcDtkaWJzLSZndDtkZXYpYC4gVGhhdCYjMzk7cyBjbGVhbiBlcnJvciBoYW5kbGluZywgZ29vZC4KCkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaXNtX2Rldl9pbml0YCBlbmFibGVzIGludGVycnVwdHMhIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIElmIGFuIGludGVycnVwdCBmaXJlcyAqYmVmb3JlKiBgZGlic19kZXZfYWRkYCBpcyBjYWxsZWQsIHdlIGNvdWxkIGhhdmUgYSByYWNlIGNvbmRpdGlvbi4gVGhlIGludGVycnVwdCBoYW5kbGVyLCBsaWtlbHkgYGlzbV9oYW5kbGVfaXJxYCBvciBzb21ldGhpbmcgc2ltaWxhciwgY291bGQgYmUgdHJpZ2dlcmVkLiBBbmQgaWYgaXQmIzM5O3MgdXNpbmcgYSBsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGRpYnNgIHN0cnVjdHVyZSBiZWZvcmUgdGhlIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZCwgd2UmIzM5O3JlIGluIHRyb3VibGUuIFdlIG1pZ2h0IHNlZSBjb3JydXB0aW9uIG9yIGEga2VybmVsIHBhbmljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgaW50byBgaXNtX2hhbmRsZV9ldmVudGAgYW5kIGBpc21faGFuZGxlX2lycWAgYW5kIHNlZSBpZiB0aGV5JiMzOTtyZSB0b3VjaGluZyBgZGlicy0mZ3Q7bG9ja2AgdG9vIGVhcmx5LiBJIHN1c3BlY3QgdGhleSYjMzk7cmUgdGhlIHdlYWsgcG9pbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlicy1cdTAwM2Vsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9Mjc3PXN0YXRpYyBpbnQgaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMwNS1cdGRtYi1cdTAwM2VkbWJfdG9rID0gY21kLnJlc3BvbnNlLmRtYl90b2s7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMDY6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMwNy1cdGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWItXHUwMDNlaWR4IC0gSVNNX0RNQl9CSVRfT0ZGU0VUXSA9IGNsaWVudC1cdTAwM2VpZDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMwODpcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMDktb3V0OlxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTMxMz1zdGF0aWMgaW50IGlzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMyNS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMyNjpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI3LVx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYi1cdTAwM2VpZHggLSBJU01fRE1CX0JJVF9PRkZTRVRdID0gTk9fRElCU19DTElFTlQ7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMjg6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI5LVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTQ5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgaXNtX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MDYtXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo1MDc6XHRzcGluX2xvY2soXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUwOC1cdGlzbS1cdTAwM2VzYmEtXHUwMDNlcyA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNTMyLVx0fVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NTMzOlx0c3Bpbl91bmxvY2soXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUzNC1cdHJldHVybiBJUlFfSEFORExFRDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3BpbmxvY2sgSW5pdGlhbGl6YXRpb24gQnVnIGFuZCBQb3RlbnRpYWwgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNuYXBzIGludG8gZm9jdXM6IGBpc21faGFuZGxlX2lycWAgaXMgdXNpbmcgYHNwaW5fbG9jaygmYW1wO2RpYnMtJmd0O2xvY2spYC4gSSByZW1lbWJlciBub3cgdGhhdCBgZGlicy0mZ3Q7bG9ja2AgaXMgaW5pdGlhbGl6ZWQsIG9yICp3YXMqIGluaXRpYWxpemVkLCBpbiBgZGlic19kZXZfYWRkYC4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBhbiBpbnRlcnJ1cHQgY29tZXMgaW4gKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLCBzcGVjaWZpY2FsbHksIHJpZ2h0IGFmdGVyIGBpc21fZGV2X2luaXRgIHdoaWNoIGVuYWJsZXMgaW50ZXJydXB0cywgdGhlIGRyaXZlciB3b3VsZCBhdHRlbXB0IHRvIGxvY2sgYW4gdW5pbml0aWFsaXplZCBzcGlubG9jayBpbiBgaXNtX2hhbmRsZV9pcnFgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgYSBwb3RlbnRpYWwga2VybmVsIHBhbmljIHdhaXRpbmcgdG8gaGFwcGVuISBUaGlzIHBhdGNoIGNsZXZlcmx5IGZpeGVzIHRoaXMgYnkgbW92aW5nIGBzcGluX2xvY2tfaW5pdCgmYW1wO2RpYnMtJmd0O2xvY2spYCB0byBgZGlic19kZXZfYWxsb2NgLCB3aGljaCBpcyBjYWxsZWQgYmVmb3JlIGBpc21fZGV2X2luaXRgLiBBIG5pY2UsIGNsZWFuIGZ1bmN0aW9uYWwgZml4LgoKTm93LCB3aGlsZSB0aGlzIGlzIG9idmlvdXNseSBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciBkdWUgdG8gYENPTkZJR19JU01gLCBJJiMzOTttIHNlZWluZyBpbXBsaWNhdGlvbnMgdGhhdCBleHRlbmQgYmV5b25kIHRoYXQgaW5pdGlhbCBzY29wZS4gSSByZWNhbGwgdGhhdCBgZGlic19sb29wYmFjay5jYCBhbHNvIGNhbGxzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGluIGBkaWJzX2xvX2Rldl9wcm9iZWAsIHJpZ2h0PyBFdmVuIHRob3VnaCB0aGUgbG9vcGJhY2sgZHJpdmVyIGRvZXNuJiMzOTt0IGludm9sdmUgaGFyZHdhcmUgaW50ZXJydXB0cywgdGhhdCYjMzk7cyBub3QgdGhlIHBvaW50LiBCb3RoIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGFyZSBwYXJ0IG9mIHRoZSAqY29yZSogRElCUyBzdWJzeXN0ZW0uIEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBiZWdpbnMgdG8gdW5mb2xkLi4uCgpDb3VsZCB3ZSBmdXp6IHRoaXM/IFRoZSBidWcgaXNuJiMzOTt0IHNwZWNpZmljIHRvIGhhcmR3YXJlIGludGVycnVwdHM7IGl0JiMzOTtzIHdpdGhpbiBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCB0aGVtc2VsdmVzLiBJZiB3ZSBjYW4gZW5hYmxlIGJvdGggYERJQlNgIGFuZCBgRElCU19MT2AsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBpbiB0aGUgc2FtZSB3YXksIHJpZ2h0PyBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgRElCU19MT2AgaW5zdGFudGlhdGVkIG9ubHkgb25jZSBkdXJpbmcgbW9kdWxlIGluaXQ/IElmIGl0IGlzLCB0aGF0IGxpbWl0cyB0aGUgY2hhbmNlcyBvZiBmdXp6aW5nLiBJZiBpdCBhbGxvd3MgZm9yIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLCBvciBtb3JlIGltcG9ydGFudGx5LCBpZiB3ZSBjb3VsZCBmaW5kIGEgd2F5IHRvIHRyaWdnZXIgYGRpYnNfZGV2X2FsbG9jYCBmcm9tIHVzZXIgc3BhY2UsIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBleHBhbmQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCwgd2l0aCBpdCwgb3VyIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIGxvb3BiYWNrIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIG11bHRpcGxlIHRpbWVzIG9yIGlmIGl0cyBjcmVhdGlvbiBpcyBsaW1pdGVkIHRvIG1vZHVsZSBsb2FkIHRpbWUuIEZpbmRpbmcgYSB3YXkgdG8gdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBmcm9tIHVzZXIgc3BhY2Ugd291bGQgYmUgYSBodWdlIHdpbiBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2xvb3BiYWNrX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU4LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTk6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNjAte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00NS12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDYtI2Vsc2VcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ4LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjU0PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNjEtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjYyOlx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNjMtXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTQxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRElCUyBEZXZpY2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGp1c3Qgb25lIGRldmljZSBiZWluZyBhbGxvY2F0ZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgZGlic19kZXZfYWxsb2NgIGlzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBvdGhlciBkcml2ZXJzICpjb3VsZCogYmUgdXNpbmcgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCkxldCYjMzk7cyBzZWXigKYgb25seSB0d28gZHJpdmVyczogYGlzbV9kcnYuY2AgYW5kIGBkaWJzX2xvb3BiYWNrLmNgLiBgaXNtX2Rydi5jYCBpcyB0aGUgUENJIGRyaXZlciwgYW5kIEkga25vdyB0aGF0IHByb2JlcyB3aGVuIGEgUENJIGRldmljZSBnZXRzIGFkZGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhvdWdodCBpcyB3aGV0aGVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBjYW4gd2UgZW11bGF0ZSBhbiBJU00gZGV2aWNlPwoKT2theSwgbGV0IG1lIGNoZWNr4oCmIFdhaXQhIElTTSBpcyAmIzM0O0ludGVybmFsIFNoYXJlZCBNZW1vcnkmIzM0OyBvbiBzMzkweC4gSXQmIzM5O3MgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgcHJvdmlkZWQgYnkgdGhlIHMzOTAgZmlybXdhcmUg4oCTIGxpa2Ugei9WTSBvciBMUEFSLiBSaWdodCwgaXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQgUENJIGRldmljZSB0aGF0IFFFTVUgd291bGQgbmF0aXZlbHkgZW11bGF0ZSB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgaW1wbGVtZW50ZWQgdGhhdC4KCldhaXQgYSBzZWNvbmQsIGBESUJTX0xPYCBpcyB0aGUgc29mdHdhcmUgbG9vcGJhY2suIENvdWxkIHRoYXQgYmUgYSB3YXkgdG8gdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgPyBPbmx5IG9uIG1vZHVsZSBsb2FkLiBTbywgaWYgSSBjb21waWxlIGBESUJTYCBhcyBhIG1vZHVsZSwgSSBjYW4gbG9hZCBhbmQgdW5sb2FkIGl0LCB3aGljaCBkb2VzIHRyaWdnZXIgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIEJ1dCBtb2R1bGUgbG9hZC91bmxvYWQgaXNuJiMzOTt0IHRoZSAqYmVzdCogZnV6emluZyB0YXJnZXQgZm9yIHN5emthbGxlciwgYWx0aG91Z2ggaXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZG8gc28uCgpIb2xkIG9uLCB3aGF0IGFib3V0IGBTTUNgPyBEb2VzIGBTTUNgIGNyZWF0ZSBgZGlic2AgZGV2aWNlcz8gTm8sIGl0JiMzOTtzIGp1c3QgYSBjbGllbnQsIGl0IHJlZ2lzdGVycyB0aHJvdWdoIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAuIFRoYXQmIzM5O3Mgbm90IGl0LgoKU28sIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byB0cmlnZ2VyIGBkaWJzX2Rldl9hbGxvY2A/IE9rYXksIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXRsaW5rIG9yIHN5c2ZzIGludGVyZmFjZXMgZm9yIGNyZWF0aW5nIGBkaWJzYCBkZXZpY2VzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2Rldl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTUtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTctXHRpZiAoIWRpYnMpIHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzOC1cdGtmcmVlKGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2Fycik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMzOTpcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNDAtXHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1Mi1cdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzUzOlx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cdHB1dF9kZXZpY2UoXHUwMDI2bG9fZGV2LVx1MDAzZWRpYnMtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMzMtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMzUte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjE0ODpFWFBPUlRfU1lNQk9MX0dQTChkaWJzX2Rldl9hbGxvYyk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTQ5LVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTU5ND1zdGF0aWMgaW50IGlzbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYyNC1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjYyNTpcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI2LVx0aWYgKCFkaWJzKSB7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjYwLWVycl9kaWJzOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjYxOlx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjItXHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz02NzQ9c3RhdGljIHZvaWQgaXNtX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODAtXHRpc21fZGV2X2V4aXQoaXNtKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY4MTpcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjgyLVx0cHV0X2RldmljZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9NDI5PXN0YXRpYyBpbmxpbmUgdm9pZCAqZGlic19nZXRfcHJpdihzdHJ1Y3QgZGlic19kZXYgKmRldixcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MzktLyoqXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDA6ICogZGlic19kZXZfYWxsb2MoKSAtIGFsbG9jYXRlIGFuZCByZWZlcmVuY2UgZGV2aWNlIHN0cnVjdHVyZVxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDQxLSAqXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDQ3LSAqL1xuaW5jbHVkZS9saW51eC9kaWJzLmg6NDQ4OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZCk7XG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDktLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRpYnNgIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlcyBhcmUgbGltaXRlZCB0byBgaXNtX2Rydi5jYCBhbmQgYGRpYnNfbG9vcGJhY2suY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgb3RoZXIgd2F5cyB0byB0cmlnZ2VyIHRoZSBgZGlic19kZXZfYWxsb2NgIGZ1bmN0aW9uPyYjMzQ7IFRoZSBhbnN3ZXIgYXBwZWFycyB0byBiZSBubywgd2hpY2ggaXMgaGVscGZ1bC4KCkJ1dCBob2xkIG9uLCBgZGlic19kZXZfYWxsb2NgICppcyogY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzYCBtb2R1bGUsIHNwZWNpZmljYWxseSB2aWEgYGRpYnNfbG9vcGJhY2tfaW5pdGAuIFRoYXQgbWVhbnMgaWYgYGRpYnNgIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgdGhlIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGR1cmluZyBib290LiBJZiBpdCYjMzk7cyBsb2FkZWQgYXMgYSBtb2R1bGUsIHRoZW4gaXQgaGFwcGVucyBkdXJpbmcgbW9kdWxlIGxvYWQuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBhY3R1YWxseSB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/CgpUaGUgYnVnLCBpZiBpdCBleGlzdHMsIGlzIGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbG9jayB1c2FnZSB0aGF0IG9jY3VycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IHRyaWNreS4gSXQgc2VlbXMgdGhhdCB0aGlzIGlzIG9ubHkgZ29pbmcgdG8gdHJpZ2dlciBkdXJpbmcgbW9kdWxlIGxvYWQgb3IgUENJIHByb2JlIG9mIGFuIHMzOTAgc3BlY2lmaWMgZGV2aWNlLiBEeW5hbWljIGZ1enppbmcgd2lsbCBiZSBjaGFsbGVuZ2luZyB1bmxlc3Mgd2UgY2FuIHNpbXVsYXRlIFBDSSBkZXZpY2VzIG9yIGNvbnRyb2wgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nIHdpdGggc3l6a2FsbGVyLgoKQWhhISBXYWl0LCBzeXprYWxsZXIgKmNhbiogaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YCBvciBzb21ldGhpbmcgc2ltaWxhciEgVGhlIGtleSBjaGFsbGVuZ2UsIG9mIGNvdXJzZSwgaXMgdGhhdCBgSVNNYCBpcyBhbiBzMzkwLXNwZWNpZmljIFBDSSBkZXZpY2UuCgpPa2F5LCBzbyBgSVNNYCBpcyBhIFBDSSBkZXZpY2UuIFRoaXMgY291bGQgYmUgdXNlZnVsLiBUaGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY2hlY2sgdGhlIGBpc21fZGV2aWNlX3RhYmxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNtX2RldmljZV90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTIxPU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMjQtXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzoyNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXNtX2RldmljZV90YWJsZVtdID0ge1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMjYtXHR7IFBDSV9WREVWSUNFKElCTSwgUENJX0RFVklDRV9JRF9JQk1fSVNNKSB9LFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTI4LX07XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzoyOTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXNtX2RldmljZV90YWJsZSk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMC1cbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz02OTA9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlzbV9kcml2ZXIgPSB7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02OTEtXHQubmFtZVx0ICA9IERSVl9OQU1FLFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjkyOlx0LmlkX3RhYmxlID0gaXNtX2RldmljZV90YWJsZSxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY5My1cdC5wcm9iZVx0ICA9IGlzbV9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCBpbnZvbHZlcyBhIGBQQ0lfREVWSUNFX0lEX0lCTV9JU01gLiBJIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHN5emthbGxlciYjMzk7cyBjYXBhYmlsaXRpZXMg4oCTIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCBidXQgbW9yZSByZWxldmFudGx5LCBpdCBoYXMgYSBQQ0kgZnV6emVyIHVzaW5nIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YC4gSG93ZXZlciwgdGhlIHByb21wdCBoYXMgYSBsaXN0IG9mIGNvbmRpdGlvbnMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgcGF0Y2ggKm5vdCogd29ydGggZnV6emluZy4gSXQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgcmVhbCBoYXJkd2FyZSwgYW5kIEkmIzM5O20gYXNraW5nIG15c2VsZiwgaXMgdGhpcyBJQk0gSVNNIGNhcmQgc3VjaCBhIHRoaW5nPwoKQWhhLCBpdCYjMzk7cyBhbiBJQk0gSW50ZXJuYWwgU2hhcmVkIE1lbW9yeSBkZXZpY2UuIEJ1dCB3YWl0LCBgRElCU19MT2AgaXMgYSBzb2Z0d2FyZSBsb29wYmFjayEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyBgRElCU19MT2AgZnVuY3Rpb25hbGl0eSB0cmlnZ2VyYWJsZT8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbml0aWFsaXplZCBkdXJpbmcgbW9kdWxlIGxvYWQuIElmIHN5emthbGxlciBjYW4gbG9hZCBhbmQgdW5sb2FkIG1vZHVsZXMsIHRoZW4gdGhlb3JldGljYWxseSwgaXQgY291bGQgcmVhY2ggaXQsIGFsdGhvdWdoIG1vZHVsZSBmdXp6aW5nIGlzbiYjMzk7dCB1c3VhbGx5IHRoZSAqcHJpbWFyeSogZm9jdXMuCgpMZXQgbWUgZ28gYmFjayB0byB0aGUgcHJvbXB0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSAmIzM0O25vdCB3b3J0aCBmdXp6aW5nJiMzNDsgY2F0ZWdvcnkuIE9rYXksIHNvIGl0IHNwZWNpZmljYWxseSBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzdHVmZiBuZWVkaW5nIHBoeXNpY2FsIGNhcmRzLCBidXQgaXMgYGRpYnNfbWFpbi5jYCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcj8gTm8sIGl0JiMzOTtzIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgLCBwYXJ0IG9mIHRoZSAmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyYjMzQ7IHN1YnN5c3RlbSwgYW5kIGl0ICpkb2VzKiBoYXZlIGEgc29mdHdhcmUgbG9vcGJhY2sgKGBESUJTX0xPYCkuIFRoZXJlZm9yZSwgaXQgKmlzKiByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQmIzM5O3MgZ29vZC4KCklzIHRoaXMgY29kZSBleGVjdXRlZCBvbmx5IGR1cmluZyB0ZWFyZG93bj8gTm8sIGBkaWJzX2Rldl9hbGxvY2AgaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbi9wcm9iZS4gU28sIGl0IGxvb2tzIGxpa2UgaXQgaXMgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSByZWFjaCBgZGlic19kZXZfYWxsb2NgPyBPa2F5LCBpdCYjMzk7cyBjYWxsZWQgdmlhIGBkaWJzX2xvb3BiYWNrX2luaXRgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkaWJzX2luaXRgLiBTbywgaWYgc3l6a2FsbGVyIGRvZXMgZnV6eiBtb2R1bGUgbG9hZGluZywgaXQgd2lsbCBoaXQgaXQuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgY2FsbGVkIGFueXdoZXJlIGVsc2UganVzdCB0byBtYWtlIHN1cmUuIEkmIzM5O3ZlIGFscmVhZHkgZ3JlcHBlZCBmb3IgaXQsIGl0JiMzOTtzIG9ubHkgaW4gYGlzbV9kcnYuY2AgYW5kIGBkaWJzX2xvb3BiYWNrLmNgLgoKQWhhLCBpdCYjMzk7cyBhIGhlbHBlciBmdW5jdGlvbiwgbm90IGEgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBwYXRjaCBmaXhlcyBhIGBzcGluX2xvY2tfaW5pdGAgcGxhY2VtZW50IGluIGBkaWJzX2Rldl9hZGRgIHJhdGhlciB0aGFuIGluIGBkaWJzX2Rldl9hbGxvY2AuIFNvIGlmIEkmIzM5O20gbWFya2luZyBpdCBgV29ydGhGdXp6aW5nPXRydWVgLCBJIG5lZWQgdG8gc3BlY2lmeSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBgRW5hYmxlQ29uZmlnc2Agd291bGQgYmUgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYCBiZWNhdXNlIGBTTUNgIGlzIGEgY2xpZW50IG9mIGBESUJTYCwgZXZlbiB0aG91Z2ggaXQgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkLiBPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYWJvdXQgdGhhdCBgU01DYCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHdoYXQgSSYjMzk7ZCBiZSBsb29raW5nIGF0IG5leHQ6CgoqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgaW4gYG5ldC9zbWNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgbmV0d29yayBjb2RlLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7ZCBkbyBpcyB6ZXJvIGluIG9uIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBjb250cm9sIGNlbnRlciBmb3IgY29uZmlndXJpbmcgb3B0aW9ucyBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBhbGwgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUsIGJvdGggZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkuCgpJJiMzOTtkIGJlIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluOgoKKiAgICoqRGlyZWN0IGRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIEtjb25maWcgc3ltYm9scyBkb2VzIGBuZXQvc21jL0tjb25maWdgIGRlcGVuZCBvbiB0byBldmVuIGJlICp2aXNpYmxlKiBvciBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyYXRpb24/IFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBwcmVyZXF1aXNpdGVzLiBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBnbG9iYWwgZmxhZywgYSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IHN5bWJvbCwgb3IgYSBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgZmVhdHVyZSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZmlyc3Q/CiogICAqKlN5bWJvbCBoaWVyYXJjaHk6KiogSG93IGFyZSB0aGUgU01DIG9wdGlvbnMgb3JnYW5pemVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gc3ltYm9scyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLgoqICAgKipEZWZhdWx0IHZhbHVlcyBhbmQgcHJvbXB0czoqKiBIb3cgYXJlIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHRoZSBTTUMgb3B0aW9ucyBkZWZpbmVkPyBXaGF0IGFyZSB0aGUgcHJvbXB0cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBvZiB0aGVtPyBUaGlzIGdpdmVzIG1lIGNvbnRleHQgYW5kIGhlbHBzIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0IG90aGVyIG9wdGlvbnMuCiogICAqKkltcGxpY2F0aW9ucyBhbmQgZnVydGhlciBkZXBlbmRlbmNpZXM6KiogQWZ0ZXIgSSBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIEkgaGF2ZSB0byB0aGVuIGNoZWNrIHdoZXRoZXIgdGhvc2Ugc3ltYm9scyB0cmlnZ2VyIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGVsc2V3aGVyZS4gSSB3aWxsIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgZ3JhcGguIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgaW1wYWN0cyBvbiBvdGhlciBzdWJzeXN0ZW1zPyBJIHdvdWxkIGFsc28gdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLgoqICAgKipDcm9zcy1hcmNoaXRlY3R1cmUgY29uc2lkZXJhdGlvbnM6KiogQXJlIHRoZXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZGl0aW9uYWxzIG9yIGRlcGVuZGVuY2llcz8gU01DIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgb3IgZnVuY3Rpb24gaWRlbnRpY2FsbHkgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzLgoqICAgKipEb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzOioqIEkmIzM5O20gaG9waW5nIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgaGVscGZ1bCBjb21tZW50cyBleHBsYWluaW5nIHRoZSBwdXJwb3NlIG9mIGVhY2ggc3ltYm9sIGFuZCBpdHMgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbWF5YmUgaGludHMgYWJvdXQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4KCkJ5IHRob3JvdWdobHkgYW5hbHl6aW5nIGBuZXQvc21jL0tjb25maWdgLCBJIGNhbiBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU01DIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBlbmFibGluZyBvciBtb2RpZnlpbmcgdGhvc2Ugb3B0aW9ucy4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgU01DX0RJQUdcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIFNNQ1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xuICAxOTpcdFx0ICBzbWNzcy5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTTUMgYW5kIERJQlMgZm9yIEZ1enppbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIGBESUJTYCwgYW5kIGl0IGxvb2tzIGxpa2UgYFNNQ2AgcmVsaWVzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQsIGNydWNpYWxseSwgYERJQlNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJZiBgU01DYCBuZWVkcyBgRElCU2AsIGZ1enppbmcgYERJQlNgIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgdW5jb3ZlcmluZyBgU01DYCB2dWxuZXJhYmlsaXRpZXMuCgpUaGVyZWZvcmUsIHRvIHByb3Blcmx5IGV4ZXJjaXNlIGFuZCBmdXp6IGBESUJTYCwgSSBuZWVkIHRvIGVuYWJsZSBib3RoIHRoZSBjb3JlIGBESUJTYCBmdW5jdGlvbmFsaXR5ICphbmQqIHRoZSBsb3ctb3ZlcmhlYWQgdmFyaWFudCwgd2hpY2ggSSYjMzk7bSBpbmZlcnJpbmcgaXMgYERJQlNfTE9gLiBUaGF0IGdpdmVzIG1lIGEgbW9yZSBjb21wbGV0ZSBhdHRhY2sgc3VyZmFjZS4KCk5vdywgYmVmb3JlIEkganVtcCBpbiwgSSB3YW50IHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBmbGFncyBpbiBwbGF5LiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IGhvdyBgRElCU2AgYmVoYXZlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBteSBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdGNvbmZpZyBESUJTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCBuXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XG4gICA3Olx0XHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXG4gICA4Olx0XHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxuICAxMTpcdFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXG4gIDEyOlx0XHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBESUJTX0xPXG4gIDE1Olx0XHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBESUJTXG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxuICAyMDpcdFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgSSBzZWUgdGhpcyBtZW50aW9uIG9mIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGFib3V0IHRoYXQ/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gSG1tbSwgSSB0aGluayB0aG9zZSBmdW5jdGlvbnMsIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLCBzaG91bGQgcHJvYmFibHkgYmUgaW5jbHVkZWQgd2l0aGluIGBGb2N1c1N5bWJvbHNgLiAKCkhhbmcgb24sIHRob3VnaC4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uIGlzbiYjMzk7dCBgZGlic19kZXZfYWxsb2NgIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uPyBUaGUgdHJpY2t5IHF1ZXN0aW9uIGlzIGNhbiB3ZSBwb3RlbnRpYWxseSB0cmlnZ2VyIGl0IGZyb20gdXNlciBzcGFjZT8KCklmIGBTTUNgIGlzIGVuYWJsZWQsIGRvZXMgdGhhdCBzb21laG93IGNhdXNlIGBkaWJzX2Rldl9hbGxvY2AgdG8gcnVuPyBObywgd2FpdC4uLiBgU01DYCBpcyBhIGNsaWVudCwgcmlnaHQ/IEl0IHJlZ2lzdGVycyB0aHJvdWdoIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAuIE9rYXksIGdvdCBpdC4KClNvIHRoZSBhY3R1YWwgZGV2aWNlLCB0aGF0JiMzOTtzIGNyZWF0ZWQgYnkgdGhlICpwcm92aWRlciogLSBlaXRoZXIgYGlzbV9kcnZgIG9yIGBkaWJzX2xvb3BiYWNrYC4gRm9yIGBkaWJzX2xvb3BiYWNrYCwgaXQmIzM5O3MgZHVyaW5nIG1vZHVsZSBpbml0LiBBbmQgZm9yIGBpc21fZHJ2YCwgdGhhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIFBDSSBwcm9iZS4gTm93LCBpZiBzeXprYWxsZXIgY2FuIHNvbWVob3cgZW11bGF0ZSBQQ0kgZGV2aWNlcywgaXQgbWlnaHQgdHJpZ2dlciB0aGF0IGBpc21fcHJvYmVgLgoKQWgsIGJ1dCBhIHBvdGVudGlhbCBzbmFnLi4uIGBpc21fZHJ2YCBpcyBzMzkwIHNwZWNpZmljIGJlY2F1c2Ugb2YgdGhlIGBDT05GSUdfSVNNYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gV2FpdC4uLiBpcyBgQ09ORklHX0lTTWAgKm9ubHkqIGZvciBzMzkwPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0Y29uZmlnIFFFVEhfT1NYXG4gIDcxOlx0XHRkZWZfYm9vbCAhSEFWRV9NQVJDSF9aMTVfRkVBVFVSRVNcbiAgNzI6XHRcdHByb21wdCBcJiMzNDtxZXRoIE9TWCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA3MzpcdFx0ZGVwZW5kcyBvbiBRRVRIXG4gIDc0Olx0XHRoZWxwXG4gIDc1Olx0XHQgIFRoaXMgZW5hYmxlcyB0aGUgcWV0aCBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGluIE9TWCBtb2RlLlxuICA3NjpcdFx0ICBJZiB1bnN1cmUsIGNob29zZSBOLlxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBDQ1dHUk9VUFxuICA3OTpcdFx0dHJpc3RhdGVcbiAgODA6XHRcdGRlZmF1bHQgKENUQ00gfHwgUUVUSCB8fCBTTUMpXG4gIDgxOlx0XG4gIDgyOlx0Y29uZmlnIElTTVxuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgSVNNIHZQQ0kgQWRhcHRlclwmIzM0O1xuICA4NDpcdFx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IERJQlNcbiAgODU6XHRcdGRlZmF1bHQgblxuICA4NjpcdFx0aGVscFxuICA4NzpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJbnRlcm5hbCBTaGFyZWQgTWVtb3J5XG4gIDg4Olx0XHQgIHZQQ0kgQWRhcHRlci4gVGhlIGFkYXB0ZXIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgU01DIG5ldHdvcmsgcHJvdG9jb2wuXG4gIDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzU2CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDE1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgRElCUyBhbmQgU01DKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIERJQlMtcmVsYXRlZCBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgcGxhbiBmb3IgZnV6emluZyBpdC4gSSYjMzk7bSBzdGFydGluZyB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIGBJU01gIGZlYXR1cmUsIHdoaWNoIHJlbGllcyBvbiBib3RoIGBQQ0lgIGFuZCBgRElCU2AsIGlzIG9ubHkgYnVpbHQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSG93ZXZlciwgc2luY2UgU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlIHMzOTB4IGFyY2hpdGVjdHVyZSwgSSYjMzk7bSB0aGlua2luZyBJIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBgSVNNYCBvbiB0aGF0IGFyY2hpdGVjdHVyZS4gQWxzbyBgRElCU19MT2AgY2FuIGJlIGZ1enplZCBvbiBhbnkgYXJjaGl0ZWN0dXJlLiBTbyBsZXQmIzM5O3MgZm9jdXMgb24gYERJQlNgIGFuZCBgRElCU19MT2AgYmVjYXVzZSB0aG9zZSBjYW4gYmUgZnV6emVkIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaXMgYSBiaWcgd2luLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdWNoIGFzIGBkaWJzX2Rldl9hbGxvY2AsIGFyZSBhY3R1YWxseSBjYWxsZWQgaW4gYSBmdXp6YWJsZSB3YXkuIEkgc2VlIHRoYXQgYGRpYnNfZGV2X2FsbG9jYCBpcyBjYWxsZWQgZWl0aGVyIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgUENJIHByb2JlLCB3aGljaCBhcmUgYm90aCB0cmlnZ2VyYWJsZSBieSBTeXprYWxsZXIgdGhyb3VnaCBpdHMgbW9kdWxlIGxvYWRpbmcgb3IgUENJIHByb2JpbmcgY2FwYWJpbGl0aWVzIChsaWtlIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YCkuIENydWNpYWxseSwgdGhlIGJ1ZyBpdHNlbGYgaXMgYSBmdW5jdGlvbmFsIGJ1Zywgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbG9jay4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaXNzdWUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHRocm91Z2ggU3l6a2FsbGVyJiMzOTtzIGV4aXN0aW5nIGZlYXR1cmVzLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEkgbG9va2VkIGF0IGZ1bmN0aW9ucyBsaWtlIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAsIGBkaWJzX3VucmVnaXN0ZXJfY2xpZW50YCwgYW5kIGBkaWJzX2Rldl9kZWxgLCBidXQgdGhlIHBhdGNoIG1haW5seSB0b3VjaGVzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgZm9yIGJvdGguIGBkaWJzX2Rldl9hbGxvY2AgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgYGRpYnNfZGV2YC4gYGRpYnNfZGV2X2FkZGAgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYWxsb2NhdGluZyBhbiBhcnJheSBhbmQgYWRkaW5nIHRoZSBkZXZpY2UgdG8gdGhlIHN5c3RlbS4gU2luY2UgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGJ1Z2ZpeCBhbmQgYXJlIGZ1bmN0aW9uYWwsIEkmIzM5O20gY2VydGFpbiB0aGF0IHRoZXNlIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFNvLCBgRm9jdXNTeW1ib2xzYDogYGRpYnNfZGV2X2FsbG9jYCwgYGRpYnNfZGV2X2FkZGAuCgpJJiMzOTttIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGUgYERJQlNgIGFuZCBgRElCU19MT2AgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUgdW5kZXIgdGVzdC4KCk5vdywgYW4gaW50ZXJlc3RpbmcgdGhvdWdodDogc2hvdWxkIEkgYWxzbyBpbmNsdWRlIGBTTUNgIGluIGBFbmFibGVDb25maWdzYD8gYFNNQ2AgaXMgYSAqY2xpZW50KiBvZiBESUJTLiBUaGUgYGRpYnNfZGV2X2FkZGAgZnVuY3Rpb24gaGFzIGEgbG9vcCB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggcmVnaXN0ZXJlZCBjbGllbnRzLiBJZiBJIGVuYWJsZSBgU01DYCwgd2hpY2ggaXMgYSBESUJTIGNsaWVudCwgdGhhdCBsb29wIGJlY29tZXMgbW9yZSBpbnRlcmVzdGluZy4gRW5hYmxpbmcgYFNNQ2AgbWVhbnMgYSBjbGllbnQgd2lsbCBiZSByZWdpc3RlcmVkLiBUaGlzIHJlZ2lzdHJhdGlvbiBtaWdodCB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBleGVjdXRpb24gcGF0aCB3aXRoaW4gYGRpYnNfZGV2X2FkZGAgd2hlcmUgdGhlIGJ1ZyBpcyBwcmVzZW50LiBTbywgYWRkaW5nIGBTTUNgIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFNNQ2AmIzM5O3MgZGVwZW5kZW5jaWVzIGFyZSBjb3ZlcmVkLiBgU01DYCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQsIHNvIEkmIzM5O20gY292ZXJlZCB0aGVyZS4gYElORklOSUJBTkRgIGlzIHVzdWFsbHkgZW5hYmxlZCB0b28sIGJ1dCBJJiMzOTtsbCBhZGQgaXQgdG8gbWFrZSBzdXJlLiBTbywgdG8gY292ZXIgYWxsIGRlcGVuZGVuY2llcywgSSB3aWxsIGluY2x1ZGUgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgIGluIGBFbmFibGVDb25maWdzYC4KCkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCBhZ2Fpbi4gSXQgaW5pdGlhbGl6ZXMgdGhlIHNwaW5sb2NrIGBkaWJzLSZndDtsb2NrYC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBzcGlubG9jayBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3Mgc2FmZSB0byBmdXp6IHRoaXMuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgICAmIzM0O2RpYnNfZGV2X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzLVx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgICAmIzM0O2RpYnNfZGV2X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzLVx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyMy4xMzY5ODc4OTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxNTIyODE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlic19kZXZfYWxsb2NcIixcbiAgICBcImRpYnNfZGV2X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGRpYnMtXFx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjIzLjEzNjk5NDIzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3MzE2Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGIyZmYzNTExNWJiMjM1Nzg3NGUxOWJlMTE4MTZhYThlYWE4MjIyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjUwOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX21haW4uYyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xcbmluZGV4IDE0YzNlMmQ4NDkwMmUuLjRjMjZmZDA2OTczZjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXFxuQEAgLTEzOCw2ICsxMzgsNyBAQCBzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXFxuIFxcdGRpYnMgPSBremFsbG9jX29iaigqZGlicyk7XFxuIFxcdGlmICghZGlicylcXG4gXFx0XFx0cmV0dXJuIGRpYnM7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrKTtcXG4gXFx0ZGlicy1cXHUwMDNlZGV2LnJlbGVhc2UgPSBkaWJzX2Rldl9yZWxlYXNlO1xcbiBcXHRkaWJzLVxcdTAwM2VkZXYuY2xhc3MgPSBcXHUwMDI2ZGlic19jbGFzcztcXG4gXFx0ZGV2aWNlX2luaXRpYWxpemUoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuQEAgLTE4Niw3ICsxODcsNiBAQCBpbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4gXFx0aW50IGksIHJldDtcXG4gXFxuIFxcdG1heF9kbWJzID0gZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VtYXhfZG1icygpO1xcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuIFxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIgPSBremFsbG9jKG1heF9kbWJzLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kaWJzLmggYi9pbmNsdWRlL2xpbnV4L2RpYnMuaFxcbmluZGV4IGM3NTYwN2Y4YTVjZjkuLmQzZTA3NzdmMjVhZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kaWJzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RpYnMuaFxcbkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpkaWJzX2dldF9wcml2KHN0cnVjdCBkaWJzX2RldiAqZGV2LFxcbiAvKipcXG4gICogZGlic19kZXZfYWxsb2MoKSAtIGFsbG9jYXRlIGFuZCByZWZlcmVuY2UgZGV2aWNlIHN0cnVjdHVyZVxcbiAgKlxcbi0gKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldlxcbisgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldiwgbG9ja1xcbiAgKiBOT1RFOiBVc2UgcHV0X2RldmljZShkaWJzX2dldF9kZXYoQGRpYnMpKSB0byBnaXZlIHVwIHlvdXIgcmVmZXJlbmNlIGluc3RlYWRcXG4gICogb2YgZnJlZWluZyBAZGlicyBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCB0aGlzXFxuICAqIGZ1bmN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyMy41MTQ5NjQzMDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzc3NzQyOTYyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlic19kZXZfYWxsb2NcIixcbiAgICBcImRpYnNfZGV2X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGRpYnMtXFx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMmZmMzUxMTViYjIzNTc4NzRlMTliZTExODE2YWE4ZWFhODIyMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjUwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jIGIvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXG5pbmRleCAxNGMzZTJkODQ5MDJlLi40YzI2ZmQwNjk3M2Y3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbkBAIC0xMzgsNiArMTM4LDcgQEAgc3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKVxuIFx0ZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTtcbiBcdGlmICghZGlicylcbiBcdFx0cmV0dXJuIGRpYnM7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxvY2spO1xuIFx0ZGlicy1cdTAwM2VkZXYucmVsZWFzZSA9IGRpYnNfZGV2X3JlbGVhc2U7XG4gXHRkaWJzLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmRpYnNfY2xhc3M7XG4gXHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG5AQCAtMTg2LDcgKzE4Nyw2IEBAIGludCBkaWJzX2Rldl9hZGQoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxuIFx0aW50IGksIHJldDtcbiBcbiBcdG1heF9kbWJzID0gZGlicy1cdTAwM2VvcHMtXHUwMDNlbWF4X2RtYnMoKTtcbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jayk7XG4gXHRkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIgPSBremFsbG9jKG1heF9kbWJzLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RpYnMuaCBiL2luY2x1ZGUvbGludXgvZGlicy5oXG5pbmRleCBjNzU2MDdmOGE1Y2Y5Li5kM2UwNzc3ZjI1YWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kaWJzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGlicy5oXG5AQCAtNDM5LDcgKzQzOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZGlic19nZXRfcHJpdihzdHJ1Y3QgZGlic19kZXYgKmRldixcbiAvKipcbiAgKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlXG4gICpcbi0gKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldlxuKyAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIHdpbGwgYmUgdmFsaWQgdXBvbiBzdWNjZXNzZnVsIHJldHVybjogZGV2LCBsb2NrXG4gICogTk9URTogVXNlIHB1dF9kZXZpY2UoZGlic19nZXRfZGV2KEBkaWJzKSkgdG8gZ2l2ZSB1cCB5b3VyIHJlZmVyZW5jZSBpbnN0ZWFkXG4gICogb2YgZnJlZWluZyBAZGlicyBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCB0aGlzXG4gICogZnVuY3Rpb24uXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyMy41MTQ5NjU5ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUyNjMxMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlicyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFuZCBgaW5jbHVkZS9saW51eC9kaWJzLmhgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgbW92aW5nIGBzcGluX2xvY2tfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxvY2spO2AgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEZ1bmN0aW9uYWxseSwgdGhpcyBpbml0aWFsaXplcyB0aGUgbG9jayBlYXJsaWVyLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGVyZSB3YXMgcG90ZW50aWFsbHkgYW4gdW5pbml0aWFsaXplZCBsb2NrIGlzc3VlLiBJZiB0aGUgbG9jayB3YXMgYmVpbmcgdXNlZCAqYmVmb3JlKiBgZGlic19kZXZfYWRkYCB3YXMgY2FsbGVkLCBvciwgaWYgYGRpYnNfZGV2X2FkZGAgd2Fzbid0IGFsd2F5cyBjYWxsZWQsIHRoZW4gd2UnZCBoYXZlIGEgcHJvYmxlbS4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWJlZm9yZS1pbml0aWFsaXphdGlvbiBidWcsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29tcGlsZXIuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGF0IGBkaWJzYCBhY3R1YWxseSAqaXMqLiBMZXQncyBzZWUuLi4gaXQncyBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCwgb2YgY291cnNlLiBPa2F5LCBub3csIHdoYXQgZG9lcyBgZGlic2AgcmVmZXIgdG8gZXhhY3RseT8gQmV0dGVyIGRvdWJsZS1jaGVjayB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgdGhhdCBpdCdzIGluaXRpYWxpemluZy5cblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBiaWcgcGljdHVyZS4gSSdsbCBncmVwIGZvciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gTmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMgdG8gdGhvc2UgZnVuY3Rpb25zLiBLbm93aW5nIHdoZXJlIHRoZSBgZGlic2AgZGV2aWNlIGlzIGFsbG9jYXRlZCBhbmQgYWRkZWQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHRoZSB1bmluaXRpYWxpemVkIGxvY2sgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyNy43Njc1OTkxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5OTQ5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlic19kZXZfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kaWJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cXHRpZiAoIWRpYnMpIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5OlxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjI3LjgwOTU5OTMyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjMzMTc1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgXCJEaWJzXCIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIGJ1cm5pbmc6IHdoYXQgZXhhY3RseSBpcyB0aGlzIFwiZGlic1wiIHRoaW5nIGFsbCBhYm91dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHRydWUgbWVhbmluZyDigJMgaXRzIHB1cnBvc2UgYW5kIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmNvdmVyIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24uIEkga25vdyBpdCBtdXN0IGJlIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHN5c3RlbS5cblxuRm9sbG93aW5nIHRoYXQsIGl0J3Mgbm90IGVub3VnaCB0byBrbm93ICp3aGF0KiBpdCBpcywgSSBoYXZlIHRvIGtub3cgKmhvdyogaXQncyBpbXBsZW1lbnRlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IGFjdHVhbGx5IGVuYWJsZSBvciBjb250cm9sIFwiZGlicy5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgaXRzIGRlcGVuZGVuY2llcywgaXRzIHRyaWdnZXJzIOKAkyBldmVyeXRoaW5nLiBJIHdhbnQgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIG5vdCBqdXN0IGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6MzAuOTMyOTI4OTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTM2OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjMwLjk4NDQ3MzE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzMDc3NjQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIERJQlM6IENoZWNraW5nIHRoZSBLY29uZmlnKipcblxuQWxyaWdodCwgdGhlIGNvbnRleHQgaXMgY2xlYXJseSBESUJTLCBvciBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcuIEkga25vdyB0aGlzIGFyY2hpdGVjdHVyZSwgc28gaXQncyB0aW1lIHRvIGRpZyBpbi4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGJ1aWxkLXRpbWUgY29udHJvbHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmVhdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBpdCBoYXMgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gcXVpY2tseSBhc3Nlc3MgYSBuZXcgb3IgdW5mYW1pbGlhciBhcmNoaXRlY3R1cmUgZmVhdHVyZS4gSXQnbGwgZ2l2ZSBtZSBhIHN0cm9uZyBmb3VuZGF0aW9uIGZvciB0aGUgZGVlcCBkaXZlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDozMy45MTUyNTMyMDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgRElCU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XFxuICAgNzpcXHRcXHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXFxuICAgODpcXHRcXHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXFxuICAxMTpcXHRcXHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cXG4gIDEyOlxcdFxcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBESUJTX0xPXFxuICAxNTpcXHRcXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIERJQlNcXG4gIDE3OlxcdFxcdGRlZmF1bHQgblxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXFxuICAyMDpcXHRcXHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cXG4gIDIxOlxcdFxcdCAgb2NjdXJzIHdpdGhpbiB0aGUgc2FtZSBPUy4gVGhpcyBoZWxwcyBpbiBjb252ZW5pZW50IHRlc3Rpbmcgb2ZcXG4gIDIyOlxcdFxcdCAgZGlicyBjbGllbnRzLCBzaW5jZSBkaWJzIGxvb3BiYWNrIGlzIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZSBvclxcbiAgMjM6XFx0XFx0ICBoYXJkd2FyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6MzMuOTE1MzIxNjc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1NTgwNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERJQlMgQ29uZmlndXJhdGlvbiBhbmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBpdCBpbnZvbHZlcyBhcmUgYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgdGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBtb3ZpbmcgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jayk7YCBpbnRvIGBkaWJzX2Rldl9hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZSwgb3IgYXJlIG5vdyBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIG1vZGlmaWNhdGlvbi4gXG5cbkl0IGxvb2tzIGxpa2UgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAgYXJlIHRoZSB0d28gbWFqb3IgcGxheWVycyBoZXJlLCB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24uIFRvIGdldCBhIGJldHRlciBncmFzcCBvbiB0aGUgb3ZlcmFsbCBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHNjaGVtZSBvZiB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjM5LjM3MTEyOTU5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMjk1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlic19kZXZfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zMDY9c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMzAtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMzE6XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRpYnNfZGV2X2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTgzLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxODQ6aW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE4NS17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjI0LX1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjI1OkVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2FkZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6MzkuNDE0NDY2NjY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDYyNDQ3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6XG5cbioqRXhhbWluaW5nIERJQlMgRHJpdmVyIEFsbG9jYXRpb24gXHUwMDI2IEFkZGl0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBESUJTIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gYW5kIGFkZGl0aW9uIGxvZ2ljLCBzbyBJJ20gaGVhZGluZyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgaW4gYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0J3Mgd2hlcmUgdGhlIHByaW1hcnkgZGV2aWNlIG1hbmFnZW1lbnQgc2hvdWxkIHJlc2lkZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IG5ldyBESUJTIGRldmljZXMgYXJlIGFsbG9jYXRlZCBhbmQgdGhlbiBpbmNvcnBvcmF0ZWQgaW50byB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZXNlIG1lY2hhbmlzbXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBvdmVyYWxsIGJlaGF2aW9yIGFuZCBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gbGF0ZXIuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjQyLjU2MDcxNDE1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvZGlic19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXG4gMTMxOlxcdFxcdGtmcmVlKGRpYnMpO1xcbiAxMzI6XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGRpYnMgPSBremFsbG9jX29iaigqZGlicyk7XFxuIDEzOTpcXHRcXHRpZiAoIWRpYnMpXFxuIDE0MDpcXHRcXHRcXHRyZXR1cm4gZGlicztcXG4gMTQxOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrKTtcXG4gMTQyOlxcdFxcdGRpYnMtXFx1MDAzZWRldi5yZWxlYXNlID0gZGlic19kZXZfcmVsZWFzZTtcXG4gMTQzOlxcdFxcdGRpYnMtXFx1MDAzZWRldi5jbGFzcyA9IFxcdTAwMjZkaWJzX2NsYXNzO1xcbiAxNDQ6XFx0XFx0ZGV2aWNlX2luaXRpYWxpemUoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdHJldHVybiBkaWJzO1xcbiAxNDc6XFx0fVxcbiAxNDg6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdGF0aWMgc3NpemVfdCBnaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxNTE6XFx0XFx0XFx0XFx0Y2hhciAqYnVmKVxcbiAxNTI6XFx0e1xcbiAxNTM6XFx0XFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRkaWJzID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRpYnNfZGV2LCBkZXYpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcFViXFxcXG5cXFwiLCBcXHUwMDI2ZGlicy1cXHUwMDNlZ2lkKTtcXG4gMTU4OlxcdH1cXG4gMTU5OlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhnaWQpO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRzdGF0aWMgc3NpemVfdCBmYWJyaWNfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxNjI6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbiAxNjM6XFx0e1xcbiAxNjQ6XFx0XFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xcbiAxNjU6XFx0XFx0dTE2IGZhYnJpY19pZDtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0ZGlicyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkaWJzX2RldiwgZGV2KTtcXG4gMTY4OlxcdFxcdGZhYnJpY19pZCA9IGRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X2ZhYnJpY19pZChkaWJzKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMHglMDR4XFxcXG5cXFwiLCBmYWJyaWNfaWQpO1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKGZhYnJpY19pZCk7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaWJzX2Rldl9hdHRyc1tdID0ge1xcbiAxNzU6XFx0XFx0XFx1MDAyNmRldl9hdHRyX2dpZC5hdHRyLFxcbiAxNzY6XFx0XFx0XFx1MDAyNmRldl9hdHRyX2ZhYnJpY19pZC5hdHRyLFxcbiAxNzc6XFx0XFx0TlVMTCxcXG4gMTc4OlxcdH07XFxuIDE3OTpcXHRcXG4gMTgwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRpYnNfZGV2X2F0dHJfZ3JvdXAgPSB7XFxuIDE4MTpcXHRcXHQuYXR0cnMgPSBkaWJzX2Rldl9hdHRycyxcXG4gMTgyOlxcdH07XFxuIDE4MzpcXHRcXG4gMTg0OlxcdGludCBkaWJzX2Rldl9hZGQoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbiAxODU6XFx0e1xcbiAxODY6XFx0XFx0aW50IG1heF9kbWJzO1xcbiAxODc6XFx0XFx0aW50IGksIHJldDtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0bWF4X2RtYnMgPSBkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZW1heF9kbWJzKCk7XFxuIDE5MDpcXHRcXHRkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyID0ga3phbGxvYyhtYXhfZG1icywgR0ZQX0tFUk5FTCk7XFxuIDE5MTpcXHRcXHRpZiAoIWRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpXFxuIDE5MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTkzOlxcdFxcdG1lbXNldChkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyLCBOT19ESUJTX0NMSUVOVCwgbWF4X2RtYnMpO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRyZXQgPSBkZXZpY2VfYWRkKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbiAxOTY6XFx0XFx0aWYgKHJldClcXG4gMTk3OlxcdFxcdFxcdGdvdG8gZnJlZV9jbGllbnRfYXJyO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNmRpYnMtXFx1MDAzZWRldi5rb2JqLCBcXHUwMDI2ZGlic19kZXZfYXR0cl9ncm91cCk7XFxuIDIwMDpcXHRcXHRpZiAocmV0KSB7XFxuIDIwMTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYsIFxcXCJzeXNmc19jcmVhdGVfZ3JvdXAgZmFpbGVkIGZvciBkaWJzX2RldlxcXFxuXFxcIik7XFxuIDIwMjpcXHRcXHRcXHRnb3RvIGVycl9kZXZpY2VfZGVsO1xcbiAyMDM6XFx0XFx0fVxcbiAyMDQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDIwNTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjbGllbnRzX2xvY2spO1xcbiAyMDY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9jbGllbnQ7ICsraSkge1xcbiAyMDc6XFx0XFx0XFx0aWYgKGNsaWVudHNbaV0pIHtcXG4gMjA4OlxcdFxcdFxcdFxcdGNsaWVudHNbaV0tXFx1MDAzZW9wcy1cXHUwMDNlYWRkX2RldihkaWJzKTtcXG4gMjA5OlxcdFxcdFxcdFxcdGRpYnNfc2V0dXBfZm9yd2FyZGluZyhjbGllbnRzW2ldLCBkaWJzKTtcXG4gMjEwOlxcdFxcdFxcdH1cXG4gMjExOlxcdFxcdH1cXG4gMjEyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2xpZW50c19sb2NrKTtcXG4gMjEzOlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZkaWJzLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZGlic19kZXZfbGlzdC5saXN0KTtcXG4gMjE0OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdHJldHVybiAwO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRlcnJfZGV2aWNlX2RlbDpcXG4gMjE5OlxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDIyMDpcXHRmcmVlX2NsaWVudF9hcnI6XFxuIDIyMTpcXHRcXHRrZnJlZShkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcXG4gMjIyOlxcdFxcdHJldHVybiByZXQ7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdH1cXG4gMjI1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2FkZCk7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdHZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4gMjI4OlxcdHtcXG4gMjI5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjQyLjU2MDc5NjMyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjE3MzgxMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIFBhdGNoIGZvciBESUJTIERldmljZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGZ1bmRhbWVudGFsIGlzc3VlIGluIHRoZSBESUJTIGRldmljZSBtYW5hZ2VtZW50IGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIGJ1ZyB3aGVyZSB0aGUgYGRpYnMtXHUwMDNlbG9ja2Agc3BpbmxvY2sgaXMgYmVpbmcgdXNlZCBiZWZvcmUgdGhlIGBkaWJzX2Rldl9hZGRgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgb3IgcG90ZW50aWFsbHkgZXZlbiB3aGVuIGBkaWJzX2Rldl9hZGRgIGlzIG5ldmVyIGNhbGxlZCBhdCBhbGwuIFRoZSB1bmRlcmx5aW5nIHByb2JsZW0gc2VlbXMgdG8gc3RlbSBmcm9tIHRoZSBzZXF1ZW5jZSBvZiBkZXZpY2UgYWxsb2NhdGlvbiBhbmQgYWRkaXRpb246IGBkaWJzX2Rldl9hbGxvY2AgaGFuZGxlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZW4gYGRpYnNfZGV2X2FkZGAgc3Vic2VxdWVudGx5IGFkZHMgdGhpcyBkZXZpY2UgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJZiBmb3Igc29tZSByZWFzb24gYGRpYnNfZGV2X2FkZGAgaXNuJ3QgaW52b2tlZCAqYWZ0ZXIqIGFsbG9jYXRpb24sIGFuZCB5ZXQgdGhlIGRldmljZSBpcyBmcmVlZCwgb3IsIHdvcnNlLCBzb21lIG90aGVyIGNvZGUgdHJpZXMgdG8gdXNlIHRoZSBkZXZpY2UgKmJlZm9yZSogaXQgaGFzIGJlZW4gcHJvcGVybHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBzeXN0ZW0gdmlhIHRoZSBjYWxsIHRvIGBkaWJzX2Rldl9hZGRgLCB3ZSd2ZSBnb3QgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSByYWNlIGNvbmRpdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgYmFkbmVzcy5cblxuVGhlIHNvbHV0aW9uIGJlaW5nIHByb3Bvc2VkIGlzIHRvIG1vdmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzcGlubG9jaywgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jaylgLCBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGluc2lkZSBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIFRoZSBjb3JlIG9mIHRoaXMgZml4IGlzIGVuc3VyaW5nIHRoZSBsb2NrIGlzIGluaXRpYWxpemVkICphdCB0aGUgcG9pbnQgb2YgZGV2aWNlIGFsbG9jYXRpb24qLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcHByb2FjaCB0byBhZGRyZXNzIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cblRvIHRob3JvdWdobHkgdGVzdCB0aGlzLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggdGhlIGBESUJTYCBhbmQgYERJQlNfTE9gIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBjb3ZlcmFnZSB3ZSBuZWVkLiBBbmQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBhcmUgZ29pbmcgdG8gYmUgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IG1heSBiZSBleGVyY2lzZWQuXG5cbldhaXQgYSBtaW51dGUsIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBtZWFuaW5nIGRyaXZlcnMgYXJlIGxpa2VseSBjYWxsaW5nIHRoZW0uIFRoaXMgYWRkcyBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkgdG8gdGhlIHJldmlldyBhbmQgdGVzdGluZy4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBkcml2ZXIgdXNhZ2UgaXMgY29ycmVjdCEgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgZHJpdmVycyB1dGlsaXppbmcgdGhlc2UgZnVuY3Rpb25zLiBMZXQncyBzdGFydCBieSBjaGVja2luZyBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDo0OC4xNzgxODA1MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjA1Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfZGV2X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zMDY9c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTUtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMTY6XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTctXFx0aWYgKCFkaWJzKSB7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzOC1cXHRrZnJlZShkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMzOTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0MC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNDY9c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1Mi1cXHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTM6XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTQtXFx0cHV0X2RldmljZShcXHUwMDI2bG9fZGV2LVxcdTAwM2VkaWJzLVxcdTAwM2VkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDo0OC4yMjI3ODk1NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NzA4NzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBkaWJzX2xvX2Rldl9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgY29udGV4dCBoZXJlIGNsZWFybHkgcG9pbnRzIHRvIGEgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBjYWxsZWQgYGRpYnNfbG9fZGV2X3Byb2JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqd2hhdCogaXQgaXMuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgbGlrZWx5IGludm9sdmVzIERldmljZSBJbml0aWFsaXphdGlvbiBCbG9jayBTdWJzeXN0ZW0gKGRpYnMpIGFuZCBpdCBpcyBsb3ctbGV2ZWwsIGEgcHJvYmUuIE15IGV4cGVyaWVuY2UgaXMgdGhhdCBhIHByb2JlIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBkZXZpY2UgZGlzY292ZXJ5IG9yIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgd2l0aGluIHRoZSBrZXJuZWwsIHF1aXRlIHBvc3NpYmx5IHNwZWNpZmljIHRvIGEgc3RvcmFnZSBvciBJL08gZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIElzIGl0IHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgbmV3IGhhcmR3YXJlPyBJcyBpdCBwYXJ0IG9mIGEgZHJpdmVyIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBJcyB0aGlzIHNvbWUgc29ydCBvZiBlYXJseSBib290IHN0YWdlIGNvbXBvbmVudD8gVGhlIFwibG9cIiBwcmVmaXggY291bGQgYmUgYSByZWZlcmVuY2UgdG8gYSBMb3cgT3V0cHV0LiBNeSBndXQgdGVsbHMgbWUgSSBzaG91bGQgY2hlY2sga2VybmVsIHNvdXJjZSBvciBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gZGlicyBzdWJzeXN0ZW0gb3Igc3RvcmFnZSBkcml2ZXJzLCBhbmQgcGVyaGFwcyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpZGVudGlmaWVyIHdpdGggYW55IHJlbGF0ZWQgZGVidWdnaW5nIG9yIGxvZ2dpbmcgbWVzc2FnZXMgaW4gdGhlIHN5c3RlbS4gVGhlIHNwZWNpZmljcyBhcmUga2V5IGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGNhbGxlZC4gSSB3YW50IHRvIHNlZSBpZiBpdCdzIGludGVyYWN0aW5nIHdpdGggYW55IHNwZWNpZmljIGhhcmR3YXJlIGRldmljZXMgb3IgYnVzIHN5c3RlbXMuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgd29ya2Zsb3cgd2lsbCBiZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODA4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTEuOTc5ODgwNDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9leGl0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2NudCkpXFxuIDMwMzpcXHRcXHRcXHR3YWl0X2V2ZW50KGxkZXYtXFx1MDAzZWxkZXZfcmVsZWFzZSwgIWF0b21pY19yZWFkKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfY250KSk7XFxuIDMwNDpcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdHN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG4gMzA5OlxcdFxcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcXG4gMzEwOlxcdFxcdGludCByZXQ7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdGxkZXYgPSBremFsbG9jX29iaigqbGRldik7XFxuIDMxMzpcXHRcXHRpZiAoIWxkZXYpXFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuIDMxNzpcXHRcXHRpZiAoIWRpYnMpIHtcXG4gMzE4OlxcdFxcdFxcdGtmcmVlKGxkZXYpO1xcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGxkZXYtXFx1MDAzZWRpYnMgPSBkaWJzO1xcbiAzMjM6XFx0XFx0ZGlicy1cXHUwMDNlZHJ2X3ByaXYgPSBsZGV2O1xcbiAzMjQ6XFx0XFx0ZGlic19sb19kZXZfaW5pdChsZGV2KTtcXG4gMzI1OlxcdFxcdHV1aWRfZ2VuKFxcdTAwMjZkaWJzLVxcdTAwM2VnaWQpO1xcbiAzMjY6XFx0XFx0ZGlicy1cXHUwMDNlb3BzID0gXFx1MDAyNmRpYnNfbG9fb3BzO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRkaWJzLVxcdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcXG4gMzI5OlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2LCBcXFwiJXNcXFwiLCBkaWJzX2xvX2Rldl9uYW1lKTtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbiAzMzI6XFx0XFx0aWYgKHJldClcXG4gMzMzOlxcdFxcdFxcdGdvdG8gZXJyX3JlZztcXG4gMzM0OlxcdFxcdGxvX2RldiA9IGxkZXY7XFxuIDMzNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0ZXJyX3JlZzpcXG4gMzM4OlxcdFxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbiAzMzk6XFx0XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuIDM0MDpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbiAzNDE6XFx0XFx0a2ZyZWUobGRldik7XFxuIDM0MjpcXHRcXG4gMzQzOlxcdFxcdHJldHVybiByZXQ7XFxuIDM0NDpcXHR9XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdHN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0aWYgKCFsb19kZXYpXFxuIDM0OTpcXHRcXHRcXHRyZXR1cm47XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdGRpYnNfZGV2X2RlbChsb19kZXYtXFx1MDAzZWRpYnMpO1xcbiAzNTI6XFx0XFx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xcbiAzNTM6XFx0XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuIDM1NDpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuIDM1NTpcXHRcXHRrZnJlZShsb19kZXYpO1xcbiAzNTY6XFx0XFx0bG9fZGV2ID0gTlVMTDtcXG4gMzU3OlxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbiAzNjA6XFx0e1xcbiAzNjE6XFx0XFx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XFxuIDM2MjpcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXFxuIDM2NTpcXHR7XFxuIDM2NjpcXHRcXHRkaWJzX2xvX2Rldl9yZW1vdmUoKTtcXG4gMzY3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTEuOTc5OTY0OTgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQ4MjYzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBgZGlic19sb19kZXZfcHJvYmVgKipcblxuUmlnaHQsIHNvIGBkaWJzX2xvX2Rldl9wcm9iZWAuIEknbSBzdGFydGluZyBmcm9tIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQncyBiZWluZyBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UsIGFuZCB0aGUgY2FsbCBzdGFjayBzdWdnZXN0cyBpdCdzIGNvbWluZyBmcm9tIGBkaWJzX2xvb3BiYWNrX2luaXRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgZGV2aWNlIHByb2JlIGZ1bmN0aW9uIHNvIGl0IHN0YW5kcyB0byByZWFzb24gaXQncyB0aWVkIHRvIGRldmljZSByZWdpc3RyYXRpb24gYXQgc3RhcnR1cC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgZm9yIG1lIGlzIHRvIHRyYWNlIHdoZXJlIGBkaWJzX2xvb3BiYWNrX2luaXRgIGl0c2VsZiBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgZGVwZW5kZW5jeSBmbG93LCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIGFueSBwb3RlbnRpYWwgdGltaW5nIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTUuMTk0Nzk0NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzAwMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfbG9vcGJhY2tfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTgtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTk6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDMtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDUtdm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00Ni0jZWxzZVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00OC17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjU0PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2MS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjYyOlxcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2My1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjU1LjIzNzUwMzIzOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0MDA5NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBNb2R1bGUgU2V0dXAqKlxuXG5SaWdodCwgc28gYGRpYnNfbG9vcGJhY2tfaW5pdGAgaXMgaW52b2tlZCBmcm9tIGBkaWJzX2luaXRgLiBgZGlic19pbml0YCBpcyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpc24ndCBzb21ldGhpbmcgdHJpZ2dlcmVkIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJdCdzIGhhcHBlbmluZyBhcyBwYXJ0IG9mIHRoZSBzeXN0ZW0ncyBzZXR1cCBwcm9jZXNzIHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGxvY2F0aW9uLlxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGVsc2UgaXMgY2FsbGluZyBgZGlic19kZXZfYWxsb2NgLiBJdCBzZWVtcyB0byBtZSB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyB3b3VsZCBicmluZyBiZXR0ZXIgaW5zaWdodHMuIFRpbWUgdG8gZG8gYSBxdWljayBncmVwIHNlYXJjaCBvbiB0aGUgd2hvbGUga2VybmVsIGZvciBjYWxscyB0byBgZGlic19kZXZfYWxsb2NgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTguOTExNTE1NzU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM4NzI1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfZGV2X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cXHRpZiAoIWRpYnMpIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5OlxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz01OTQ9c3RhdGljIGludCBpc21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYyNC1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MjU6XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI2LVxcdGlmICghZGlicykge1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjYwLWVycl9kaWJzOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY2MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY3ND1zdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjgwLVxcdGlzbV9kZXZfZXhpdChpc20pO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY4MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgKmRpYnNfZ2V0X3ByaXYoc3RydWN0IGRpYnNfZGV2ICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MzktLyoqXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDQwOiAqIGRpYnNfZGV2X2FsbG9jKCkgLSBhbGxvY2F0ZSBhbmQgcmVmZXJlbmNlIGRldmljZSBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDEtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQ0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDg6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDktLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjAwLjY1MDI0NzY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQ2MjIzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgczM5MCBTcGVjaWZpY2l0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBgZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmNgIGZpbGUgYW5kIEkgc2VlIHRoZSBjYWxsIHRvIGBkaWJzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBgZGlic2AgZnVuY3Rpb24gaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gR2l2ZW4gdGhhdCBgaXNtX2Rydi5jYCBpcyBleHBsaWNpdGx5IGFuIHMzOTAgZHJpdmVyLCBpdCByYWlzZXMgdGhlIHF1ZXN0aW9uLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgZmlsZS4gWWVzLCBjb25maXJtZWQsIGl0IHJlZmVycyB0byBcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCIuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoYXQgKm9ubHkqIGZvciBzMzkwPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHdpdGggYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYCB0byBiZSBzdXJlLCBhbmQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNlIHdpdGhpbiB0aGUgczM5MCBuZXR3b3JraW5nIGRyaXZlci4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTowNC4xNTQ4NzMxMjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDAyODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnPTc4PWNvbmZpZyBDQ1dHUk9VUFxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9LY29uZmlnLTgxLVxcbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZzo4Mjpjb25maWcgSVNNXFxuZHJpdmVycy9zMzkwL25ldC9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBJU00gdlBDSSBBZGFwdGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTowNC4xOTkyODAxNjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4ODI2MDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERpYnMgRHJpdmVyIFVzYWdlKipcblxuT2theSwgc28gYElTTWAgaXMgZGVmaW5pdGVseSBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciwgbm8gc3VycHJpc2VzIHRoZXJlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBESUJTX0xPYCBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYSBsb29wYmFjayBpbnRlcmZhY2UuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IHRoYXQga2luZCBvZiB0aGluZyBpcyBoZWxwZnVsIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGZvciBkaWJzIGNsaWVudHMuIFRoZSBsb29wYmFjayBmdW5jdGlvbmFsaXR5J3Mgc29mdHdhcmUtYmFzZWQgbmF0dXJlIG1lYW5zIGl0J3Mgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG9yIGhhcmR3YXJlLCB3aGljaCBpcyBhIGRlZmluaXRlIGFkdmFudGFnZS4gU28sIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgYERJQlNfTE9gICpzaG91bGQqIGJlIHVzYWJsZSBvbiBhbnkgYXJjaGl0ZWN0dXJlLiBOb3csIEknbSBjdXJpb3VzLiBBcmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMgYmV5b25kIGBJU01gIHRoYXQgYXJlIHV0aWxpemluZyB0aGUgYGRpYnNgIGludGVyZmFjZT8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkaWJzX2NsaWVudF9yZWdpc3RlcmAgZnVuY3Rpb24sIHRvIHNlZSB3aGVyZSBlbHNlIGRpYnMgaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MDcuNDg3NTQzMzY0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ5OTAzOTc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzX2NsaWVudF9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjA5LjMzNzQ1Njk2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTk3OTA3NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBkaWJzXFxfcmVnaXN0ZXJcXF9jbGllbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZGlic19yZWdpc3Rlcl9jbGllbnRgLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBJ4oCZbSB0aGlua2luZyBhYm91dCB3aGF0IGl0cyB0eXBpY2FsIHJvbGUgc2hvdWxkIGJlIGFuZCBJ4oCZbGwgY29uc2lkZXIgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZTogd2hhdCBpcyBpdCBleHBlY3RpbmcgYXMgaW5wdXQsIGFuZCB3aGF0IGRvZXMgaXQgcHJvbWlzZSB0byBkZWxpdmVyIGluIHRlcm1zIG9mIG91dHB1dD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGl0cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIC0gd2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgY2FsbCBvciB1c2U/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoaW4gdGhlIGJpZ2dlciBzeXN0ZW0sIGFuZCB3aGF0IHNwZWNpZmljIHJlc3BvbnNpYmlsaXRpZXMgaXQncyBzdXBwb3NlZCB0byBoYW5kbGUgd2l0aGluIHRoZSBkaWJzIHdvcmtmbG93LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gcmlnaHQgYXdheS4gSXMgdGhpcyBmdW5jdGlvbiBhIHBvaW50IG9mIGNvbnRlbnRpb24gd2l0aCBvdGhlciBmdW5jdGlvbnM/IERvZXMgdGhpcyBmdW5jdGlvbiBjYXVzZSBtb3JlIG92ZXJoZWFkIHRoYW4gaXQgc2hvdWxkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc4MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjE2LjUzNTM2NzY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2MjUwMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfcmVnaXN0ZXJfY2xpZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19tYWluLmM9NDA9c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ5LVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo1MDppbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTUxLXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy04MC19XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjgxOkVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfcmVnaXN0ZXJfY2xpZW50KTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtODItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0xMTY9c3RydWN0IGRpYnNfY2xpZW50X29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMjAtXFx0ICpcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMjE6XFx0ICogV2lsbCBiZSBjYWxsZWQgZHVyaW5nIGRpYnNfcmVnaXN0ZXJfY2xpZW50KCkgZm9yIGFsbCBleGlzdGluZ1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTEyMi1cXHQgKiBkaWJzIGRldmljZXMgYW5kIHdoZW5ldmVyIGEgbmV3IGRpYnMgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0xNjY9c3RydWN0IGRpYnNfY2xpZW50IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTE3Ni0vKipcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxNzc6ICogZGlic19yZWdpc3Rlcl9jbGllbnQoKSAtIHJlZ2lzdGVyIGEgY2xpZW50IHdpdGggZGlicyBsYXllclxcbmluY2x1ZGUvbGludXgvZGlicy5oLTE3OC0gKiBAY2xpZW50OiB0aGlzIGNsaWVudFxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTgyLSAqL1xcbmluY2x1ZGUvbGludXgvZGlicy5oOjE4MzppbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpO1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTE4NC0vKipcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jPTYzMD1pbnQgc21jX2lzbV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYy02MzYtXFxubmV0L3NtYy9zbWNfaXNtLmM6NjM3OlxcdHJjID0gZGlic19yZWdpc3Rlcl9jbGllbnQoXFx1MDAyNnNtY19kaWJzX2NsaWVudCk7XFxubmV0L3NtYy9zbWNfaXNtLmMtNjM4LVxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MTguMTcxNjUxNjQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTc0NzgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgQ2xpZW50IFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L3NtYy9zbWNfaXNtLmNgLiBJdCBsb29rcyBsaWtlIHRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgYSBjbGllbnQg4oCTIHRoYXQncyBhIGtleSBlbnRyeSBwb2ludCwgbmF0dXJhbGx5LiBTTUMsIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIHRoYXQncyB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLCByaWdodD8gT2theSwgc28gSSBzaG91bGQgc2VlIGhvdyB0aGlzIGNsaWVudCByZWdpc3RyYXRpb24gaXMgY29uZmlndXJlZC4gQSBxdWljayBjaGVjayBvZiBgbmV0L3NtYy9LY29uZmlnYCBzaG91bGQgcHJvdmlkZSB0aGUgZGV0YWlscyBJIG5lZWQuIExldCdzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggb25lcyBkZXBlbmQgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MToyMS4zNjkxMzI0MzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDIzNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MToyMS40MTQxNjAwNTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4MDY3NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYFNNQ2AgUGF0Y2ggb24gYERJQlNgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIGBTTUNgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgRElCU2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBtb2RpZmljYXRpb25zIHRvIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBgRElCU19MT2AgaXMgYSBzb2Z0d2FyZSBsb29wYmFjayBkZXZpY2UsIGl0IG9mZmVycyBhIGNvbnZlbmllbnQsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCB0ZXN0aW5nIGdyb3VuZCBmb3IgdGhlc2UgY2hhbmdlcy4gIFRoZSByZWxldmFudCBjb25maWdzIHRvIGVuYWJsZSBhcHBlYXIgdG8gYmUgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYC5cblxuTm93LCBpZiBJIHRoaW5rIGFib3V0IGl0IGEgYml0IG1vcmUsIHdvdWxkbid0IHNpbXBseSBlbmFibGluZyBgRElCU2AgYW5kIGBESUJTX0xPYCBiZSBzdWZmaWNpZW50IHRvIGV4ZXJjaXNlIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgPyBSZWNhbGwgdGhhdCBgZGlic19sb29wYmFja19pbml0YCBjYWxscyBgZGlic19sb19kZXZfcHJvYmVgLCBhbmQgKnRoYXQqIGluIHR1cm4gY2FsbHMgYm90aCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gQWhhISBgZGlic19sb29wYmFja19pbml0YCBpcyBpbnZva2VkIHdpdGhpbiBgZGlic19pbml0YCwgd2hpY2ggaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGZvciBgZGlic2AuXG5cblRoZXJlZm9yZSwgbG9hZGluZyB0aGUgYGRpYnNgIG1vZHVsZSAob3IgYm9vdGluZyB3aXRoIGl0IGJ1aWx0LWluKSBzaG91bGQgZGlyZWN0bHkgdHJpZ2dlciB0aGUgZXhlY3V0aW9uIG9mIGJvdGggYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIFNvIHRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0ZXN0IHRoZSBiYXNlIGNoYW5nZXMuIEJ1dCBpcyB0aGVyZSBhIHVzZXItc3BhY2UgdHJpZ2dlcmFibGUgcGF0aCBJIG5lZWQgdG8gY29uc2lkZXI/IEl0IGlzIHBvc3NpYmxlIHRoYXQgd2hlbiBgU01DYCBpcyBlbmFibGVkLCBpdCBtYXkgdHJpZ2dlciBzb21lIG9wZXJhdGlvbnMgb24gdGhlIGBkaWJzYCBkZXZpY2VzP1xuXG5UaGUgcGF0Y2ggaXRzZWxmIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHJlbG9jYXRpb24gb2YgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jaylgIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBpcyBjcnVjaWFsLiBJdCBzdWdnZXN0cyB0aGF0IHRoZSBsb2NrIChgZGlicy1cdTAwM2Vsb2NrYCkgbWlnaHQgaGF2ZSBiZWVuIHVzZWQgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgd2FzIGNhbGxlZCwgb3IsIGFsdGVybmF0aXZlbHksIHdoZW4gYGRpYnNfZGV2X2FkZGAgd2FzIG5vdCBjYWxsZWQgYXQgYWxsLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGBkaWJzLVx1MDAzZWxvY2tgIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHRyYWNlIHRob3NlIHVzZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjI2Ljc5NDgzNzE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc0MDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzLVxcdTAwM2Vsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz00OD1zdGF0aWMgaW50IGRpYnNfbG9fcmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIsXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTEwNy1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEwODpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTA5LVxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbc2JhX2lkeF0gPSBjbGllbnQtXFx1MDAzZWlkO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTEwOlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTExMS1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MTMyPXN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNTgtXFx0aWYgKGxhc3QpIHtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE1OTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTYwLVxcdFxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iX25vZGUtXFx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNjE6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTYyLVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yMzU9c3RhdGljIGludCBkaWJzX2xvX21vdmVfZGF0YShzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCBkbWJfdG9rLFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNjktXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNzA6XFx0c3Bpbl9sb2NrKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI3MS1cXHRjbGllbnRfaWQgPSBkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyW3NiYV9pZHhdO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzQtXFx0XFx0ZGlicy1cXHUwMDNlc3Vic1tjbGllbnRfaWRdLVxcdTAwM2VvcHMtXFx1MDAzZWhhbmRsZV9pcnEoZGlicywgc2JhX2lkeCwgc19tYXNrKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3NTpcXHRzcGluX3VubG9jayhcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzYtXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9NDA9c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ0LVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo0NTpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy00Ni1cXHRkaWJzLVxcdTAwM2VzdWJzW2NsaWVudC1cXHUwMDNlaWRdID0gY2xpZW50O1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo0NzpcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ4LX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz04Mz1pbnQgZGlic191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy05MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRpYnMsIFxcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6OTI6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtOTMtXFx0XFx0bWF4X2RtYnMgPSBkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZW1heF9kbWJzKCk7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTAzLVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbY2xpZW50LVxcdTAwM2VpZF0gPSBOVUxMO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxMDQ6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMDUtXFx0XFx0Y2xpZW50c1tjbGllbnQtXFx1MDAzZWlkXS1cXHUwMDNlb3BzLVxcdTAwM2VkZWxfZGV2KGRpYnMpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTExOC1lcnJfcmVnX2RtYjpcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTE5OlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTIwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTM0PXN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDAtXFx0XFx0cmV0dXJuIGRpYnM7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjE0MTpcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0Mi1cXHRkaWJzLVxcdTAwM2VkZXYucmVsZWFzZSA9IGRpYnNfZGV2X3JlbGVhc2U7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjI3PXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMzMtXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjIzNDpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMzUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICsraSlcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjM2LVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbaV0gPSBOVUxMO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMzc6XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjI2LjgzOTU4MjU5OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk0NTgxNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIGRpYnMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGlic19kZXZfZGVsYCBmdW5jdGlvbiwgYW5kIGl0IHVzZXMgYGRpYnMtXHUwMDNlbG9ja2AuIFJpZ2h0LiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcHJvY2Vzcy4gSWYgYGRpYnNfZGV2X2FsbG9jYCBnZXRzIGNhbGxlZCwgYnV0IHNvbWV0aGluZyBnb2VzIHdyb25nIOKAkyBsaWtlIGBkaWJzX2Rldl9hZGRgIGZhaWxzIG9yIGlzbid0IGV2ZW4gY2FsbGVkIOKAkyBhbmQgdGhlbiBgZGlic19kZXZfZGVsYCBnZXRzIHRyaWdnZXJlZCBmb3IgY2xlYW51cCwgd2UgbWlnaHQgaGF2ZSBhIHByb2JsZW0uIEl0IGNvdWxkIGJlIHRyeWluZyB0byB1c2UgYW4gdW5pbml0aWFsaXplZCBsb2NrLiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvIVxuXG5MZXQgbWUgdHJhY2UgdGhpcyBmdXJ0aGVyLi4uIGBkaWJzX2xvX2Rldl9wcm9iZWAgY2FsbHMgYGRpYnNfZGV2X2FsbG9jYCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQuIElmIGBkaWJzX2Rldl9hZGRgIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgZXJyX3JlZ2AuIEFuZCB3aGF0IGRvZXMgKnRoYXQqIGRvPyBBaCwgaXQgY2FsbHMgYHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpYC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJ3QqIGNhbGwgYGRpYnNfZGV2X2RlbGAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBjb25jZXJuLlxuXG5Ob3csIGhlcmUncyB0aGUga2lja2VyOiB3aGF0IGhhcHBlbnMgaWYgYGRpYnNfcmVnaXN0ZXJfY2xpZW50YCBpcyBjYWxsZWQgY29uY3VycmVudGx5PyBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGBkaWJzX2Rldl9saXN0YC4gUmVtZW1iZXIsIGEgZGV2aWNlIGlzIGFkZGVkIHRvIHRoaXMgbGlzdCBpbiBgZGlic19kZXZfYWRkYCwgc28gaXQncyBwcm90ZWN0ZWQgdG8gYSBkZWdyZWUuIEl0IHdvbid0IHNlZSBhbiB1bmluaXRpYWxpemVkIGRldmljZSBiZWZvcmUgYGRpYnNfZGV2X2FkZGAuIE9rYXksIHRoYXQncyBzbGlnaHRseSBsZXNzIGNvbmNlcm5pbmcuLi4gYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlci5cblxuUmlnaHQsIEkgbmVlZCB0byBjaGVjayBgaXNtX2Rydi5jYC4gVGhpcyBjb3VsZCB2ZXJ5IHdlbGwgaG9sZCBhbm90aGVyIHBhcnQgb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjMxLjUzNDE2NjYzNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNjg1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlic19kZXZfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTU5ND1zdGF0aWMgaW50IGlzbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjM1LVxcdC8qIGVuYWJsZSBpc20gZGV2aWNlLCBidXQgYW55IGludGVycnVwdHMgYW5kIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWRcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MzY6XFx0ICogYmVmb3JlIGRpYnNfZGV2X2FkZCgpIGFkZHMgaXQgdG8gYW55IGNsaWVudHMuXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjM3LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjUxLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY1MjpcXHRyZXQgPSBkaWJzX2Rldl9hZGQoZGlicyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjUzLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjMxLjU3OTU0MjM0MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NDEzNTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpc21fcHJvYmVgIGluIHRoZSBzMzkwIE5ldHdvcmsgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaXNtX3Byb2JlYCB3aXRoaW4gYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBHaXZlbiB0aGUgZmlsZSBwYXRoLCB0aGlzIGlzIGxpa2VseSB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBJbnRlZ3JhdGVkIFN1YnN5c3RlbSBNdWx0aXBsZXhlciAoSVNNKSBuZXR3b3JrIGRyaXZlciBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgZGlzY292ZXJ5IGFzcGVjdHMuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgaG93IGl0IHNldHMgdXAgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgd2hhdCByZXNvdXJjZXMgaXQgY2xhaW1zLiBJdCdzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aGVuIGEgbmV3IElTTSBkZXZpY2UgaXMgZGV0ZWN0ZWQgYnkgdGhlIHN5c3RlbSBhbmQgbmVlZHMgdG8gYmUgYnJvdWdodCBvbmxpbmUsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgZGVidWdnaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcuIEtub3dpbmcgdGhlIGRldmljZSB3ZWxsLCBJIGNhbiBiZSBzdXJlIHRvIGV4cGVjdCBjZXJ0YWluIHNwZWNpZmljIGNhbGxzLCBlcnJvciBjb25kaXRpb25zIGFuZCBzcGVjaWZpYyByZXNvdXJjZSB1c2FnZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiBhbnkgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgbWFuYWdpbmcgdGhlIElTTSBuZXR3b3JraW5nIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjM1LjAwMzk1ODU1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcbiA2MjE6XFx0XFx0ZG1hX3NldF9zZWdfYm91bmRhcnkoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgU1pfMU0gLSAxKTtcXG4gNjIyOlxcdFxcdGRtYV9zZXRfbWF4X3NlZ19zaXplKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFNaXzFNKTtcXG4gNjIzOlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiA2MjQ6XFx0XFxuIDYyNTpcXHRcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG4gNjI2OlxcdFxcdGlmICghZGlicykge1xcbiA2Mjc6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNjI4OlxcdFxcdFxcdGdvdG8gZXJyX3Jlc291cmNlO1xcbiA2Mjk6XFx0XFx0fVxcbiA2MzA6XFx0XFx0Lyogc2V0IHRoaXMgdXAgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzICovXFxuIDYzMTpcXHRcXHRpc20tXFx1MDAzZWRpYnMgPSBkaWJzO1xcbiA2MzI6XFx0XFx0ZGlicy1cXHUwMDNlZHJ2X3ByaXYgPSBpc207XFxuIDYzMzpcXHRcXHRkaWJzLVxcdTAwM2VvcHMgPSBcXHUwMDI2aXNtX29wcztcXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0LyogZW5hYmxlIGlzbSBkZXZpY2UsIGJ1dCBhbnkgaW50ZXJydXB0cyBhbmQgZXZlbnRzIHdpbGwgYmUgaWdub3JlZFxcbiA2MzY6XFx0XFx0ICogYmVmb3JlIGRpYnNfZGV2X2FkZCgpIGFkZHMgaXQgdG8gYW55IGNsaWVudHMuXFxuIDYzNzpcXHRcXHQgKi9cXG4gNjM4OlxcdFxcdHJldCA9IGlzbV9kZXZfaW5pdChpc20pO1xcbiA2Mzk6XFx0XFx0aWYgKHJldClcXG4gNjQwOlxcdFxcdFxcdGdvdG8gZXJyX2RpYnM7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdC8qIGFmdGVyIGlzbV9kZXZfaW5pdCgpIHdlIGNhbiBjYWxsIGlzbSBmdW5jdGlvbiB0byBzZXQgZ2lkICovXFxuIDY0MzpcXHRcXHRyZXQgPSBpc21fcmVhZF9sb2NhbF9naWQoZGlicyk7XFxuIDY0NDpcXHRcXHRpZiAocmV0KVxcbiA2NDU6XFx0XFx0XFx0Z290byBlcnJfaXNtO1xcbiA2NDY6XFx0XFxuIDY0NzpcXHRcXHRkaWJzLVxcdTAwM2VkZXYucGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0emRldiA9IHRvX3pwY2kocGRldik7XFxuIDY1MDpcXHRcXHRkZXZfc2V0X25hbWUoXFx1MDAyNmRpYnMtXFx1MDAzZWRldiwgXFxcImlzbSV4XFxcIiwgemRldi1cXHUwMDNldWlkID8gemRldi1cXHUwMDNldWlkIDogemRldi1cXHUwMDNlZmlkKTtcXG4gNjUxOlxcdFxcbiA2NTI6XFx0XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbiA2NTM6XFx0XFx0aWYgKHJldClcXG4gNjU0OlxcdFxcdFxcdGdvdG8gZXJyX2lzbTtcXG4gNjU1OlxcdFxcbiA2NTY6XFx0XFx0cmV0dXJuIDA7XFxuIDY1NzpcXHRcXG4gNjU4OlxcdGVycl9pc206XFxuIDY1OTpcXHRcXHRpc21fZGV2X2V4aXQoaXNtKTtcXG4gNjYwOlxcdGVycl9kaWJzOlxcbiA2NjE6XFx0XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuIDY2MjpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbiA2NjM6XFx0ZXJyX3Jlc291cmNlOlxcbiA2NjQ6XFx0XFx0cGNpX3JlbGVhc2VfbWVtX3JlZ2lvbnMocGRldik7XFxuIDY2NTpcXHRlcnJfZGlzYWJsZTpcXG4gNjY2OlxcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gNjY3OlxcdGVycl9kZXY6XFxuIDY2ODpcXHRcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuIDY2OTpcXHRcXHRrZnJlZShpc20pO1xcbiA2NzA6XFx0XFxuIDY3MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NzI6XFx0fVxcbiA2NzM6XFx0XFxuIDY3NDpcXHRzdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiA2NzU6XFx0e1xcbiA2NzY6XFx0XFx0c3RydWN0IGlzbV9kZXYgKmlzbSA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gNjc3OlxcdFxcdHN0cnVjdCBkaWJzX2RldiAqZGlicyA9IGlzbS1cXHUwMDNlZGlicztcXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFx0ZGlic19kZXZfZGVsKGRpYnMpO1xcbiA2ODA6XFx0XFx0aXNtX2Rldl9leGl0KGlzbSk7XFxuIDY4MTpcXHRcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG4gNjgyOlxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdHBjaV9yZWxlYXNlX21lbV9yZWdpb25zKHBkZXYpO1xcbiA2ODU6XFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiA2ODY6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbiA2ODc6XFx0XFx0a2ZyZWUoaXNtKTtcXG4gNjg4OlxcdH1cXG4gNjg5OlxcdFxcbiA2OTA6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlzbV9kcml2ZXIgPSB7XFxuIDY5MTpcXHRcXHQubmFtZVxcdCAgPSBEUlZfTkFNRSxcXG4gNjkyOlxcdFxcdC5pZF90YWJsZSA9IGlzbV9kZXZpY2VfdGFibGUsXFxuIDY5MzpcXHRcXHQucHJvYmVcXHQgID0gaXNtX3Byb2JlLFxcbiA2OTQ6XFx0XFx0LnJlbW92ZVxcdCAgPSBpc21fcmVtb3ZlLFxcbiA2OTU6XFx0fTtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0c3RhdGljIGludCBfX2luaXQgaXNtX2luaXQodm9pZClcXG4gNjk4OlxcdHtcXG4gNjk5OlxcdFxcdGludCByZXQ7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdGlzbV9kZWJ1Z19pbmZvID0gZGVidWdfcmVnaXN0ZXIoXFxcImlzbVxcXCIsIDIsIDEsIDE2KTtcXG4gNzAyOlxcdFxcdGlmICghaXNtX2RlYnVnX2luZm8pXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhpc21fZGVidWdfaW5mbywgXFx1MDAyNmRlYnVnX2hleF9hc2NpaV92aWV3KTtcXG4gNzA2OlxcdFxcdHJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmlzbV9kcml2ZXIpO1xcbiA3MDc6XFx0XFx0aWYgKHJldClcXG4gNzA4OlxcdFxcdFxcdGRlYnVnX3VucmVnaXN0ZXIoaXNtX2RlYnVnX2luZm8pO1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MTE6XFx0fVxcbiA3MTI6XFx0XFxuIDcxMzpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgaXNtX2V4aXQodm9pZClcXG4gNzE0OlxcdHtcXG4gNzE1OlxcdFxcdHBjaV91bnJlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aXNtX2RyaXZlcik7XFxuIDcxNjpcXHRcXHRkZWJ1Z191bnJlZ2lzdGVyKGlzbV9kZWJ1Z19pbmZvKTtcXG4gNzE3OlxcdH1cXG4gNzE4OlxcdFxcbiA3MTk6XFx0bW9kdWxlX2luaXQoaXNtX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTozNS4wMDQwNTgwNDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5ODQ0NTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElTTSBQcm9iZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXNtX3Byb2JlYCBmdW5jdGlvbiBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBmaXJzdCBjYWxscyBgZGlic19kZXZfYWxsb2NgLCB3aGljaCBpcyBzdGFuZGFyZCwgdGhlbiBpbW1lZGlhdGVseSBwcm9jZWVkcyB0byBgaXNtX2Rldl9pbml0YC4gTm93LCBhIHJlZCBmbGFnIGlzIHBvcHBpbmcgdXAuIElmIGBpc21fZGV2X2luaXRgIGZhaWxzLCBpdCBqdW1wcyB0byBgZXJyX2RpYnNgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGVhc2VzIHRoZSBkZXZpY2UgdXNpbmcgYHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpYC4gVGhhdCdzIGNsZWFuIGVycm9yIGhhbmRsaW5nLCBnb29kLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYGlzbV9kZXZfaW5pdGAgZW5hYmxlcyBpbnRlcnJ1cHRzISBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLiBJZiBhbiBpbnRlcnJ1cHQgZmlyZXMgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLCB3ZSBjb3VsZCBoYXZlIGEgcmFjZSBjb25kaXRpb24uIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbGlrZWx5IGBpc21faGFuZGxlX2lycWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGNvdWxkIGJlIHRyaWdnZXJlZC4gQW5kIGlmIGl0J3MgdXNpbmcgYSBsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGRpYnNgIHN0cnVjdHVyZSBiZWZvcmUgdGhlIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZCwgd2UncmUgaW4gdHJvdWJsZS4gV2UgbWlnaHQgc2VlIGNvcnJ1cHRpb24gb3IgYSBrZXJuZWwgcGFuaWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gYGlzbV9oYW5kbGVfZXZlbnRgIGFuZCBgaXNtX2hhbmRsZV9pcnFgIGFuZCBzZWUgaWYgdGhleSdyZSB0b3VjaGluZyBgZGlicy1cdTAwM2Vsb2NrYCB0b28gZWFybHkuIEkgc3VzcGVjdCB0aGV5J3JlIHRoZSB3ZWFrIHBvaW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MzkuNDAyNTA1NDg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg4OTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzLVxcdTAwM2Vsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTI3Nz1zdGF0aWMgaW50IGlzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYixcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMwNS1cXHRkbWItXFx1MDAzZWRtYl90b2sgPSBjbWQucmVzcG9uc2UuZG1iX3RvaztcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMDY6XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMDctXFx0ZGlicy1cXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWItXFx1MDAzZWlkeCAtIElTTV9ETUJfQklUX09GRlNFVF0gPSBjbGllbnQtXFx1MDAzZWlkO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMwODpcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzA5LW91dDpcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTMxMz1zdGF0aWMgaW50IGlzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI1LVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMyNjpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMyNy1cXHRkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYi1cXHUwMDNlaWR4IC0gSVNNX0RNQl9CSVRfT0ZGU0VUXSA9IE5PX0RJQlNfQ0xJRU5UO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMyODpcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI5LVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NDkzPXN0YXRpYyBpcnFyZXR1cm5fdCBpc21faGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNTA2LVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjUwNzpcXHRzcGluX2xvY2soXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUwOC1cXHRpc20tXFx1MDAzZXNiYS1cXHUwMDNlcyA9IDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MzItXFx0fVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjUzMzpcXHRzcGluX3VubG9jayhcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNTM0LVxcdHJldHVybiBJUlFfSEFORExFRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MzkuNDQ1NDAwMzEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzU2OTg5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3BpbmxvY2sgSW5pdGlhbGl6YXRpb24gQnVnIGFuZCBQb3RlbnRpYWwgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzbmFwcyBpbnRvIGZvY3VzOiBgaXNtX2hhbmRsZV9pcnFgIGlzIHVzaW5nIGBzcGluX2xvY2soXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKWAuIEkgcmVtZW1iZXIgbm93IHRoYXQgYGRpYnMtXHUwMDNlbG9ja2AgaXMgaW5pdGlhbGl6ZWQsIG9yICp3YXMqIGluaXRpYWxpemVkLCBpbiBgZGlic19kZXZfYWRkYC4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBhbiBpbnRlcnJ1cHQgY29tZXMgaW4gKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLCBzcGVjaWZpY2FsbHksIHJpZ2h0IGFmdGVyIGBpc21fZGV2X2luaXRgIHdoaWNoIGVuYWJsZXMgaW50ZXJydXB0cywgdGhlIGRyaXZlciB3b3VsZCBhdHRlbXB0IHRvIGxvY2sgYW4gdW5pbml0aWFsaXplZCBzcGlubG9jayBpbiBgaXNtX2hhbmRsZV9pcnFgLiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGFuZCBhIHBvdGVudGlhbCBrZXJuZWwgcGFuaWMgd2FpdGluZyB0byBoYXBwZW4hIFRoaXMgcGF0Y2ggY2xldmVybHkgZml4ZXMgdGhpcyBieSBtb3ZpbmcgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jaylgIHRvIGBkaWJzX2Rldl9hbGxvY2AsIHdoaWNoIGlzIGNhbGxlZCBiZWZvcmUgYGlzbV9kZXZfaW5pdGAuIEEgbmljZSwgY2xlYW4gZnVuY3Rpb25hbCBmaXguXG5cbk5vdywgd2hpbGUgdGhpcyBpcyBvYnZpb3VzbHkgYW4gczM5MC1zcGVjaWZpYyBkcml2ZXIgZHVlIHRvIGBDT05GSUdfSVNNYCwgSSdtIHNlZWluZyBpbXBsaWNhdGlvbnMgdGhhdCBleHRlbmQgYmV5b25kIHRoYXQgaW5pdGlhbCBzY29wZS4gSSByZWNhbGwgdGhhdCBgZGlic19sb29wYmFjay5jYCBhbHNvIGNhbGxzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGluIGBkaWJzX2xvX2Rldl9wcm9iZWAsIHJpZ2h0PyBFdmVuIHRob3VnaCB0aGUgbG9vcGJhY2sgZHJpdmVyIGRvZXNuJ3QgaW52b2x2ZSBoYXJkd2FyZSBpbnRlcnJ1cHRzLCB0aGF0J3Mgbm90IHRoZSBwb2ludC4gQm90aCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBhcmUgcGFydCBvZiB0aGUgKmNvcmUqIERJQlMgc3Vic3lzdGVtLiBBbmQgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBiZWdpbnMgdG8gdW5mb2xkLi4uXG5cbkNvdWxkIHdlIGZ1enogdGhpcz8gVGhlIGJ1ZyBpc24ndCBzcGVjaWZpYyB0byBoYXJkd2FyZSBpbnRlcnJ1cHRzOyBpdCdzIHdpdGhpbiBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCB0aGVtc2VsdmVzLiBJZiB3ZSBjYW4gZW5hYmxlIGJvdGggYERJQlNgIGFuZCBgRElCU19MT2AsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBpbiB0aGUgc2FtZSB3YXksIHJpZ2h0PyBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgRElCU19MT2AgaW5zdGFudGlhdGVkIG9ubHkgb25jZSBkdXJpbmcgbW9kdWxlIGluaXQ/IElmIGl0IGlzLCB0aGF0IGxpbWl0cyB0aGUgY2hhbmNlcyBvZiBmdXp6aW5nLiBJZiBpdCBhbGxvd3MgZm9yIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLCBvciBtb3JlIGltcG9ydGFudGx5LCBpZiB3ZSBjb3VsZCBmaW5kIGEgd2F5IHRvIHRyaWdnZXIgYGRpYnNfZGV2X2FsbG9jYCBmcm9tIHVzZXIgc3BhY2UsIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBleHBhbmQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCwgd2l0aCBpdCwgb3VyIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIGxvb3BiYWNrIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIG11bHRpcGxlIHRpbWVzIG9yIGlmIGl0cyBjcmVhdGlvbiBpcyBsaW1pdGVkIHRvIG1vZHVsZSBsb2FkIHRpbWUuIEZpbmRpbmcgYSB3YXkgdG8gdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBmcm9tIHVzZXIgc3BhY2Ugd291bGQgYmUgYSBodWdlIHdpbiBoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTo0Ni41ODExMDE3MzdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzAxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfbG9vcGJhY2tfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTgtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTk6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDMtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDUtdm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00Ni0jZWxzZVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00OC17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjU0PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2MS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjYyOlxcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2My1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjQ2LjYyNjgxMTQ1NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU5OTU2MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRElCUyBEZXZpY2UgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIGp1c3Qgb25lIGRldmljZSBiZWluZyBhbGxvY2F0ZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgZGlic19kZXZfYWxsb2NgIGlzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBvdGhlciBkcml2ZXJzICpjb3VsZCogYmUgdXNpbmcgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5MZXQncyBzZWXigKYgb25seSB0d28gZHJpdmVyczogYGlzbV9kcnYuY2AgYW5kIGBkaWJzX2xvb3BiYWNrLmNgLiBgaXNtX2Rydi5jYCBpcyB0aGUgUENJIGRyaXZlciwgYW5kIEkga25vdyB0aGF0IHByb2JlcyB3aGVuIGEgUENJIGRldmljZSBnZXRzIGFkZGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhvdWdodCBpcyB3aGV0aGVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBjYW4gd2UgZW11bGF0ZSBhbiBJU00gZGV2aWNlP1xuXG5Pa2F5LCBsZXQgbWUgY2hlY2vigKYgV2FpdCEgSVNNIGlzIFwiSW50ZXJuYWwgU2hhcmVkIE1lbW9yeVwiIG9uIHMzOTB4LiBJdCdzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHByb3ZpZGVkIGJ5IHRoZSBzMzkwIGZpcm13YXJlIOKAkyBsaWtlIHovVk0gb3IgTFBBUi4gUmlnaHQsIGl0J3Mgbm90IGEgc3RhbmRhcmQgUENJIGRldmljZSB0aGF0IFFFTVUgd291bGQgbmF0aXZlbHkgZW11bGF0ZSB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgaW1wbGVtZW50ZWQgdGhhdC5cblxuV2FpdCBhIHNlY29uZCwgYERJQlNfTE9gIGlzIHRoZSBzb2Z0d2FyZSBsb29wYmFjay4gQ291bGQgdGhhdCBiZSBhIHdheSB0byB0cmlnZ2VyIGBkaWJzX2Rldl9hbGxvY2A/IE9ubHkgb24gbW9kdWxlIGxvYWQuIFNvLCBpZiBJIGNvbXBpbGUgYERJQlNgIGFzIGEgbW9kdWxlLCBJIGNhbiBsb2FkIGFuZCB1bmxvYWQgaXQsIHdoaWNoIGRvZXMgdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gQnV0IG1vZHVsZSBsb2FkL3VubG9hZCBpc24ndCB0aGUgKmJlc3QqIGZ1enppbmcgdGFyZ2V0IGZvciBzeXprYWxsZXIsIGFsdGhvdWdoIGl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHNvLlxuXG5Ib2xkIG9uLCB3aGF0IGFib3V0IGBTTUNgPyBEb2VzIGBTTUNgIGNyZWF0ZSBgZGlic2AgZGV2aWNlcz8gTm8sIGl0J3MganVzdCBhIGNsaWVudCwgaXQgcmVnaXN0ZXJzIHRocm91Z2ggYGRpYnNfcmVnaXN0ZXJfY2xpZW50YC4gVGhhdCdzIG5vdCBpdC5cblxuU28sIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byB0cmlnZ2VyIGBkaWJzX2Rldl9hbGxvY2A/IE9rYXksIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5ldGxpbmsgb3Igc3lzZnMgaW50ZXJmYWNlcyBmb3IgY3JlYXRpbmcgYGRpYnNgIGRldmljZXMuIFRoYXQncyB0aGUgbmV4dCBhdmVudWUgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6NTIuNTg2NzcwNDYyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MzI2MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfZGV2X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cXHRpZiAoIWRpYnMpIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5OlxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz01OTQ9c3RhdGljIGludCBpc21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYyNC1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MjU6XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI2LVxcdGlmICghZGlicykge1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjYwLWVycl9kaWJzOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY2MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY3ND1zdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjgwLVxcdGlzbV9kZXZfZXhpdChpc20pO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY4MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgKmRpYnNfZ2V0X3ByaXYoc3RydWN0IGRpYnNfZGV2ICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MzktLyoqXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDQwOiAqIGRpYnNfZGV2X2FsbG9jKCkgLSBhbGxvY2F0ZSBhbmQgcmVmZXJlbmNlIGRldmljZSBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDEtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQ0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDg6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDktLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjU0LjIzMzEwMjE5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTUyNTAzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGlic2AgSW5pdGlhbGl6YXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlcyBhcmUgbGltaXRlZCB0byBgaXNtX2Rydi5jYCBhbmQgYGRpYnNfbG9vcGJhY2suY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB0aGVyZSBhbnkgb3RoZXIgd2F5cyB0byB0cmlnZ2VyIHRoZSBgZGlic19kZXZfYWxsb2NgIGZ1bmN0aW9uP1wiIFRoZSBhbnN3ZXIgYXBwZWFycyB0byBiZSBubywgd2hpY2ggaXMgaGVscGZ1bC5cblxuQnV0IGhvbGQgb24sIGBkaWJzX2Rldl9hbGxvY2AgKmlzKiBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGRpYnNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHZpYSBgZGlic19sb29wYmFja19pbml0YC4gVGhhdCBtZWFucyBpZiBgZGlic2AgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCB0aGUgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZHVyaW5nIGJvb3QuIElmIGl0J3MgbG9hZGVkIGFzIGEgbW9kdWxlLCB0aGVuIGl0IGhhcHBlbnMgZHVyaW5nIG1vZHVsZSBsb2FkLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nP1xuXG5UaGUgYnVnLCBpZiBpdCBleGlzdHMsIGlzIGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbG9jayB1c2FnZSB0aGF0IG9jY3VycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IHRyaWNreS4gSXQgc2VlbXMgdGhhdCB0aGlzIGlzIG9ubHkgZ29pbmcgdG8gdHJpZ2dlciBkdXJpbmcgbW9kdWxlIGxvYWQgb3IgUENJIHByb2JlIG9mIGFuIHMzOTAgc3BlY2lmaWMgZGV2aWNlLiBEeW5hbWljIGZ1enppbmcgd2lsbCBiZSBjaGFsbGVuZ2luZyB1bmxlc3Mgd2UgY2FuIHNpbXVsYXRlIFBDSSBkZXZpY2VzIG9yIGNvbnRyb2wgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nIHdpdGggc3l6a2FsbGVyLlxuXG5BaGEhIFdhaXQsIHN5emthbGxlciAqY2FuKiBpbmplY3QgUENJIGRldmljZXMgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYHN5el9wY2lfdnBjaV9pbmplY3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyISBUaGUga2V5IGNoYWxsZW5nZSwgb2YgY291cnNlLCBpcyB0aGF0IGBJU01gIGlzIGFuIHMzOTAtc3BlY2lmaWMgUENJIGRldmljZS5cblxuT2theSwgc28gYElTTWAgaXMgYSBQQ0kgZGV2aWNlLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bC4gVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNoZWNrIHRoZSBgaXNtX2RldmljZV90YWJsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjU5LjU0ODM1NDcyOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NDg0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNtX2RldmljZV90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz0yMT1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0yNC1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzoyNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXNtX2RldmljZV90YWJsZVtdID0ge1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTI2LVxcdHsgUENJX1ZERVZJQ0UoSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9JU00pIH0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0yOC19O1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjI5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpc21fZGV2aWNlX3RhYmxlKTtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMC1cXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY5MD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaXNtX2RyaXZlciA9IHtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02OTEtXFx0Lm5hbWVcXHQgID0gRFJWX05BTUUsXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjkyOlxcdC5pZF90YWJsZSA9IGlzbV9kZXZpY2VfdGFibGUsXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjkzLVxcdC5wcm9iZVxcdCAgPSBpc21fcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjU5LjU5MTIwODQ0NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTIxODAyNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGludm9sdmVzIGEgYFBDSV9ERVZJQ0VfSURfSUJNX0lTTWAuIEkgaW1tZWRpYXRlbHkgY29uc2lkZXIgc3l6a2FsbGVyJ3MgY2FwYWJpbGl0aWVzIOKAkyBpdCBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgYnV0IG1vcmUgcmVsZXZhbnRseSwgaXQgaGFzIGEgUENJIGZ1enplciB1c2luZyBgc3l6X3BjaV92cGNpX2luamVjdGAuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaGFzIGEgbGlzdCBvZiBjb25kaXRpb25zIHRoYXQgd291bGQgbWFrZSB0aGlzIHBhdGNoICpub3QqIHdvcnRoIGZ1enppbmcuIEl0IG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCBuZWVkIHJlYWwgaGFyZHdhcmUsIGFuZCBJJ20gYXNraW5nIG15c2VsZiwgaXMgdGhpcyBJQk0gSVNNIGNhcmQgc3VjaCBhIHRoaW5nP1xuXG5BaGEsIGl0J3MgYW4gSUJNIEludGVybmFsIFNoYXJlZCBNZW1vcnkgZGV2aWNlLiBCdXQgd2FpdCwgYERJQlNfTE9gIGlzIGEgc29mdHdhcmUgbG9vcGJhY2shIFRoYXQncyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyBgRElCU19MT2AgZnVuY3Rpb25hbGl0eSB0cmlnZ2VyYWJsZT8gSXQgbG9va3MgbGlrZSBpdCdzIGluaXRpYWxpemVkIGR1cmluZyBtb2R1bGUgbG9hZC4gSWYgc3l6a2FsbGVyIGNhbiBsb2FkIGFuZCB1bmxvYWQgbW9kdWxlcywgdGhlbiB0aGVvcmV0aWNhbGx5LCBpdCBjb3VsZCByZWFjaCBpdCwgYWx0aG91Z2ggbW9kdWxlIGZ1enppbmcgaXNuJ3QgdXN1YWxseSB0aGUgKnByaW1hcnkqIGZvY3VzLlxuXG5MZXQgbWUgZ28gYmFjayB0byB0aGUgcHJvbXB0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBmYWxsIGludG8gdGhlIFwibm90IHdvcnRoIGZ1enppbmdcIiBjYXRlZ29yeS4gT2theSwgc28gaXQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN0dWZmIG5lZWRpbmcgcGh5c2ljYWwgY2FyZHMsIGJ1dCBpcyBgZGlic19tYWluLmNgIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyPyBObywgaXQncyBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCwgcGFydCBvZiB0aGUgXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmdcIiBzdWJzeXN0ZW0sIGFuZCBpdCAqZG9lcyogaGF2ZSBhIHNvZnR3YXJlIGxvb3BiYWNrIChgRElCU19MT2ApLiBUaGVyZWZvcmUsIGl0ICppcyogcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGF0J3MgZ29vZC5cblxuSXMgdGhpcyBjb2RlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIHRlYXJkb3duPyBObywgYGRpYnNfZGV2X2FsbG9jYCBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3Byb2JlLiBTbywgaXQgbG9va3MgbGlrZSBpdCBpcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgcmVhY2ggYGRpYnNfZGV2X2FsbG9jYD8gT2theSwgaXQncyBjYWxsZWQgdmlhIGBkaWJzX2xvb3BiYWNrX2luaXRgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkaWJzX2luaXRgLiBTbywgaWYgc3l6a2FsbGVyIGRvZXMgZnV6eiBtb2R1bGUgbG9hZGluZywgaXQgd2lsbCBoaXQgaXQuIExldCdzIHNlZSBpZiBpdCdzIGNhbGxlZCBhbnl3aGVyZSBlbHNlIGp1c3QgdG8gbWFrZSBzdXJlLiBJJ3ZlIGFscmVhZHkgZ3JlcHBlZCBmb3IgaXQsIGl0J3Mgb25seSBpbiBgaXNtX2Rydi5jYCBhbmQgYGRpYnNfbG9vcGJhY2suY2AuXG5cbkFoYSwgaXQncyBhIGhlbHBlciBmdW5jdGlvbiwgbm90IGEgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBwYXRjaCBmaXhlcyBhIGBzcGluX2xvY2tfaW5pdGAgcGxhY2VtZW50IGluIGBkaWJzX2Rldl9hZGRgIHJhdGhlciB0aGFuIGluIGBkaWJzX2Rldl9hbGxvY2AuIFNvIGlmIEknbSBtYXJraW5nIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIGBFbmFibGVDb25maWdzYCB3b3VsZCBiZSBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgIGJlY2F1c2UgYFNNQ2AgaXMgYSBjbGllbnQgb2YgYERJQlNgLCBldmVuIHRob3VnaCBpdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQuIE9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIGFib3V0IHRoYXQgYFNNQ2AgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjowOS41MTMwMTM3ODdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDY1MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjowOS41NTk0ODQ1MTRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNDIwNjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gd2hhdCBJJ2QgYmUgbG9va2luZyBhdCBuZXh0OlxuXG4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgaW4gYG5ldC9zbWNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBuZXR3b3JrIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJJ2QgZG8gaXMgemVybyBpbiBvbiB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjb250cm9sIGNlbnRlciBmb3IgY29uZmlndXJpbmcgb3B0aW9ucyBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gSSdkIGJlIGxvb2tpbmcgZm9yIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgd2l0aGluIHRoYXQgZmlsZSwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS5cblxuSSdkIGJlIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluOlxuXG4qICAgKipEaXJlY3QgZGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIGRvZXMgYG5ldC9zbWMvS2NvbmZpZ2AgZGVwZW5kIG9uIHRvIGV2ZW4gYmUgKnZpc2libGUqIG9yIGF2YWlsYWJsZSBmb3IgY29uZmlndXJhdGlvbj8gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIHByZXJlcXVpc2l0ZXMuIEZvciBleGFtcGxlLCBpcyB0aGVyZSBhIGdsb2JhbCBmbGFnLCBhIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQgc3ltYm9sLCBvciBhIHBhcnRpY3VsYXIgbmV0d29ya2luZyBmZWF0dXJlIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmaXJzdD9cbiogICAqKlN5bWJvbCBoaWVyYXJjaHk6KiogSG93IGFyZSB0aGUgU01DIG9wdGlvbnMgb3JnYW5pemVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gc3ltYm9scyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLlxuKiAgICoqRGVmYXVsdCB2YWx1ZXMgYW5kIHByb21wdHM6KiogSG93IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGUgU01DIG9wdGlvbnMgZGVmaW5lZD8gV2hhdCBhcmUgdGhlIHByb21wdHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlbT8gVGhpcyBnaXZlcyBtZSBjb250ZXh0IGFuZCBoZWxwcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdCBvdGhlciBvcHRpb25zLlxuKiAgICoqSW1wbGljYXRpb25zIGFuZCBmdXJ0aGVyIGRlcGVuZGVuY2llczoqKiBBZnRlciBJIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMgSSBoYXZlIHRvIHRoZW4gY2hlY2sgd2hldGhlciB0aG9zZSBzeW1ib2xzIHRyaWdnZXIgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZWxzZXdoZXJlLiBJIHdpbGwgbWFwIG91dCB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBncmFwaC4gQXJlIHRoZXJlIGFueSBpbmRpcmVjdCBpbXBhY3RzIG9uIG90aGVyIHN1YnN5c3RlbXM/IEkgd291bGQgYWxzbyB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuXG4qICAgKipDcm9zcy1hcmNoaXRlY3R1cmUgY29uc2lkZXJhdGlvbnM6KiogQXJlIHRoZXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZGl0aW9uYWxzIG9yIGRlcGVuZGVuY2llcz8gU01DIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgb3IgZnVuY3Rpb24gaWRlbnRpY2FsbHkgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzLlxuKiAgICoqRG9jdW1lbnRhdGlvbiBvciBjb21tZW50czoqKiBJJ20gaG9waW5nIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgaGVscGZ1bCBjb21tZW50cyBleHBsYWluaW5nIHRoZSBwdXJwb3NlIG9mIGVhY2ggc3ltYm9sIGFuZCBpdHMgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbWF5YmUgaGludHMgYWJvdXQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS5cblxuQnkgdGhvcm91Z2hseSBhbmFseXppbmcgYG5ldC9zbWMvS2NvbmZpZ2AsIEkgY2FuIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBTTUMgY29uZmlndXJhdGlvbiBvcHRpb25zIGludGVncmF0ZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgbW9kaWZ5aW5nIHRob3NlIG9wdGlvbnMuIFRoYXQncyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjEzLjk5MzY5Mzk2OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6MTMuOTkzNzU5MjU3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1Mjk3MzgxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU01DIGFuZCBESUJTIGZvciBGdXp6aW5nKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgYERJQlNgLCBhbmQgaXQgbG9va3MgbGlrZSBgU01DYCByZWxpZXMgb24gYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCwgY3J1Y2lhbGx5LCBgRElCU2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIElmIGBTTUNgIG5lZWRzIGBESUJTYCwgZnV6emluZyBgRElCU2AgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGZvciB1bmNvdmVyaW5nIGBTTUNgIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlcmVmb3JlLCB0byBwcm9wZXJseSBleGVyY2lzZSBhbmQgZnV6eiBgRElCU2AsIEkgbmVlZCB0byBlbmFibGUgYm90aCB0aGUgY29yZSBgRElCU2AgZnVuY3Rpb25hbGl0eSAqYW5kKiB0aGUgbG93LW92ZXJoZWFkIHZhcmlhbnQsIHdoaWNoIEknbSBpbmZlcnJpbmcgaXMgYERJQlNfTE9gLiBUaGF0IGdpdmVzIG1lIGEgbW9yZSBjb21wbGV0ZSBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCBiZWZvcmUgSSBqdW1wIGluLCBJIHdhbnQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGZsYWdzIGluIHBsYXkuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zLiBJJ2xsIHNlYXJjaCBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgaG93IGBESUJTYCBiZWhhdmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdG8gcHJvcGVybHkgY29uZmlndXJlIG15IGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjoxOS41MjM0OTk2ODNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgRElCU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XFxuICAgNzpcXHRcXHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXFxuICAgODpcXHRcXHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXFxuICAxMTpcXHRcXHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cXG4gIDEyOlxcdFxcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBESUJTX0xPXFxuICAxNTpcXHRcXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIERJQlNcXG4gIDE3OlxcdFxcdGRlZmF1bHQgblxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXFxuICAyMDpcXHRcXHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6MTkuNTIzNTYwMjMzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODEwMTkwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgSSBzZWUgdGhpcyBtZW50aW9uIG9mIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGFib3V0IHRoYXQ/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gSG1tbSwgSSB0aGluayB0aG9zZSBmdW5jdGlvbnMsIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLCBzaG91bGQgcHJvYmFibHkgYmUgaW5jbHVkZWQgd2l0aGluIGBGb2N1c1N5bWJvbHNgLiBcblxuSGFuZyBvbiwgdGhvdWdoLiBUaGlua2luZyB0aGlzIHRocm91Z2guLi4gaXNuJ3QgYGRpYnNfZGV2X2FsbG9jYCBjYWxsZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbj8gVGhlIHRyaWNreSBxdWVzdGlvbiBpcyBjYW4gd2UgcG90ZW50aWFsbHkgdHJpZ2dlciBpdCBmcm9tIHVzZXIgc3BhY2U/XG5cbklmIGBTTUNgIGlzIGVuYWJsZWQsIGRvZXMgdGhhdCBzb21laG93IGNhdXNlIGBkaWJzX2Rldl9hbGxvY2AgdG8gcnVuPyBObywgd2FpdC4uLiBgU01DYCBpcyBhIGNsaWVudCwgcmlnaHQ/IEl0IHJlZ2lzdGVycyB0aHJvdWdoIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAuIE9rYXksIGdvdCBpdC5cblxuU28gdGhlIGFjdHVhbCBkZXZpY2UsIHRoYXQncyBjcmVhdGVkIGJ5IHRoZSAqcHJvdmlkZXIqIC0gZWl0aGVyIGBpc21fZHJ2YCBvciBgZGlic19sb29wYmFja2AuIEZvciBgZGlic19sb29wYmFja2AsIGl0J3MgZHVyaW5nIG1vZHVsZSBpbml0LiBBbmQgZm9yIGBpc21fZHJ2YCwgdGhhdCdzIGhhcHBlbmluZyBkdXJpbmcgUENJIHByb2JlLiBOb3csIGlmIHN5emthbGxlciBjYW4gc29tZWhvdyBlbXVsYXRlIFBDSSBkZXZpY2VzLCBpdCBtaWdodCB0cmlnZ2VyIHRoYXQgYGlzbV9wcm9iZWAuXG5cbkFoLCBidXQgYSBwb3RlbnRpYWwgc25hZy4uLiBgaXNtX2RydmAgaXMgczM5MCBzcGVjaWZpYyBiZWNhdXNlIG9mIHRoZSBgQ09ORklHX0lTTWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFdhaXQuLi4gaXMgYENPTkZJR19JU01gICpvbmx5KiBmb3IgczM5MD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjoyNy42MDQ1ODE4NzlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdGNvbmZpZyBRRVRIX09TWFxcbiAgNzE6XFx0XFx0ZGVmX2Jvb2wgIUhBVkVfTUFSQ0hfWjE1X0ZFQVRVUkVTXFxuICA3MjpcXHRcXHRwcm9tcHQgXFxcInFldGggT1NYIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgNzM6XFx0XFx0ZGVwZW5kcyBvbiBRRVRIXFxuICA3NDpcXHRcXHRoZWxwXFxuICA3NTpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgcWV0aCBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGluIE9TWCBtb2RlLlxcbiAgNzY6XFx0XFx0ICBJZiB1bnN1cmUsIGNob29zZSBOLlxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgQ0NXR1JPVVBcXG4gIDc5OlxcdFxcdHRyaXN0YXRlXFxuICA4MDpcXHRcXHRkZWZhdWx0IChDVENNIHx8IFFFVEggfHwgU01DKVxcbiAgODE6XFx0XFxuICA4MjpcXHRjb25maWcgSVNNXFxuICA4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgSVNNIHZQQ0kgQWRhcHRlclxcXCJcXG4gIDg0OlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gIDg1OlxcdFxcdGRlZmF1bHQgblxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJbnRlcm5hbCBTaGFyZWQgTWVtb3J5XFxuICA4ODpcXHRcXHQgIHZQQ0kgQWRhcHRlci4gVGhlIGFkYXB0ZXIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgU01DIG5ldHdvcmsgcHJvdG9jb2wuXFxuICA4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6MjcuNjA0Njc5MjQ5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjA5NTU3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIERJQlMgYW5kIFNNQyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgRElCUy1yZWxhdGVkIHBhdGNoLCBhbmQgaGVyZSdzIG15IHBsYW4gZm9yIGZ1enppbmcgaXQuIEknbSBzdGFydGluZyB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIGBJU01gIGZlYXR1cmUsIHdoaWNoIHJlbGllcyBvbiBib3RoIGBQQ0lgIGFuZCBgRElCU2AsIGlzIG9ubHkgYnVpbHQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSG93ZXZlciwgc2luY2UgU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlIHMzOTB4IGFyY2hpdGVjdHVyZSwgSSdtIHRoaW5raW5nIEkgY2FuIGRlZmluaXRlbHkgdGFyZ2V0IGBJU01gIG9uIHRoYXQgYXJjaGl0ZWN0dXJlLiBBbHNvIGBESUJTX0xPYCBjYW4gYmUgZnV6emVkIG9uIGFueSBhcmNoaXRlY3R1cmUuIFNvIGxldCdzIGZvY3VzIG9uIGBESUJTYCBhbmQgYERJQlNfTE9gIGJlY2F1c2UgdGhvc2UgY2FuIGJlIGZ1enplZCBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMsIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdWNoIGFzIGBkaWJzX2Rldl9hbGxvY2AsIGFyZSBhY3R1YWxseSBjYWxsZWQgaW4gYSBmdXp6YWJsZSB3YXkuIEkgc2VlIHRoYXQgYGRpYnNfZGV2X2FsbG9jYCBpcyBjYWxsZWQgZWl0aGVyIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgUENJIHByb2JlLCB3aGljaCBhcmUgYm90aCB0cmlnZ2VyYWJsZSBieSBTeXprYWxsZXIgdGhyb3VnaCBpdHMgbW9kdWxlIGxvYWRpbmcgb3IgUENJIHByb2JpbmcgY2FwYWJpbGl0aWVzIChsaWtlIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YCkuIENydWNpYWxseSwgdGhlIGJ1ZyBpdHNlbGYgaXMgYSBmdW5jdGlvbmFsIGJ1Zywgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbG9jay4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaXNzdWUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHRocm91Z2ggU3l6a2FsbGVyJ3MgZXhpc3RpbmcgZmVhdHVyZXMsIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEkgbG9va2VkIGF0IGZ1bmN0aW9ucyBsaWtlIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAsIGBkaWJzX3VucmVnaXN0ZXJfY2xpZW50YCwgYW5kIGBkaWJzX2Rldl9kZWxgLCBidXQgdGhlIHBhdGNoIG1haW5seSB0b3VjaGVzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgZm9yIGJvdGguIGBkaWJzX2Rldl9hbGxvY2AgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgYGRpYnNfZGV2YC4gYGRpYnNfZGV2X2FkZGAgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYWxsb2NhdGluZyBhbiBhcnJheSBhbmQgYWRkaW5nIHRoZSBkZXZpY2UgdG8gdGhlIHN5c3RlbS4gU2luY2UgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGJ1Z2ZpeCBhbmQgYXJlIGZ1bmN0aW9uYWwsIEknbSBjZXJ0YWluIHRoYXQgdGhlc2UgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gU28sIGBGb2N1c1N5bWJvbHNgOiBgZGlic19kZXZfYWxsb2NgLCBgZGlic19kZXZfYWRkYC5cblxuSSdtIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGUgYERJQlNgIGFuZCBgRElCU19MT2AgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUgdW5kZXIgdGVzdC5cblxuTm93LCBhbiBpbnRlcmVzdGluZyB0aG91Z2h0OiBzaG91bGQgSSBhbHNvIGluY2x1ZGUgYFNNQ2AgaW4gYEVuYWJsZUNvbmZpZ3NgPyBgU01DYCBpcyBhICpjbGllbnQqIG9mIERJQlMuIFRoZSBgZGlic19kZXZfYWRkYCBmdW5jdGlvbiBoYXMgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCByZWdpc3RlcmVkIGNsaWVudHMuIElmIEkgZW5hYmxlIGBTTUNgLCB3aGljaCBpcyBhIERJQlMgY2xpZW50LCB0aGF0IGxvb3AgYmVjb21lcyBtb3JlIGludGVyZXN0aW5nLiBFbmFibGluZyBgU01DYCBtZWFucyBhIGNsaWVudCB3aWxsIGJlIHJlZ2lzdGVyZWQuIFRoaXMgcmVnaXN0cmF0aW9uIG1pZ2h0IHRyaWdnZXIgdGhlIHNwZWNpZmljIGV4ZWN1dGlvbiBwYXRoIHdpdGhpbiBgZGlic19kZXZfYWRkYCB3aGVyZSB0aGUgYnVnIGlzIHByZXNlbnQuIFNvLCBhZGRpbmcgYFNNQ2Agc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgU01DYCdzIGRlcGVuZGVuY2llcyBhcmUgY292ZXJlZC4gYFNNQ2AgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIGBJTkVUYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgc28gSSdtIGNvdmVyZWQgdGhlcmUuIGBJTkZJTklCQU5EYCBpcyB1c3VhbGx5IGVuYWJsZWQgdG9vLCBidXQgSSdsbCBhZGQgaXQgdG8gbWFrZSBzdXJlLiBTbywgdG8gY292ZXIgYWxsIGRlcGVuZGVuY2llcywgSSB3aWxsIGluY2x1ZGUgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgIGluIGBFbmFibGVDb25maWdzYC5cblxuRmluYWxseSwgYSBxdWljayByZXZpZXcgb2YgdGhlIHBhdGNoIGFnYWluLiBJdCBpbml0aWFsaXplcyB0aGUgc3BpbmxvY2sgYGRpYnMtXHUwMDNlbG9ja2AuIFRoaXMgY29uZmlybXMgaXQncyBhIGZ1bmN0aW9uYWwgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBzcGlubG9jayBpbml0aWFsaXphdGlvbi4gSXQncyBzYWZlIHRvIGZ1enogdGhpcy5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzU2LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mjo0MS4yMTQyMzg1MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDE4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2Rldl9hbGxvY1wiLFxuICAgIFwiZGlic19kZXZfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZGlicy1cXHUwMDNlbG9ja2Agc3BpbmxvY2sgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBsb2NrIGNvdWxkIGJlIHVzZWQgdW5pbml0aWFsaXplZCBpZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIG9yIGEgY2xlYW51cCBwYXRoIGlzIHRha2VuIGJlZm9yZSBgZGlic19kZXZfYWRkYCBpcyBjYWxsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgY29yZSBESUJTIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2Rldl9hbGxvY1wiLFxuICAgIFwiZGlic19kZXZfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZGlicy1cXHUwMDNlbG9ja2Agc3BpbmxvY2sgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBsb2NrIGNvdWxkIGJlIHVzZWQgdW5pbml0aWFsaXplZCBpZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIG9yIGEgY2xlYW51cCBwYXRoIGlzIHRha2VuIGJlZm9yZSBgZGlic19kZXZfYWRkYCBpcyBjYWxsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgY29yZSBESUJTIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowcxgd4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 02:27:07 +0000 UTC FinishedAt: 2026-08-01 02:52:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "fbcae62b-40ac-470a-8d1a-6174faa8802f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dibs_dev_alloc", "dibs_dev_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgICAmIzM0O2RpYnNfZGV2X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzLVx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYjJmZjM1MTE1YmIyMzU3ODc0ZTE5YmUxMTgxNmFhOGVhYTgyMjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMjo1MDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbmluZGV4IDE0YzNlMmQ4NDkwMmUuLjRjMjZmZDA2OTczZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xuQEAgLTEzOCw2ICYjNDM7MTM4LDcgQEAgc3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKVxuIFx0ZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTtcbiBcdGlmICghZGlicylcbiBcdFx0cmV0dXJuIGRpYnM7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbiBcdGRpYnMtXHUwMDNlZGV2LnJlbGVhc2UgPSBkaWJzX2Rldl9yZWxlYXNlO1xuIFx0ZGlicy1cdTAwM2VkZXYuY2xhc3MgPSBcdTAwMjZkaWJzX2NsYXNzO1xuIFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuQEAgLTE4Niw3ICYjNDM7MTg3LDYgQEAgaW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gXHRpbnQgaSwgcmV0O1xuIFxuIFx0bWF4X2RtYnMgPSBkaWJzLVx1MDAzZW9wcy1cdTAwM2VtYXhfZG1icygpO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbiBcdGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FyciA9IGt6YWxsb2MobWF4X2RtYnMsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGlicy5oIGIvaW5jbHVkZS9saW51eC9kaWJzLmhcbmluZGV4IGM3NTYwN2Y4YTVjZjkuLmQzZTA3NzdmMjVhZTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RpYnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kaWJzLmhcbkBAIC00MzksNyAmIzQzOzQzOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZGlic19nZXRfcHJpdihzdHJ1Y3QgZGlic19kZXYgKmRldixcbiAvKipcbiAgKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlXG4gICpcbi0gKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldlxuJiM0MzsgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldiwgbG9ja1xuICAqIE5PVEU6IFVzZSBwdXRfZGV2aWNlKGRpYnNfZ2V0X2RldihAZGlicykpIHRvIGdpdmUgdXAgeW91ciByZWZlcmVuY2UgaW5zdGVhZFxuICAqIG9mIGZyZWVpbmcgQGRpYnMgQGRldiBkaXJlY3RseSBvbmNlIHlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgdGhpc1xuICAqIGZ1bmN0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWJzX2Rldl9hbGxvYyYjMzQ7LAogICAgJiMzNDtkaWJzX2Rldl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZGlicy1cdTAwM2Vsb2NrYCBzcGlubG9jayBmcm9tIGBkaWJzX2Rldl9hZGRgIHRvIGBkaWJzX2Rldl9hbGxvY2AuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgdGhlIGxvY2sgY291bGQgYmUgdXNlZCB1bmluaXRpYWxpemVkIGlmIGFuIGludGVycnVwdCBvY2N1cnMgb3IgYSBjbGVhbnVwIHBhdGggaXMgdGFrZW4gYmVmb3JlIGBkaWJzX2Rldl9hZGRgIGlzIGNhbGxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHRoZSBjb3JlIERJQlMgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGIyZmYzNTExNWJiMjM1Nzg3NGUxOWJlMTE4MTZhYThlYWE4MjIyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDI6NTA6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmMKaW5kZXggMTRjM2UyZDg0OTAyZS4uNGMyNmZkMDY5NzNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uYwpAQCAtMTM4LDYgJiM0MzsxMzgsNyBAQCBzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpCiAJZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTsKIAlpZiAoIWRpYnMpCiAJCXJldHVybiBkaWJzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2RpYnMtJmd0O2xvY2spOwogCWRpYnMtJmd0O2Rldi5yZWxlYXNlID0gZGlic19kZXZfcmVsZWFzZTsKIAlkaWJzLSZndDtkZXYuY2xhc3MgPSAmYW1wO2RpYnNfY2xhc3M7CiAJZGV2aWNlX2luaXRpYWxpemUoJmFtcDtkaWJzLSZndDtkZXYpOwpAQCAtMTg2LDcgJiM0MzsxODcsNiBAQCBpbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicykKIAlpbnQgaSwgcmV0OwogCiAJbWF4X2RtYnMgPSBkaWJzLSZndDtvcHMtJmd0O21heF9kbWJzKCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFtcDtkaWJzLSZndDtsb2NrKTsKIAlkaWJzLSZndDtkbWJfY2xpZW50aWRfYXJyID0ga3phbGxvYyhtYXhfZG1icywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkaWJzLSZndDtkbWJfY2xpZW50aWRfYXJyKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGlicy5oIGIvaW5jbHVkZS9saW51eC9kaWJzLmgKaW5kZXggYzc1NjA3ZjhhNWNmOS4uZDNlMDc3N2YyNWFlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kaWJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kaWJzLmgKQEAgLTQzOSw3ICYjNDM7NDM5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpkaWJzX2dldF9wcml2KHN0cnVjdCBkaWJzX2RldiAqZGV2LAogLyoqCiAgKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogVGhlIGZvbGxvd2luZyBmaWVsZHMgd2lsbCBiZSB2YWxpZCB1cG9uIHN1Y2Nlc3NmdWwgcmV0dXJuOiBkZXYKJiM0MzsgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldiwgbG9jawogICogTk9URTogVXNlIHB1dF9kZXZpY2UoZGlic19nZXRfZGV2KEBkaWJzKSkgdG8gZ2l2ZSB1cCB5b3VyIHJlZmVyZW5jZSBpbnN0ZWFkCiAgKiBvZiBmcmVlaW5nIEBkaWJzIEBkZXYgZGlyZWN0bHkgb25jZSB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgY2FsbGVkIHRoaXMKICAqIGZ1bmN0aW9uLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGlicyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCBhbmQgYGluY2x1ZGUvbGludXgvZGlicy5oYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIG1vdmluZyBgc3Bpbl9sb2NrX2luaXQoJmFtcDtkaWJzLSZndDtsb2NrKTtgIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBGdW5jdGlvbmFsbHksIHRoaXMgaW5pdGlhbGl6ZXMgdGhlIGxvY2sgZWFybGllci4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlcmUgd2FzIHBvdGVudGlhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbG9jayBpc3N1ZS4gSWYgdGhlIGxvY2sgd2FzIGJlaW5nIHVzZWQgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgd2FzIGNhbGxlZCwgb3IsIGlmIGBkaWJzX2Rldl9hZGRgIHdhc24mIzM5O3QgYWx3YXlzIGNhbGxlZCwgdGhlbiB3ZSYjMzk7ZCBoYXZlIGEgcHJvYmxlbS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gb3IgcG90ZW50aWFsIHVzZS1iZWZvcmUtaW5pdGlhbGl6YXRpb24gYnVnLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIGNvbXBpbGVyLgoKRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgYGRpYnNgIGFjdHVhbGx5ICppcyouIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgaW4gYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AsIG9mIGNvdXJzZS4gT2theSwgbm93LCB3aGF0IGRvZXMgYGRpYnNgIHJlZmVyIHRvIGV4YWN0bHk/IEJldHRlciBkb3VibGUtY2hlY2sgd2hhdCB0aGUgc3RydWN0dXJlIGlzIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6aW5nLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUuIEkmIzM5O2xsIGdyZXAgZm9yIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBOZWVkIHRvIHNlZSB0aGUgY2FsbCBzaXRlcyB0byB0aG9zZSBmdW5jdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlIGBkaWJzYCBkZXZpY2UgaXMgYWxsb2NhdGVkIGFuZCBhZGRlZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBmb3IgdGhlIHVuaW5pdGlhbGl6ZWQgbG9jayBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2Rldl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zMDY9c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzE1LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMTY6XHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzE3LVx0aWYgKCFkaWJzKSB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMzgtXHRrZnJlZShkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMzk6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVx0cHV0X2RldmljZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNDY9c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTItXHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTQtXHRwdXRfZGV2aWNlKFx1MDAyNmxvX2Rldi1cdTAwM2VkaWJzLVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTEyNT1zdGF0aWMgdm9pZCBkaWJzX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTMzLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjEzNDpzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTQ3LX1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpdmluZyBpbnRvIHRoZSAmIzM0O0RpYnMmIzM0OyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gYnVybmluZzogd2hhdCBleGFjdGx5IGlzIHRoaXMgJiMzNDtkaWJzJiMzNDsgdGhpbmcgYWxsIGFib3V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdHJ1ZSBtZWFuaW5nIOKAkyBpdHMgcHVycG9zZSBhbmQgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuY292ZXIgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbi4gSSBrbm93IGl0IG11c3QgYmUgc29tZXdoZXJlIHdpdGhpbiB0aGUgc3lzdGVtLgoKRm9sbG93aW5nIHRoYXQsIGl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ga25vdyAqd2hhdCogaXQgaXMsIEkgaGF2ZSB0byBrbm93ICpob3cqIGl0JiMzOTtzIGltcGxlbWVudGVkLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgYWN0dWFsbHkgZW5hYmxlIG9yIGNvbnRyb2wgJiMzNDtkaWJzLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgdHJpZ2dlcnMg4oCTIGV2ZXJ5dGhpbmcuIEkgd2FudCB0aGUgY29tcGxldGUgcGljdHVyZSwgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERJQlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIERJQlM6IENoZWNraW5nIHRoZSBLY29uZmlnKioKCkFscmlnaHQsIHRoZSBjb250ZXh0IGlzIGNsZWFybHkgRElCUywgb3IgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nLiBJIGtub3cgdGhpcyBhcmNoaXRlY3R1cmUsIHNvIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGluLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQtdGltZSBjb250cm9scyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmZWF0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIHdpbGwgcXVpY2tseSBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBpdCBoYXMgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gcXVpY2tseSBhc3Nlc3MgYSBuZXcgb3IgdW5mYW1pbGlhciBhcmNoaXRlY3R1cmUgZmVhdHVyZS4gSXQmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgZm91bmRhdGlvbiBmb3IgdGhlIGRlZXAgZGl2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0Y29uZmlnIERJQlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG5cbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcbiAgIDc6XHRcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcbiAgIDg6XHRcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXG4gICA5Olx0XG4gIDEwOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXG4gIDExOlx0XHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cbiAgMTI6XHRcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIERJQlNfTE9cbiAgMTU6XHRcdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIERJQlNcbiAgMTc6XHRcdGRlZmF1bHQgblxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXG4gIDIwOlx0XHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cbiAgMjE6XHRcdCAgb2NjdXJzIHdpdGhpbiB0aGUgc2FtZSBPUy4gVGhpcyBoZWxwcyBpbiBjb252ZW5pZW50IHRlc3Rpbmcgb2ZcbiAgMjI6XHRcdCAgZGlicyBjbGllbnRzLCBzaW5jZSBkaWJzIGxvb3BiYWNrIGlzIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZSBvclxuICAyMzpcdFx0ICBoYXJkd2FyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBESUJTIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBpdCBpbnZvbHZlcyBhcmUgYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgdGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBtb3ZpbmcgYHNwaW5fbG9ja19pbml0KCZhbXA7ZGlicy0mZ3Q7bG9jayk7YCBpbnRvIGBkaWJzX2Rldl9hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCBleGFjdGx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UsIG9yIGFyZSBub3cgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBtb2RpZmljYXRpb24uIAoKSXQgbG9va3MgbGlrZSBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBhcmUgdGhlIHR3byBtYWpvciBwbGF5ZXJzIGhlcmUsIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbi4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBvdmVyYWxsIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgc2NoZW1lIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19kZXZfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMzAtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMzMTpcdHJldCA9IGRpYnNfZGV2X2FkZChkaWJzKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRpYnNfZGV2X2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE4My1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxODQ6aW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTg1LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjI0LX1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMjU6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWRkKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6CgoqKkV4YW1pbmluZyBESUJTIERyaXZlciBBbGxvY2F0aW9uICZhbXA7IEFkZGl0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgRElCUyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBhZGRpdGlvbiBsb2dpYywgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByaW1hcnkgZGV2aWNlIG1hbmFnZW1lbnQgc2hvdWxkIHJlc2lkZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBuZXcgRElCUyBkZXZpY2VzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZW4gaW5jb3Jwb3JhdGVkIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGVzZSBtZWNoYW5pc21zIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcGlucG9pbnRpbmcgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcbiAxMzE6XHRcdGtmcmVlKGRpYnMpO1xuIDEzMjpcdH1cbiAxMzM6XHRcbiAxMzQ6XHRzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuIDEzNzpcdFxuIDEzODpcdFx0ZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTtcbiAxMzk6XHRcdGlmICghZGlicylcbiAxNDA6XHRcdFx0cmV0dXJuIGRpYnM7XG4gMTQxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxvY2spO1xuIDE0MjpcdFx0ZGlicy1cdTAwM2VkZXYucmVsZWFzZSA9IGRpYnNfZGV2X3JlbGVhc2U7XG4gMTQzOlx0XHRkaWJzLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmRpYnNfY2xhc3M7XG4gMTQ0Olx0XHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRyZXR1cm4gZGlicztcbiAxNDc6XHR9XG4gMTQ4Olx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xuIDE0OTpcdFxuIDE1MDpcdHN0YXRpYyBzc2l6ZV90IGdpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTUxOlx0XHRcdFx0Y2hhciAqYnVmKVxuIDE1MjpcdHtcbiAxNTM6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAxNTQ6XHRcbiAxNTU6XHRcdGRpYnMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGlic19kZXYsIGRldik7XG4gMTU2Olx0XG4gMTU3Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwVWJcXG5cJiMzNDssIFx1MDAyNmRpYnMtXHUwMDNlZ2lkKTtcbiAxNTg6XHR9XG4gMTU5Olx0c3RhdGljIERFVklDRV9BVFRSX1JPKGdpZCk7XG4gMTYwOlx0XG4gMTYxOlx0c3RhdGljIHNzaXplX3QgZmFicmljX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiAxNjI6XHRcdFx0XHQgICAgICBjaGFyICpidWYpXG4gMTYzOlx0e1xuIDE2NDpcdFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuIDE2NTpcdFx0dTE2IGZhYnJpY19pZDtcbiAxNjY6XHRcbiAxNjc6XHRcdGRpYnMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGlic19kZXYsIGRldik7XG4gMTY4Olx0XHRmYWJyaWNfaWQgPSBkaWJzLVx1MDAzZW9wcy1cdTAwM2VnZXRfZmFicmljX2lkKGRpYnMpO1xuIDE2OTpcdFxuIDE3MDpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsweCUwNHhcXG5cJiMzNDssIGZhYnJpY19pZCk7XG4gMTcxOlx0fVxuIDE3MjpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhmYWJyaWNfaWQpO1xuIDE3MzpcdFxuIDE3NDpcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaWJzX2Rldl9hdHRyc1tdID0ge1xuIDE3NTpcdFx0XHUwMDI2ZGV2X2F0dHJfZ2lkLmF0dHIsXG4gMTc2Olx0XHRcdTAwMjZkZXZfYXR0cl9mYWJyaWNfaWQuYXR0cixcbiAxNzc6XHRcdE5VTEwsXG4gMTc4Olx0fTtcbiAxNzk6XHRcbiAxODA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkaWJzX2Rldl9hdHRyX2dyb3VwID0ge1xuIDE4MTpcdFx0LmF0dHJzID0gZGlic19kZXZfYXR0cnMsXG4gMTgyOlx0fTtcbiAxODM6XHRcbiAxODQ6XHRpbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbiAxODU6XHR7XG4gMTg2Olx0XHRpbnQgbWF4X2RtYnM7XG4gMTg3Olx0XHRpbnQgaSwgcmV0O1xuIDE4ODpcdFxuIDE4OTpcdFx0bWF4X2RtYnMgPSBkaWJzLVx1MDAzZW9wcy1cdTAwM2VtYXhfZG1icygpO1xuIDE5MDpcdFx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyID0ga3phbGxvYyhtYXhfZG1icywgR0ZQX0tFUk5FTCk7XG4gMTkxOlx0XHRpZiAoIWRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycilcbiAxOTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTkzOlx0XHRtZW1zZXQoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyLCBOT19ESUJTX0NMSUVOVCwgbWF4X2RtYnMpO1xuIDE5NDpcdFxuIDE5NTpcdFx0cmV0ID0gZGV2aWNlX2FkZChcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gMTk2Olx0XHRpZiAocmV0KVxuIDE5NzpcdFx0XHRnb3RvIGZyZWVfY2xpZW50X2FycjtcbiAxOTg6XHRcbiAxOTk6XHRcdHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZkaWJzLVx1MDAzZWRldi5rb2JqLCBcdTAwMjZkaWJzX2Rldl9hdHRyX2dyb3VwKTtcbiAyMDA6XHRcdGlmIChyZXQpIHtcbiAyMDE6XHRcdFx0ZGV2X2VycihcdTAwMjZkaWJzLVx1MDAzZWRldiwgXCYjMzQ7c3lzZnNfY3JlYXRlX2dyb3VwIGZhaWxlZCBmb3IgZGlic19kZXZcXG5cJiMzNDspO1xuIDIwMjpcdFx0XHRnb3RvIGVycl9kZXZpY2VfZGVsO1xuIDIwMzpcdFx0fVxuIDIwNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkaWJzX2Rldl9saXN0Lm11dGV4KTtcbiAyMDU6XHRcdG11dGV4X2xvY2soXHUwMDI2Y2xpZW50c19sb2NrKTtcbiAyMDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heF9jbGllbnQ7ICYjNDM7JiM0MztpKSB7XG4gMjA3Olx0XHRcdGlmIChjbGllbnRzW2ldKSB7XG4gMjA4Olx0XHRcdFx0Y2xpZW50c1tpXS1cdTAwM2VvcHMtXHUwMDNlYWRkX2RldihkaWJzKTtcbiAyMDk6XHRcdFx0XHRkaWJzX3NldHVwX2ZvcndhcmRpbmcoY2xpZW50c1tpXSwgZGlicyk7XG4gMjEwOlx0XHRcdH1cbiAyMTE6XHRcdH1cbiAyMTI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjbGllbnRzX2xvY2spO1xuIDIxMzpcdFx0bGlzdF9hZGQoXHUwMDI2ZGlicy1cdTAwM2VsaXN0LCBcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QpO1xuIDIxNDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpYnNfZGV2X2xpc3QubXV0ZXgpO1xuIDIxNTpcdFxuIDIxNjpcdFx0cmV0dXJuIDA7XG4gMjE3Olx0XG4gMjE4Olx0ZXJyX2RldmljZV9kZWw6XG4gMjE5Olx0XHRkZXZpY2VfZGVsKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbiAyMjA6XHRmcmVlX2NsaWVudF9hcnI6XG4gMjIxOlx0XHRrZnJlZShkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xuIDIyMjpcdFx0cmV0dXJuIHJldDtcbiAyMjM6XHRcbiAyMjQ6XHR9XG4gMjI1Olx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWRkKTtcbiAyMjY6XHRcbiAyMjc6XHR2b2lkIGRpYnNfZGV2X2RlbChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG4gMjI4Olx0e1xuIDIyOTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCBmb3IgRElCUyBEZXZpY2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgZnVuZGFtZW50YWwgaXNzdWUgaW4gdGhlIERJQlMgZGV2aWNlIG1hbmFnZW1lbnQgY29kZS4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIGJ1ZyB3aGVyZSB0aGUgYGRpYnMtJmd0O2xvY2tgIHNwaW5sb2NrIGlzIGJlaW5nIHVzZWQgYmVmb3JlIHRoZSBgZGlic19kZXZfYWRkYCBmdW5jdGlvbiBpcyBjYWxsZWQsIG9yIHBvdGVudGlhbGx5IGV2ZW4gd2hlbiBgZGlic19kZXZfYWRkYCBpcyBuZXZlciBjYWxsZWQgYXQgYWxsLiBUaGUgdW5kZXJseWluZyBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSB0aGUgc2VxdWVuY2Ugb2YgZGV2aWNlIGFsbG9jYXRpb24gYW5kIGFkZGl0aW9uOiBgZGlic19kZXZfYWxsb2NgIGhhbmRsZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCB0aGVuIGBkaWJzX2Rldl9hZGRgIHN1YnNlcXVlbnRseSBhZGRzIHRoaXMgZGV2aWNlIHRvIHRoZSBicm9hZGVyIHN5c3RlbS4gSWYgZm9yIHNvbWUgcmVhc29uIGBkaWJzX2Rldl9hZGRgIGlzbiYjMzk7dCBpbnZva2VkICphZnRlciogYWxsb2NhdGlvbiwgYW5kIHlldCB0aGUgZGV2aWNlIGlzIGZyZWVkLCBvciwgd29yc2UsIHNvbWUgb3RoZXIgY29kZSB0cmllcyB0byB1c2UgdGhlIGRldmljZSAqYmVmb3JlKiBpdCBoYXMgYmVlbiBwcm9wZXJseSBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbSB2aWEgdGhlIGNhbGwgdG8gYGRpYnNfZGV2X2FkZGAsIHdlJiMzOTt2ZSBnb3QgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSByYWNlIGNvbmRpdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgYmFkbmVzcy4KClRoZSBzb2x1dGlvbiBiZWluZyBwcm9wb3NlZCBpcyB0byBtb3ZlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3BpbmxvY2ssIGBzcGluX2xvY2tfaW5pdCgmYW1wO2RpYnMtJmd0O2xvY2spYCwgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBpbnNpZGUgYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBpcyBlbnN1cmluZyB0aGUgbG9jayBpcyBpbml0aWFsaXplZCAqYXQgdGhlIHBvaW50IG9mIGRldmljZSBhbGxvY2F0aW9uKi4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgYXBwcm9hY2ggdG8gYWRkcmVzcyB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggdGhlIGBESUJTYCBhbmQgYERJQlNfTE9gIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBjb3ZlcmFnZSB3ZSBuZWVkLiBBbmQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBhcmUgZ29pbmcgdG8gYmUgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IG1heSBiZSBleGVyY2lzZWQuCgpXYWl0IGEgbWludXRlLCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBhcmUgZXhwb3J0ZWQgc3ltYm9scywgbWVhbmluZyBkcml2ZXJzIGFyZSBsaWtlbHkgY2FsbGluZyB0aGVtLiBUaGlzIGFkZHMgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIHRoZSByZXZpZXcgYW5kIHRlc3RpbmcuIFdlIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgZHJpdmVyIHVzYWdlIGlzIGNvcnJlY3QhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IGRyaXZlcnMgdXRpbGl6aW5nIHRoZXNlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19kZXZfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzA2PXN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzE2Olx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cdGlmICghZGlicykge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVx0a2ZyZWUoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5Olx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0MC1cdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTM6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU0LVx0cHV0X2RldmljZShcdTAwMjZsb19kZXYtXHUwMDNlZGlicy1cdTAwM2VkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBkaWJzX2xvX2Rldl9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBjb250ZXh0IGhlcmUgY2xlYXJseSBwb2ludHMgdG8gYSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGNhbGxlZCBgZGlic19sb19kZXZfcHJvYmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5ICp3aGF0KiBpdCBpcy4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCBsaWtlbHkgaW52b2x2ZXMgRGV2aWNlIEluaXRpYWxpemF0aW9uIEJsb2NrIFN1YnN5c3RlbSAoZGlicykgYW5kIGl0IGlzIGxvdy1sZXZlbCwgYSBwcm9iZS4gTXkgZXhwZXJpZW5jZSBpcyB0aGF0IGEgcHJvYmUgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGRldmljZSBkaXNjb3Zlcnkgb3IgaW5pdGlhbGl6YXRpb24gcm91dGluZSB3aXRoaW4gdGhlIGtlcm5lbCwgcXVpdGUgcG9zc2libHkgc3BlY2lmaWMgdG8gYSBzdG9yYWdlIG9yIEkvTyBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSXMgaXQgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBuZXcgaGFyZHdhcmU/IElzIGl0IHBhcnQgb2YgYSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IElzIHRoaXMgc29tZSBzb3J0IG9mIGVhcmx5IGJvb3Qgc3RhZ2UgY29tcG9uZW50PyBUaGUgJiMzNDtsbyYjMzQ7IHByZWZpeCBjb3VsZCBiZSBhIHJlZmVyZW5jZSB0byBhIExvdyBPdXRwdXQuIE15IGd1dCB0ZWxscyBtZSBJIHNob3VsZCBjaGVjayBrZXJuZWwgc291cmNlIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBkaWJzIHN1YnN5c3RlbSBvciBzdG9yYWdlIGRyaXZlcnMsIGFuZCBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGlkZW50aWZpZXIgd2l0aCBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgbG9nZ2luZyBtZXNzYWdlcyBpbiB0aGUgc3lzdGVtLiBUaGUgc3BlY2lmaWNzIGFyZSBrZXkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGNhbGxlZC4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2VzIG9yIGJ1cyBzeXN0ZW1zLiBVbmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHdvcmtmbG93IHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0c3RhdGljIHZvaWQgZGlic19sb19kZXZfZXhpdChzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2NudCkpXG4gMzAzOlx0XHRcdHdhaXRfZXZlbnQobGRldi1cdTAwM2VsZGV2X3JlbGVhc2UsICFhdG9taWNfcmVhZChcdTAwMjZsZGV2LVx1MDAzZWRtYl9jbnQpKTtcbiAzMDQ6XHR9XG4gMzA1Olx0XG4gMzA2Olx0c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxuIDMwNzpcdHtcbiAzMDg6XHRcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbiAzMDk6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcbiAzMTA6XHRcdGludCByZXQ7XG4gMzExOlx0XG4gMzEyOlx0XHRsZGV2ID0ga3phbGxvY19vYmooKmxkZXYpO1xuIDMxMzpcdFx0aWYgKCFsZGV2KVxuIDMxNDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMTU6XHRcbiAzMTY6XHRcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuIDMxNzpcdFx0aWYgKCFkaWJzKSB7XG4gMzE4Olx0XHRcdGtmcmVlKGxkZXYpO1xuIDMxOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMjA6XHRcdH1cbiAzMjE6XHRcbiAzMjI6XHRcdGxkZXYtXHUwMDNlZGlicyA9IGRpYnM7XG4gMzIzOlx0XHRkaWJzLVx1MDAzZWRydl9wcml2ID0gbGRldjtcbiAzMjQ6XHRcdGRpYnNfbG9fZGV2X2luaXQobGRldik7XG4gMzI1Olx0XHR1dWlkX2dlbihcdTAwMjZkaWJzLVx1MDAzZWdpZCk7XG4gMzI2Olx0XHRkaWJzLVx1MDAzZW9wcyA9IFx1MDAyNmRpYnNfbG9fb3BzO1xuIDMyNzpcdFxuIDMyODpcdFx0ZGlicy1cdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcbiAzMjk6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZkaWJzLVx1MDAzZWRldiwgXCYjMzQ7JXNcJiMzNDssIGRpYnNfbG9fZGV2X25hbWUpO1xuIDMzMDpcdFxuIDMzMTpcdFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xuIDMzMjpcdFx0aWYgKHJldClcbiAzMzM6XHRcdFx0Z290byBlcnJfcmVnO1xuIDMzNDpcdFx0bG9fZGV2ID0gbGRldjtcbiAzMzU6XHRcdHJldHVybiAwO1xuIDMzNjpcdFxuIDMzNzpcdGVycl9yZWc6XG4gMzM4Olx0XHRrZnJlZShkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xuIDMzOTpcdFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG4gMzQwOlx0XHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbiAzNDE6XHRcdGtmcmVlKGxkZXYpO1xuIDM0MjpcdFxuIDM0MzpcdFx0cmV0dXJuIHJldDtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0aWYgKCFsb19kZXYpXG4gMzQ5Olx0XHRcdHJldHVybjtcbiAzNTA6XHRcbiAzNTE6XHRcdGRpYnNfZGV2X2RlbChsb19kZXYtXHUwMDNlZGlicyk7XG4gMzUyOlx0XHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XG4gMzUzOlx0XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbiAzNTQ6XHRcdHB1dF9kZXZpY2UoXHUwMDI2bG9fZGV2LVx1MDAzZWRpYnMtXHUwMDNlZGV2KTtcbiAzNTU6XHRcdGtmcmVlKGxvX2Rldik7XG4gMzU2Olx0XHRsb19kZXYgPSBOVUxMO1xuIDM1NzpcdH1cbiAzNTg6XHRcbiAzNTk6XHRpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXG4gMzYwOlx0e1xuIDM2MTpcdFx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XG4gMzYyOlx0fVxuIDM2MzpcdFxuIDM2NDpcdHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXG4gMzY1Olx0e1xuIDM2NjpcdFx0ZGlic19sb19kZXZfcmVtb3ZlKCk7XG4gMzY3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBkaWJzX2xvX2Rldl9wcm9iZWAqKgoKUmlnaHQsIHNvIGBkaWJzX2xvX2Rldl9wcm9iZWAuIEkmIzM5O20gc3RhcnRpbmcgZnJvbSB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0JiMzOTtzIGJlaW5nIGludm9rZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgYW5kIHRoZSBjYWxsIHN0YWNrIHN1Z2dlc3RzIGl0JiMzOTtzIGNvbWluZyBmcm9tIGBkaWJzX2xvb3BiYWNrX2luaXRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGRldmljZSBwcm9iZSBmdW5jdGlvbiBzbyBpdCBzdGFuZHMgdG8gcmVhc29uIGl0JiMzOTtzIHRpZWQgdG8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBhdCBzdGFydHVwLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gdHJhY2Ugd2hlcmUgYGRpYnNfbG9vcGJhY2tfaW5pdGAgaXRzZWxmIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBkZXBlbmRlbmN5IGZsb3csIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyBpdCBhbmQgYW55IHBvdGVudGlhbCB0aW1pbmcgaXNzdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19sb29wYmFja19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1OC1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzU5OmludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oPTM1PXN0cnVjdCBkaWJzX2xvX2RldiB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00My1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDQ6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDUtdm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ2LSNlbHNlXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oOjQ3OnN0YXRpYyBpbmxpbmUgaW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00OC17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTI1ND1zdGF0aWMgaW50IF9faW5pdCBkaWJzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjYxLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjI2MjpcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjYzLVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzIyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgTW9kdWxlIFNldHVwKioKClJpZ2h0LCBzbyBgZGlic19sb29wYmFja19pbml0YCBpcyBpbnZva2VkIGZyb20gYGRpYnNfaW5pdGAuIGBkaWJzX2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzbiYjMzk7dCBzb21ldGhpbmcgdHJpZ2dlcmVkIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyBoYXBwZW5pbmcgYXMgcGFydCBvZiB0aGUgc3lzdGVtJiMzOTtzIHNldHVwIHByb2Nlc3Mgd2hlbiB0aGUgbW9kdWxlIGxvYWRzLgoKTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGxvY2F0aW9uLgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gZWxzZSBpcyBjYWxsaW5nIGBkaWJzX2Rldl9hbGxvY2AuIEl0IHNlZW1zIHRvIG1lIHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIHdvdWxkIGJyaW5nIGJldHRlciBpbnNpZ2h0cy4gVGltZSB0byBkbyBhIHF1aWNrIGdyZXAgc2VhcmNoIG9uIHRoZSB3aG9sZSBrZXJuZWwgZm9yIGNhbGxzIHRvIGBkaWJzX2Rldl9hbGxvY2AgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzA2PXN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzE2Olx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cdGlmICghZGlicykge1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVx0a2ZyZWUoZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5Olx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0MC1cdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTM6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU0LVx0cHV0X2RldmljZShcdTAwMjZsb19kZXYtXHUwMDNlZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz0xMjU9c3RhdGljIHZvaWQgZGlic19kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxMzQ6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzNS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0Ny19XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTQ4OkVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2FsbG9jKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NTk0PXN0YXRpYyBpbnQgaXNtX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI0LVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjI1Olx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02MjYtXHRpZiAoIWRpYnMpIHtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjAtZXJyX2RpYnM6XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2NjE6XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY2Mi1cdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY3ND1zdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY4MC1cdGlzbV9kZXZfZXhpdChpc20pO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjgxOlx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODItXHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD00Mjk9c3RhdGljIGlubGluZSB2b2lkICpkaWJzX2dldF9wcml2KHN0cnVjdCBkaWJzX2RldiAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTQzOS0vKipcbmluY2x1ZGUvbGludXgvZGlicy5oOjQ0MDogKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDEtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDctICovXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDg6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZGlicy5oLTQ0OS0vKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgczM5MCBTcGVjaWZpY2l0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIGBkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuY2AgZmlsZSBhbmQgSSBzZWUgdGhlIGNhbGwgdG8gYGRpYnNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBkaWJzYCBmdW5jdGlvbiBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGF0IGBpc21fZHJ2LmNgIGlzIGV4cGxpY2l0bHkgYW4gczM5MCBkcml2ZXIsIGl0IHJhaXNlcyB0aGUgcXVlc3Rpb24uCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgZmlsZS4gWWVzLCBjb25maXJtZWQsIGl0IHJlZmVycyB0byAmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0JiMzNDsuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoYXQgKm9ubHkqIGZvciBzMzkwPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHdpdGggYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYCB0byBiZSBzdXJlLCBhbmQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNlIHdpdGhpbiB0aGUgczM5MCBuZXR3b3JraW5nIGRyaXZlci4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVNNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnPTc4PWNvbmZpZyBDQ1dHUk9VUFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZy04MS1cbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZzo4Mjpjb25maWcgSVNNXG5kcml2ZXJzL3MzOTAvbmV0L0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBJU00gdlBDSSBBZGFwdGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDUwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGlicyBEcml2ZXIgVXNhZ2UqKgoKT2theSwgc28gYElTTWAgaXMgZGVmaW5pdGVseSBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciwgbm8gc3VycHJpc2VzIHRoZXJlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBESUJTX0xPYCBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYSBsb29wYmFjayBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkga25vdyB0aGF0IGtpbmQgb2YgdGhpbmcgaXMgaGVscGZ1bCBmb3IgdGVzdGluZywgZXNwZWNpYWxseSBmb3IgZGlicyBjbGllbnRzLiBUaGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSYjMzk7cyBzb2Z0d2FyZS1iYXNlZCBuYXR1cmUgbWVhbnMgaXQmIzM5O3Mgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG9yIGhhcmR3YXJlLCB3aGljaCBpcyBhIGRlZmluaXRlIGFkdmFudGFnZS4gU28sIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgYERJQlNfTE9gICpzaG91bGQqIGJlIHVzYWJsZSBvbiBhbnkgYXJjaGl0ZWN0dXJlLiBOb3csIEkmIzM5O20gY3VyaW91cy4gQXJlIHRoZXJlIGFueSBvdGhlciBkcml2ZXJzIGJleW9uZCBgSVNNYCB0aGF0IGFyZSB1dGlsaXppbmcgdGhlIGBkaWJzYCBpbnRlcmZhY2U/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZGlic19jbGllbnRfcmVnaXN0ZXJgIGZ1bmN0aW9uLCB0byBzZWUgd2hlcmUgZWxzZSBkaWJzIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19jbGllbnRfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGRpYnNcX3JlZ2lzdGVyXF9jbGllbnQqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRpYnNfcmVnaXN0ZXJfY2xpZW50YC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuIEnigJltIHRoaW5raW5nIGFib3V0IHdoYXQgaXRzIHR5cGljYWwgcm9sZSBzaG91bGQgYmUgYW5kIEnigJlsbCBjb25zaWRlciB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlOiB3aGF0IGlzIGl0IGV4cGVjdGluZyBhcyBpbnB1dCwgYW5kIHdoYXQgZG9lcyBpdCBwcm9taXNlIHRvIGRlbGl2ZXIgaW4gdGVybXMgb2Ygb3V0cHV0PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGl0cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIC0gd2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgY2FsbCBvciB1c2U/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoaW4gdGhlIGJpZ2dlciBzeXN0ZW0sIGFuZCB3aGF0IHNwZWNpZmljIHJlc3BvbnNpYmlsaXRpZXMgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHdpdGhpbiB0aGUgZGlicyB3b3JrZmxvdy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiByaWdodCBhd2F5LiBJcyB0aGlzIGZ1bmN0aW9uIGEgcG9pbnQgb2YgY29udGVudGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucz8gRG9lcyB0aGlzIGZ1bmN0aW9uIGNhdXNlIG1vcmUgb3ZlcmhlYWQgdGhhbiBpdCBzaG91bGQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpYnNfcmVnaXN0ZXJfY2xpZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX21haW4uYz00MD1zdGF0aWMgdm9pZCBkaWJzX3NldHVwX2ZvcndhcmRpbmcoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQsXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ5LVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjUwOmludCBkaWJzX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy01MS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTgwLX1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo4MTpFWFBPUlRfU1lNQk9MX0dQTChkaWJzX3JlZ2lzdGVyX2NsaWVudCk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtODItXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9MTE2PXN0cnVjdCBkaWJzX2NsaWVudF9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTEyMC1cdCAqXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMjE6XHQgKiBXaWxsIGJlIGNhbGxlZCBkdXJpbmcgZGlic19yZWdpc3Rlcl9jbGllbnQoKSBmb3IgYWxsIGV4aXN0aW5nXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMjItXHQgKiBkaWJzIGRldmljZXMgYW5kIHdoZW5ldmVyIGEgbmV3IGRpYnMgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9MTY2PXN0cnVjdCBkaWJzX2NsaWVudCB7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTc2LS8qKlxuaW5jbHVkZS9saW51eC9kaWJzLmg6MTc3OiAqIGRpYnNfcmVnaXN0ZXJfY2xpZW50KCkgLSByZWdpc3RlciBhIGNsaWVudCB3aXRoIGRpYnMgbGF5ZXJcbmluY2x1ZGUvbGludXgvZGlicy5oLTE3OC0gKiBAY2xpZW50OiB0aGlzIGNsaWVudFxuLS1cbmluY2x1ZGUvbGludXgvZGlicy5oLTE4Mi0gKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjE4MzppbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtMTg0LS8qKlxuLS1cbm5ldC9zbWMvc21jX2lzbS5jPTYzMD1pbnQgc21jX2lzbV9pbml0KHZvaWQpXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtNjM2LVxubmV0L3NtYy9zbWNfaXNtLmM6NjM3Olx0cmMgPSBkaWJzX3JlZ2lzdGVyX2NsaWVudChcdTAwMjZzbWNfZGlic19jbGllbnQpO1xubmV0L3NtYy9zbWNfaXNtLmMtNjM4LVx0cmV0dXJuIHJjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTTUMgQ2xpZW50IFJlZ2lzdHJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvc21jL3NtY19pc20uY2AuIEl0IGxvb2tzIGxpa2UgdGhpcyBmaWxlIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIGNsaWVudCDigJMgdGhhdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludCwgbmF0dXJhbGx5LiBTTUMsIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIHRoYXQmIzM5O3Mgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUsIHJpZ2h0PyBPa2F5LCBzbyBJIHNob3VsZCBzZWUgaG93IHRoaXMgY2xpZW50IHJlZ2lzdHJhdGlvbiBpcyBjb25maWd1cmVkLiBBIHF1aWNrIGNoZWNrIG9mIGBuZXQvc21jL0tjb25maWdgIHNob3VsZCBwcm92aWRlIHRoZSBkZXRhaWxzIEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggb25lcyBkZXBlbmQgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk1NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYFNNQ2AgUGF0Y2ggb24gYERJQlNgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byBgU01DYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYERJQlNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYERJQlNfTE9gIGlzIGEgc29mdHdhcmUgbG9vcGJhY2sgZGV2aWNlLCBpdCBvZmZlcnMgYSBjb252ZW5pZW50LCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgdGVzdGluZyBncm91bmQgZm9yIHRoZXNlIGNoYW5nZXMuICBUaGUgcmVsZXZhbnQgY29uZmlncyB0byBlbmFibGUgYXBwZWFyIHRvIGJlIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AuCgpOb3csIGlmIEkgdGhpbmsgYWJvdXQgaXQgYSBiaXQgbW9yZSwgd291bGRuJiMzOTt0IHNpbXBseSBlbmFibGluZyBgRElCU2AgYW5kIGBESUJTX0xPYCBiZSBzdWZmaWNpZW50IHRvIGV4ZXJjaXNlIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgPyBSZWNhbGwgdGhhdCBgZGlic19sb29wYmFja19pbml0YCBjYWxscyBgZGlic19sb19kZXZfcHJvYmVgLCBhbmQgKnRoYXQqIGluIHR1cm4gY2FsbHMgYm90aCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gQWhhISBgZGlic19sb29wYmFja19pbml0YCBpcyBpbnZva2VkIHdpdGhpbiBgZGlic19pbml0YCwgd2hpY2ggaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGZvciBgZGlic2AuCgpUaGVyZWZvcmUsIGxvYWRpbmcgdGhlIGBkaWJzYCBtb2R1bGUgKG9yIGJvb3Rpbmcgd2l0aCBpdCBidWlsdC1pbikgc2hvdWxkIGRpcmVjdGx5IHRyaWdnZXIgdGhlIGV4ZWN1dGlvbiBvZiBib3RoIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBTbyB0aGF0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gdGVzdCB0aGUgYmFzZSBjaGFuZ2VzLiBCdXQgaXMgdGhlcmUgYSB1c2VyLXNwYWNlIHRyaWdnZXJhYmxlIHBhdGggSSBuZWVkIHRvIGNvbnNpZGVyPyBJdCBpcyBwb3NzaWJsZSB0aGF0IHdoZW4gYFNNQ2AgaXMgZW5hYmxlZCwgaXQgbWF5IHRyaWdnZXIgc29tZSBvcGVyYXRpb25zIG9uIHRoZSBgZGlic2AgZGV2aWNlcz8KClRoZSBwYXRjaCBpdHNlbGYgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgcmVsb2NhdGlvbiBvZiBgc3Bpbl9sb2NrX2luaXQoJmFtcDtkaWJzLSZndDtsb2NrKWAgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGlzIGNydWNpYWwuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlIGxvY2sgKGBkaWJzLSZndDtsb2NrYCkgbWlnaHQgaGF2ZSBiZWVuIHVzZWQgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgd2FzIGNhbGxlZCwgb3IsIGFsdGVybmF0aXZlbHksIHdoZW4gYGRpYnNfZGV2X2FkZGAgd2FzIG5vdCBjYWxsZWQgYXQgYWxsLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGBkaWJzLSZndDtsb2NrYCBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSB0aG9zZSB1c2VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzLVx1MDAzZWxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9NDg9c3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTA3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMDg6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTA5LVx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW3NiYV9pZHhdID0gY2xpZW50LVx1MDAzZWlkO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMTA6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMTEtXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0xMzI9c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNTgtXHRpZiAobGFzdCkge1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNTk6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNjAtXHRcdGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWJfbm9kZS1cdTAwM2VzYmFfaWR4XSA9IE5PX0RJQlNfQ0xJRU5UO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNjE6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2Mi1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTIzNT1zdGF0aWMgaW50IGRpYnNfbG9fbW92ZV9kYXRhKHN0cnVjdCBkaWJzX2RldiAqZGlicywgdTY0IGRtYl90b2ssXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNjktXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3MDpcdHNwaW5fbG9jayhcdTAwMjZkaWJzLVx1MDAzZWxvY2spO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzEtXHRjbGllbnRfaWQgPSBkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnJbc2JhX2lkeF07XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzQtXHRcdGRpYnMtXHUwMDNlc3Vic1tjbGllbnRfaWRdLVx1MDAzZW9wcy1cdTAwM2VoYW5kbGVfaXJxKGRpYnMsIHNiYV9pZHgsIHNfbWFzayk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3NTpcdHNwaW5fdW5sb2NrKFx1MDAyNmRpYnMtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI3Ni1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9NDA9c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy00NC1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo0NTpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ2LVx0ZGlicy1cdTAwM2VzdWJzW2NsaWVudC1cdTAwM2VpZF0gPSBjbGllbnQ7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6NDc6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ4LX1cbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9ODM9aW50IGRpYnNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTkxLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkaWJzLCBcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo5MjpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtOTMtXHRcdG1heF9kbWJzID0gZGlicy1cdTAwM2VvcHMtXHUwMDNlbWF4X2RtYnMoKTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTAzLVx0XHRkaWJzLVx1MDAzZXN1YnNbY2xpZW50LVx1MDAzZWlkXSA9IE5VTEw7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTA0Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEwNS1cdFx0Y2xpZW50c1tjbGllbnQtXHUwMDNlaWRdLVx1MDAzZW9wcy1cdTAwM2VkZWxfZGV2KGRpYnMpO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMTgtZXJyX3JlZ19kbWI6XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTE5Olx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMjAtXHRtdXRleF91bmxvY2soXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jPTEzND1zdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0MC1cdFx0cmV0dXJuIGRpYnM7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTQxOlx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDItXHRkaWJzLVx1MDAzZWRldi5yZWxlYXNlID0gZGlic19kZXZfcmVsZWFzZTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjI3PXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjMzLVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjIzNDpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIzNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICYjNDM7JiM0MztpKVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIzNi1cdFx0ZGlicy1cdTAwM2VzdWJzW2ldID0gTlVMTDtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMzc6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMgaW4gZGlicyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRpYnNfZGV2X2RlbGAgZnVuY3Rpb24sIGFuZCBpdCB1c2VzIGBkaWJzLSZndDtsb2NrYC4gUmlnaHQuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcHJvY2Vzcy4gSWYgYGRpYnNfZGV2X2FsbG9jYCBnZXRzIGNhbGxlZCwgYnV0IHNvbWV0aGluZyBnb2VzIHdyb25nIOKAkyBsaWtlIGBkaWJzX2Rldl9hZGRgIGZhaWxzIG9yIGlzbiYjMzk7dCBldmVuIGNhbGxlZCDigJMgYW5kIHRoZW4gYGRpYnNfZGV2X2RlbGAgZ2V0cyB0cmlnZ2VyZWQgZm9yIGNsZWFudXAsIHdlIG1pZ2h0IGhhdmUgYSBwcm9ibGVtLiBJdCBjb3VsZCBiZSB0cnlpbmcgdG8gdXNlIGFuIHVuaW5pdGlhbGl6ZWQgbG9jay4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8hCgpMZXQgbWUgdHJhY2UgdGhpcyBmdXJ0aGVyLi4uIGBkaWJzX2xvX2Rldl9wcm9iZWAgY2FsbHMgYGRpYnNfZGV2X2FsbG9jYCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQuIElmIGBkaWJzX2Rldl9hZGRgIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgZXJyX3JlZ2AuIEFuZCB3aGF0IGRvZXMgKnRoYXQqIGRvPyBBaCwgaXQgY2FsbHMgYHB1dF9kZXZpY2UoJmFtcDtkaWJzLSZndDtkZXYpYC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJiMzOTt0KiBjYWxsIGBkaWJzX2Rldl9kZWxgLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgY29uY2Vybi4KCk5vdywgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB3aGF0IGhhcHBlbnMgaWYgYGRpYnNfcmVnaXN0ZXJfY2xpZW50YCBpcyBjYWxsZWQgY29uY3VycmVudGx5PyBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGBkaWJzX2Rldl9saXN0YC4gUmVtZW1iZXIsIGEgZGV2aWNlIGlzIGFkZGVkIHRvIHRoaXMgbGlzdCBpbiBgZGlic19kZXZfYWRkYCwgc28gaXQmIzM5O3MgcHJvdGVjdGVkIHRvIGEgZGVncmVlLiBJdCB3b24mIzM5O3Qgc2VlIGFuIHVuaW5pdGlhbGl6ZWQgZGV2aWNlIGJlZm9yZSBgZGlic19kZXZfYWRkYC4gT2theSwgdGhhdCYjMzk7cyBzbGlnaHRseSBsZXNzIGNvbmNlcm5pbmcuLi4gYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlci4KClJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYGlzbV9kcnYuY2AuIFRoaXMgY291bGQgdmVyeSB3ZWxsIGhvbGQgYW5vdGhlciBwYXJ0IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2Rldl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz01OTQ9c3RhdGljIGludCBpc21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02MzUtXHQvKiBlbmFibGUgaXNtIGRldmljZSwgYnV0IGFueSBpbnRlcnJ1cHRzIGFuZCBldmVudHMgd2lsbCBiZSBpZ25vcmVkXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MzY6XHQgKiBiZWZvcmUgZGlic19kZXZfYWRkKCkgYWRkcyBpdCB0byBhbnkgY2xpZW50cy5cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYzNy1cdCAqL1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY1MS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY1MjpcdHJldCA9IGRpYnNfZGV2X2FkZChkaWJzKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY1My1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTA2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGlzbV9wcm9iZWAgaW4gdGhlIHMzOTAgTmV0d29yayBEcml2ZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaXNtX3Byb2JlYCB3aXRoaW4gYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBHaXZlbiB0aGUgZmlsZSBwYXRoLCB0aGlzIGlzIGxpa2VseSB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBJbnRlZ3JhdGVkIFN1YnN5c3RlbSBNdWx0aXBsZXhlciAoSVNNKSBuZXR3b3JrIGRyaXZlciBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGRpc2NvdmVyeSBhc3BlY3RzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIGhvdyBpdCBzZXRzIHVwIHRoZSBuZXR3b3JrIGludGVyZmFjZSwgYW5kIHdoYXQgcmVzb3VyY2VzIGl0IGNsYWltcy4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IHdoZW4gYSBuZXcgSVNNIGRldmljZSBpcyBkZXRlY3RlZCBieSB0aGUgc3lzdGVtIGFuZCBuZWVkcyB0byBiZSBicm91Z2h0IG9ubGluZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgZGVidWdnaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcuIEtub3dpbmcgdGhlIGRldmljZSB3ZWxsLCBJIGNhbiBiZSBzdXJlIHRvIGV4cGVjdCBjZXJ0YWluIHNwZWNpZmljIGNhbGxzLCBlcnJvciBjb25kaXRpb25zIGFuZCBzcGVjaWZpYyByZXNvdXJjZSB1c2FnZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiBhbnkgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgbWFuYWdpbmcgdGhlIElTTSBuZXR3b3JraW5nIGxheWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XG4gNjIxOlx0XHRkbWFfc2V0X3NlZ19ib3VuZGFyeShcdTAwMjZwZGV2LVx1MDAzZWRldiwgU1pfMU0gLSAxKTtcbiA2MjI6XHRcdGRtYV9zZXRfbWF4X3NlZ19zaXplKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBTWl8xTSk7XG4gNjIzOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiA2MjQ6XHRcbiA2MjU6XHRcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuIDYyNjpcdFx0aWYgKCFkaWJzKSB7XG4gNjI3Olx0XHRcdHJldCA9IC1FTk9NRU07XG4gNjI4Olx0XHRcdGdvdG8gZXJyX3Jlc291cmNlO1xuIDYyOTpcdFx0fVxuIDYzMDpcdFx0Lyogc2V0IHRoaXMgdXAgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzICovXG4gNjMxOlx0XHRpc20tXHUwMDNlZGlicyA9IGRpYnM7XG4gNjMyOlx0XHRkaWJzLVx1MDAzZWRydl9wcml2ID0gaXNtO1xuIDYzMzpcdFx0ZGlicy1cdTAwM2VvcHMgPSBcdTAwMjZpc21fb3BzO1xuIDYzNDpcdFxuIDYzNTpcdFx0LyogZW5hYmxlIGlzbSBkZXZpY2UsIGJ1dCBhbnkgaW50ZXJydXB0cyBhbmQgZXZlbnRzIHdpbGwgYmUgaWdub3JlZFxuIDYzNjpcdFx0ICogYmVmb3JlIGRpYnNfZGV2X2FkZCgpIGFkZHMgaXQgdG8gYW55IGNsaWVudHMuXG4gNjM3Olx0XHQgKi9cbiA2Mzg6XHRcdHJldCA9IGlzbV9kZXZfaW5pdChpc20pO1xuIDYzOTpcdFx0aWYgKHJldClcbiA2NDA6XHRcdFx0Z290byBlcnJfZGlicztcbiA2NDE6XHRcbiA2NDI6XHRcdC8qIGFmdGVyIGlzbV9kZXZfaW5pdCgpIHdlIGNhbiBjYWxsIGlzbSBmdW5jdGlvbiB0byBzZXQgZ2lkICovXG4gNjQzOlx0XHRyZXQgPSBpc21fcmVhZF9sb2NhbF9naWQoZGlicyk7XG4gNjQ0Olx0XHRpZiAocmV0KVxuIDY0NTpcdFx0XHRnb3RvIGVycl9pc207XG4gNjQ2Olx0XG4gNjQ3Olx0XHRkaWJzLVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA2NDg6XHRcbiA2NDk6XHRcdHpkZXYgPSB0b196cGNpKHBkZXYpO1xuIDY1MDpcdFx0ZGV2X3NldF9uYW1lKFx1MDAyNmRpYnMtXHUwMDNlZGV2LCBcJiMzNDtpc20leFwmIzM0OywgemRldi1cdTAwM2V1aWQgPyB6ZGV2LVx1MDAzZXVpZCA6IHpkZXYtXHUwMDNlZmlkKTtcbiA2NTE6XHRcbiA2NTI6XHRcdHJldCA9IGRpYnNfZGV2X2FkZChkaWJzKTtcbiA2NTM6XHRcdGlmIChyZXQpXG4gNjU0Olx0XHRcdGdvdG8gZXJyX2lzbTtcbiA2NTU6XHRcbiA2NTY6XHRcdHJldHVybiAwO1xuIDY1NzpcdFxuIDY1ODpcdGVycl9pc206XG4gNjU5Olx0XHRpc21fZGV2X2V4aXQoaXNtKTtcbiA2NjA6XHRlcnJfZGliczpcbiA2NjE6XHRcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuIDY2MjpcdFx0cHV0X2RldmljZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4gNjYzOlx0ZXJyX3Jlc291cmNlOlxuIDY2NDpcdFx0cGNpX3JlbGVhc2VfbWVtX3JlZ2lvbnMocGRldik7XG4gNjY1Olx0ZXJyX2Rpc2FibGU6XG4gNjY2Olx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gNjY3Olx0ZXJyX2RldjpcbiA2Njg6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4gNjY5Olx0XHRrZnJlZShpc20pO1xuIDY3MDpcdFxuIDY3MTpcdFx0cmV0dXJuIHJldDtcbiA2NzI6XHR9XG4gNjczOlx0XG4gNjc0Olx0c3RhdGljIHZvaWQgaXNtX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiA2NzU6XHR7XG4gNjc2Olx0XHRzdHJ1Y3QgaXNtX2RldiAqaXNtID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiA2Nzc6XHRcdHN0cnVjdCBkaWJzX2RldiAqZGlicyA9IGlzbS1cdTAwM2VkaWJzO1xuIDY3ODpcdFxuIDY3OTpcdFx0ZGlic19kZXZfZGVsKGRpYnMpO1xuIDY4MDpcdFx0aXNtX2Rldl9leGl0KGlzbSk7XG4gNjgxOlx0XHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cbiA2ODI6XHRcdHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpO1xuIDY4MzpcdFxuIDY4NDpcdFx0cGNpX3JlbGVhc2VfbWVtX3JlZ2lvbnMocGRldik7XG4gNjg1Olx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gNjg2Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIE5VTEwpO1xuIDY4NzpcdFx0a2ZyZWUoaXNtKTtcbiA2ODg6XHR9XG4gNjg5Olx0XG4gNjkwOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlzbV9kcml2ZXIgPSB7XG4gNjkxOlx0XHQubmFtZVx0ICA9IERSVl9OQU1FLFxuIDY5MjpcdFx0LmlkX3RhYmxlID0gaXNtX2RldmljZV90YWJsZSxcbiA2OTM6XHRcdC5wcm9iZVx0ICA9IGlzbV9wcm9iZSxcbiA2OTQ6XHRcdC5yZW1vdmVcdCAgPSBpc21fcmVtb3ZlLFxuIDY5NTpcdH07XG4gNjk2Olx0XG4gNjk3Olx0c3RhdGljIGludCBfX2luaXQgaXNtX2luaXQodm9pZClcbiA2OTg6XHR7XG4gNjk5Olx0XHRpbnQgcmV0O1xuIDcwMDpcdFxuIDcwMTpcdFx0aXNtX2RlYnVnX2luZm8gPSBkZWJ1Z19yZWdpc3RlcihcJiMzNDtpc21cJiMzNDssIDIsIDEsIDE2KTtcbiA3MDI6XHRcdGlmICghaXNtX2RlYnVnX2luZm8pXG4gNzAzOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDcwNDpcdFxuIDcwNTpcdFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhpc21fZGVidWdfaW5mbywgXHUwMDI2ZGVidWdfaGV4X2FzY2lpX3ZpZXcpO1xuIDcwNjpcdFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpc21fZHJpdmVyKTtcbiA3MDc6XHRcdGlmIChyZXQpXG4gNzA4Olx0XHRcdGRlYnVnX3VucmVnaXN0ZXIoaXNtX2RlYnVnX2luZm8pO1xuIDcwOTpcdFxuIDcxMDpcdFx0cmV0dXJuIHJldDtcbiA3MTE6XHR9XG4gNzEyOlx0XG4gNzEzOlx0c3RhdGljIHZvaWQgX19leGl0IGlzbV9leGl0KHZvaWQpXG4gNzE0Olx0e1xuIDcxNTpcdFx0cGNpX3VucmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmlzbV9kcml2ZXIpO1xuIDcxNjpcdFx0ZGVidWdfdW5yZWdpc3Rlcihpc21fZGVidWdfaW5mbyk7XG4gNzE3Olx0fVxuIDcxODpcdFxuIDcxOTpcdG1vZHVsZV9pbml0KGlzbV9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJU00gUHJvYmUgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaXNtX3Byb2JlYCBmdW5jdGlvbiBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBmaXJzdCBjYWxscyBgZGlic19kZXZfYWxsb2NgLCB3aGljaCBpcyBzdGFuZGFyZCwgdGhlbiBpbW1lZGlhdGVseSBwcm9jZWVkcyB0byBgaXNtX2Rldl9pbml0YC4gTm93LCBhIHJlZCBmbGFnIGlzIHBvcHBpbmcgdXAuIElmIGBpc21fZGV2X2luaXRgIGZhaWxzLCBpdCBqdW1wcyB0byBgZXJyX2RpYnNgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGVhc2VzIHRoZSBkZXZpY2UgdXNpbmcgYHB1dF9kZXZpY2UoJmFtcDtkaWJzLSZndDtkZXYpYC4gVGhhdCYjMzk7cyBjbGVhbiBlcnJvciBoYW5kbGluZywgZ29vZC4KCkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgaXNtX2Rldl9pbml0YCBlbmFibGVzIGludGVycnVwdHMhIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIElmIGFuIGludGVycnVwdCBmaXJlcyAqYmVmb3JlKiBgZGlic19kZXZfYWRkYCBpcyBjYWxsZWQsIHdlIGNvdWxkIGhhdmUgYSByYWNlIGNvbmRpdGlvbi4gVGhlIGludGVycnVwdCBoYW5kbGVyLCBsaWtlbHkgYGlzbV9oYW5kbGVfaXJxYCBvciBzb21ldGhpbmcgc2ltaWxhciwgY291bGQgYmUgdHJpZ2dlcmVkLiBBbmQgaWYgaXQmIzM5O3MgdXNpbmcgYSBsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGRpYnNgIHN0cnVjdHVyZSBiZWZvcmUgdGhlIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZCwgd2UmIzM5O3JlIGluIHRyb3VibGUuIFdlIG1pZ2h0IHNlZSBjb3JydXB0aW9uIG9yIGEga2VybmVsIHBhbmljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgaW50byBgaXNtX2hhbmRsZV9ldmVudGAgYW5kIGBpc21faGFuZGxlX2lycWAgYW5kIHNlZSBpZiB0aGV5JiMzOTtyZSB0b3VjaGluZyBgZGlicy0mZ3Q7bG9ja2AgdG9vIGVhcmx5LiBJIHN1c3BlY3QgdGhleSYjMzk7cmUgdGhlIHdlYWsgcG9pbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlicy1cdTAwM2Vsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9Mjc3PXN0YXRpYyBpbnQgaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMwNS1cdGRtYi1cdTAwM2VkbWJfdG9rID0gY21kLnJlc3BvbnNlLmRtYl90b2s7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMDY6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMwNy1cdGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWItXHUwMDNlaWR4IC0gSVNNX0RNQl9CSVRfT0ZGU0VUXSA9IGNsaWVudC1cdTAwM2VpZDtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMwODpcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMDktb3V0OlxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTMxMz1zdGF0aWMgaW50IGlzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMyNS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMyNjpcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI3LVx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYi1cdTAwM2VpZHggLSBJU01fRE1CX0JJVF9PRkZTRVRdID0gTk9fRElCU19DTElFTlQ7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMjg6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI5LVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTQ5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgaXNtX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MDYtXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo1MDc6XHRzcGluX2xvY2soXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUwOC1cdGlzbS1cdTAwM2VzYmEtXHUwMDNlcyA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNTMyLVx0fVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NTMzOlx0c3Bpbl91bmxvY2soXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUzNC1cdHJldHVybiBJUlFfSEFORExFRDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3BpbmxvY2sgSW5pdGlhbGl6YXRpb24gQnVnIGFuZCBQb3RlbnRpYWwgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNuYXBzIGludG8gZm9jdXM6IGBpc21faGFuZGxlX2lycWAgaXMgdXNpbmcgYHNwaW5fbG9jaygmYW1wO2RpYnMtJmd0O2xvY2spYC4gSSByZW1lbWJlciBub3cgdGhhdCBgZGlicy0mZ3Q7bG9ja2AgaXMgaW5pdGlhbGl6ZWQsIG9yICp3YXMqIGluaXRpYWxpemVkLCBpbiBgZGlic19kZXZfYWRkYC4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBhbiBpbnRlcnJ1cHQgY29tZXMgaW4gKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLCBzcGVjaWZpY2FsbHksIHJpZ2h0IGFmdGVyIGBpc21fZGV2X2luaXRgIHdoaWNoIGVuYWJsZXMgaW50ZXJydXB0cywgdGhlIGRyaXZlciB3b3VsZCBhdHRlbXB0IHRvIGxvY2sgYW4gdW5pbml0aWFsaXplZCBzcGlubG9jayBpbiBgaXNtX2hhbmRsZV9pcnFgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgYSBwb3RlbnRpYWwga2VybmVsIHBhbmljIHdhaXRpbmcgdG8gaGFwcGVuISBUaGlzIHBhdGNoIGNsZXZlcmx5IGZpeGVzIHRoaXMgYnkgbW92aW5nIGBzcGluX2xvY2tfaW5pdCgmYW1wO2RpYnMtJmd0O2xvY2spYCB0byBgZGlic19kZXZfYWxsb2NgLCB3aGljaCBpcyBjYWxsZWQgYmVmb3JlIGBpc21fZGV2X2luaXRgLiBBIG5pY2UsIGNsZWFuIGZ1bmN0aW9uYWwgZml4LgoKTm93LCB3aGlsZSB0aGlzIGlzIG9idmlvdXNseSBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciBkdWUgdG8gYENPTkZJR19JU01gLCBJJiMzOTttIHNlZWluZyBpbXBsaWNhdGlvbnMgdGhhdCBleHRlbmQgYmV5b25kIHRoYXQgaW5pdGlhbCBzY29wZS4gSSByZWNhbGwgdGhhdCBgZGlic19sb29wYmFjay5jYCBhbHNvIGNhbGxzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGluIGBkaWJzX2xvX2Rldl9wcm9iZWAsIHJpZ2h0PyBFdmVuIHRob3VnaCB0aGUgbG9vcGJhY2sgZHJpdmVyIGRvZXNuJiMzOTt0IGludm9sdmUgaGFyZHdhcmUgaW50ZXJydXB0cywgdGhhdCYjMzk7cyBub3QgdGhlIHBvaW50LiBCb3RoIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGFyZSBwYXJ0IG9mIHRoZSAqY29yZSogRElCUyBzdWJzeXN0ZW0uIEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBiZWdpbnMgdG8gdW5mb2xkLi4uCgpDb3VsZCB3ZSBmdXp6IHRoaXM/IFRoZSBidWcgaXNuJiMzOTt0IHNwZWNpZmljIHRvIGhhcmR3YXJlIGludGVycnVwdHM7IGl0JiMzOTtzIHdpdGhpbiBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCB0aGVtc2VsdmVzLiBJZiB3ZSBjYW4gZW5hYmxlIGJvdGggYERJQlNgIGFuZCBgRElCU19MT2AsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBpbiB0aGUgc2FtZSB3YXksIHJpZ2h0PyBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgRElCU19MT2AgaW5zdGFudGlhdGVkIG9ubHkgb25jZSBkdXJpbmcgbW9kdWxlIGluaXQ/IElmIGl0IGlzLCB0aGF0IGxpbWl0cyB0aGUgY2hhbmNlcyBvZiBmdXp6aW5nLiBJZiBpdCBhbGxvd3MgZm9yIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLCBvciBtb3JlIGltcG9ydGFudGx5LCBpZiB3ZSBjb3VsZCBmaW5kIGEgd2F5IHRvIHRyaWdnZXIgYGRpYnNfZGV2X2FsbG9jYCBmcm9tIHVzZXIgc3BhY2UsIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBleHBhbmQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCwgd2l0aCBpdCwgb3VyIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIGxvb3BiYWNrIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIG11bHRpcGxlIHRpbWVzIG9yIGlmIGl0cyBjcmVhdGlvbiBpcyBsaW1pdGVkIHRvIG1vZHVsZSBsb2FkIHRpbWUuIEZpbmRpbmcgYSB3YXkgdG8gdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBmcm9tIHVzZXIgc3BhY2Ugd291bGQgYmUgYSBodWdlIHdpbiBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2xvb3BiYWNrX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzU4LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTk6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNjAte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00NS12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDYtI2Vsc2VcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5oLTQ4LXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjU0PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNjEtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjYyOlx0cmMgPSBkaWJzX2xvb3BiYWNrX2luaXQoKTtcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yNjMtXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTQxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRElCUyBEZXZpY2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGp1c3Qgb25lIGRldmljZSBiZWluZyBhbGxvY2F0ZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgZGlic19kZXZfYWxsb2NgIGlzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBvdGhlciBkcml2ZXJzICpjb3VsZCogYmUgdXNpbmcgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCkxldCYjMzk7cyBzZWXigKYgb25seSB0d28gZHJpdmVyczogYGlzbV9kcnYuY2AgYW5kIGBkaWJzX2xvb3BiYWNrLmNgLiBgaXNtX2Rydi5jYCBpcyB0aGUgUENJIGRyaXZlciwgYW5kIEkga25vdyB0aGF0IHByb2JlcyB3aGVuIGEgUENJIGRldmljZSBnZXRzIGFkZGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhvdWdodCBpcyB3aGV0aGVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBjYW4gd2UgZW11bGF0ZSBhbiBJU00gZGV2aWNlPwoKT2theSwgbGV0IG1lIGNoZWNr4oCmIFdhaXQhIElTTSBpcyAmIzM0O0ludGVybmFsIFNoYXJlZCBNZW1vcnkmIzM0OyBvbiBzMzkweC4gSXQmIzM5O3MgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgcHJvdmlkZWQgYnkgdGhlIHMzOTAgZmlybXdhcmUg4oCTIGxpa2Ugei9WTSBvciBMUEFSLiBSaWdodCwgaXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQgUENJIGRldmljZSB0aGF0IFFFTVUgd291bGQgbmF0aXZlbHkgZW11bGF0ZSB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgaW1wbGVtZW50ZWQgdGhhdC4KCldhaXQgYSBzZWNvbmQsIGBESUJTX0xPYCBpcyB0aGUgc29mdHdhcmUgbG9vcGJhY2suIENvdWxkIHRoYXQgYmUgYSB3YXkgdG8gdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgPyBPbmx5IG9uIG1vZHVsZSBsb2FkLiBTbywgaWYgSSBjb21waWxlIGBESUJTYCBhcyBhIG1vZHVsZSwgSSBjYW4gbG9hZCBhbmQgdW5sb2FkIGl0LCB3aGljaCBkb2VzIHRyaWdnZXIgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIEJ1dCBtb2R1bGUgbG9hZC91bmxvYWQgaXNuJiMzOTt0IHRoZSAqYmVzdCogZnV6emluZyB0YXJnZXQgZm9yIHN5emthbGxlciwgYWx0aG91Z2ggaXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZG8gc28uCgpIb2xkIG9uLCB3aGF0IGFib3V0IGBTTUNgPyBEb2VzIGBTTUNgIGNyZWF0ZSBgZGlic2AgZGV2aWNlcz8gTm8sIGl0JiMzOTtzIGp1c3QgYSBjbGllbnQsIGl0IHJlZ2lzdGVycyB0aHJvdWdoIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAuIFRoYXQmIzM5O3Mgbm90IGl0LgoKU28sIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byB0cmlnZ2VyIGBkaWJzX2Rldl9hbGxvY2A/IE9rYXksIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXRsaW5rIG9yIHN5c2ZzIGludGVyZmFjZXMgZm9yIGNyZWF0aW5nIGBkaWJzYCBkZXZpY2VzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWJzX2Rldl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTUtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTctXHRpZiAoIWRpYnMpIHtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzOC1cdGtmcmVlKGRpYnMtXHUwMDNlZG1iX2NsaWVudGlkX2Fycik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMzOTpcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNDAtXHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1Mi1cdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzUzOlx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cdHB1dF9kZXZpY2UoXHUwMDI2bG9fZGV2LVx1MDAzZWRpYnMtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMzMtXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMzUte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjE0ODpFWFBPUlRfU1lNQk9MX0dQTChkaWJzX2Rldl9hbGxvYyk7XG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTQ5LVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTU5ND1zdGF0aWMgaW50IGlzbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYyNC1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjYyNTpcdGRpYnMgPSBkaWJzX2Rldl9hbGxvYygpO1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI2LVx0aWYgKCFkaWJzKSB7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjYwLWVycl9kaWJzOlxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjYxOlx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjItXHRwdXRfZGV2aWNlKFx1MDAyNmRpYnMtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz02NzQ9c3RhdGljIHZvaWQgaXNtX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODAtXHRpc21fZGV2X2V4aXQoaXNtKTtcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY4MTpcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjgyLVx0cHV0X2RldmljZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmg9NDI5PXN0YXRpYyBpbmxpbmUgdm9pZCAqZGlic19nZXRfcHJpdihzdHJ1Y3QgZGlic19kZXYgKmRldixcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MzktLyoqXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDA6ICogZGlic19kZXZfYWxsb2MoKSAtIGFsbG9jYXRlIGFuZCByZWZlcmVuY2UgZGV2aWNlIHN0cnVjdHVyZVxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDQxLSAqXG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtNDQ3LSAqL1xuaW5jbHVkZS9saW51eC9kaWJzLmg6NDQ4OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZCk7XG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDktLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRpYnNgIEluaXRpYWxpemF0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlcyBhcmUgbGltaXRlZCB0byBgaXNtX2Rydi5jYCBhbmQgYGRpYnNfbG9vcGJhY2suY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgb3RoZXIgd2F5cyB0byB0cmlnZ2VyIHRoZSBgZGlic19kZXZfYWxsb2NgIGZ1bmN0aW9uPyYjMzQ7IFRoZSBhbnN3ZXIgYXBwZWFycyB0byBiZSBubywgd2hpY2ggaXMgaGVscGZ1bC4KCkJ1dCBob2xkIG9uLCBgZGlic19kZXZfYWxsb2NgICppcyogY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzYCBtb2R1bGUsIHNwZWNpZmljYWxseSB2aWEgYGRpYnNfbG9vcGJhY2tfaW5pdGAuIFRoYXQgbWVhbnMgaWYgYGRpYnNgIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgdGhlIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGR1cmluZyBib290LiBJZiBpdCYjMzk7cyBsb2FkZWQgYXMgYSBtb2R1bGUsIHRoZW4gaXQgaGFwcGVucyBkdXJpbmcgbW9kdWxlIGxvYWQuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBhY3R1YWxseSB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/CgpUaGUgYnVnLCBpZiBpdCBleGlzdHMsIGlzIGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbG9jayB1c2FnZSB0aGF0IG9jY3VycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IHRyaWNreS4gSXQgc2VlbXMgdGhhdCB0aGlzIGlzIG9ubHkgZ29pbmcgdG8gdHJpZ2dlciBkdXJpbmcgbW9kdWxlIGxvYWQgb3IgUENJIHByb2JlIG9mIGFuIHMzOTAgc3BlY2lmaWMgZGV2aWNlLiBEeW5hbWljIGZ1enppbmcgd2lsbCBiZSBjaGFsbGVuZ2luZyB1bmxlc3Mgd2UgY2FuIHNpbXVsYXRlIFBDSSBkZXZpY2VzIG9yIGNvbnRyb2wgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nIHdpdGggc3l6a2FsbGVyLgoKQWhhISBXYWl0LCBzeXprYWxsZXIgKmNhbiogaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YCBvciBzb21ldGhpbmcgc2ltaWxhciEgVGhlIGtleSBjaGFsbGVuZ2UsIG9mIGNvdXJzZSwgaXMgdGhhdCBgSVNNYCBpcyBhbiBzMzkwLXNwZWNpZmljIFBDSSBkZXZpY2UuCgpPa2F5LCBzbyBgSVNNYCBpcyBhIFBDSSBkZXZpY2UuIFRoaXMgY291bGQgYmUgdXNlZnVsLiBUaGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY2hlY2sgdGhlIGBpc21fZGV2aWNlX3RhYmxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNtX2RldmljZV90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTIxPU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMjQtXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzoyNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXNtX2RldmljZV90YWJsZVtdID0ge1xuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMjYtXHR7IFBDSV9WREVWSUNFKElCTSwgUENJX0RFVklDRV9JRF9JQk1fSVNNKSB9LFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTI4LX07XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzoyOTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXNtX2RldmljZV90YWJsZSk7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMC1cbi0tXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz02OTA9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlzbV9kcml2ZXIgPSB7XG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02OTEtXHQubmFtZVx0ICA9IERSVl9OQU1FLFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjkyOlx0LmlkX3RhYmxlID0gaXNtX2RldmljZV90YWJsZSxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTY5My1cdC5wcm9iZVx0ICA9IGlzbV9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCBpbnZvbHZlcyBhIGBQQ0lfREVWSUNFX0lEX0lCTV9JU01gLiBJIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHN5emthbGxlciYjMzk7cyBjYXBhYmlsaXRpZXMg4oCTIGl0IGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCBidXQgbW9yZSByZWxldmFudGx5LCBpdCBoYXMgYSBQQ0kgZnV6emVyIHVzaW5nIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YC4gSG93ZXZlciwgdGhlIHByb21wdCBoYXMgYSBsaXN0IG9mIGNvbmRpdGlvbnMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgcGF0Y2ggKm5vdCogd29ydGggZnV6emluZy4gSXQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgcmVhbCBoYXJkd2FyZSwgYW5kIEkmIzM5O20gYXNraW5nIG15c2VsZiwgaXMgdGhpcyBJQk0gSVNNIGNhcmQgc3VjaCBhIHRoaW5nPwoKQWhhLCBpdCYjMzk7cyBhbiBJQk0gSW50ZXJuYWwgU2hhcmVkIE1lbW9yeSBkZXZpY2UuIEJ1dCB3YWl0LCBgRElCU19MT2AgaXMgYSBzb2Z0d2FyZSBsb29wYmFjayEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyBgRElCU19MT2AgZnVuY3Rpb25hbGl0eSB0cmlnZ2VyYWJsZT8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbml0aWFsaXplZCBkdXJpbmcgbW9kdWxlIGxvYWQuIElmIHN5emthbGxlciBjYW4gbG9hZCBhbmQgdW5sb2FkIG1vZHVsZXMsIHRoZW4gdGhlb3JldGljYWxseSwgaXQgY291bGQgcmVhY2ggaXQsIGFsdGhvdWdoIG1vZHVsZSBmdXp6aW5nIGlzbiYjMzk7dCB1c3VhbGx5IHRoZSAqcHJpbWFyeSogZm9jdXMuCgpMZXQgbWUgZ28gYmFjayB0byB0aGUgcHJvbXB0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSAmIzM0O25vdCB3b3J0aCBmdXp6aW5nJiMzNDsgY2F0ZWdvcnkuIE9rYXksIHNvIGl0IHNwZWNpZmljYWxseSBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzdHVmZiBuZWVkaW5nIHBoeXNpY2FsIGNhcmRzLCBidXQgaXMgYGRpYnNfbWFpbi5jYCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcj8gTm8sIGl0JiMzOTtzIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgLCBwYXJ0IG9mIHRoZSAmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyYjMzQ7IHN1YnN5c3RlbSwgYW5kIGl0ICpkb2VzKiBoYXZlIGEgc29mdHdhcmUgbG9vcGJhY2sgKGBESUJTX0xPYCkuIFRoZXJlZm9yZSwgaXQgKmlzKiByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQmIzM5O3MgZ29vZC4KCklzIHRoaXMgY29kZSBleGVjdXRlZCBvbmx5IGR1cmluZyB0ZWFyZG93bj8gTm8sIGBkaWJzX2Rldl9hbGxvY2AgaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbi9wcm9iZS4gU28sIGl0IGxvb2tzIGxpa2UgaXQgaXMgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSByZWFjaCBgZGlic19kZXZfYWxsb2NgPyBPa2F5LCBpdCYjMzk7cyBjYWxsZWQgdmlhIGBkaWJzX2xvb3BiYWNrX2luaXRgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkaWJzX2luaXRgLiBTbywgaWYgc3l6a2FsbGVyIGRvZXMgZnV6eiBtb2R1bGUgbG9hZGluZywgaXQgd2lsbCBoaXQgaXQuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgY2FsbGVkIGFueXdoZXJlIGVsc2UganVzdCB0byBtYWtlIHN1cmUuIEkmIzM5O3ZlIGFscmVhZHkgZ3JlcHBlZCBmb3IgaXQsIGl0JiMzOTtzIG9ubHkgaW4gYGlzbV9kcnYuY2AgYW5kIGBkaWJzX2xvb3BiYWNrLmNgLgoKQWhhLCBpdCYjMzk7cyBhIGhlbHBlciBmdW5jdGlvbiwgbm90IGEgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBwYXRjaCBmaXhlcyBhIGBzcGluX2xvY2tfaW5pdGAgcGxhY2VtZW50IGluIGBkaWJzX2Rldl9hZGRgIHJhdGhlciB0aGFuIGluIGBkaWJzX2Rldl9hbGxvY2AuIFNvIGlmIEkmIzM5O20gbWFya2luZyBpdCBgV29ydGhGdXp6aW5nPXRydWVgLCBJIG5lZWQgdG8gc3BlY2lmeSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBgRW5hYmxlQ29uZmlnc2Agd291bGQgYmUgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYCBiZWNhdXNlIGBTTUNgIGlzIGEgY2xpZW50IG9mIGBESUJTYCwgZXZlbiB0aG91Z2ggaXQgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkLiBPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYWJvdXQgdGhhdCBgU01DYCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHdoYXQgSSYjMzk7ZCBiZSBsb29raW5nIGF0IG5leHQ6CgoqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgaW4gYG5ldC9zbWNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgbmV0d29yayBjb2RlLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7ZCBkbyBpcyB6ZXJvIGluIG9uIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBjb250cm9sIGNlbnRlciBmb3IgY29uZmlndXJpbmcgb3B0aW9ucyBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBhbGwgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUsIGJvdGggZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkuCgpJJiMzOTtkIGJlIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluOgoKKiAgICoqRGlyZWN0IGRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIEtjb25maWcgc3ltYm9scyBkb2VzIGBuZXQvc21jL0tjb25maWdgIGRlcGVuZCBvbiB0byBldmVuIGJlICp2aXNpYmxlKiBvciBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyYXRpb24/IFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBwcmVyZXF1aXNpdGVzLiBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBnbG9iYWwgZmxhZywgYSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IHN5bWJvbCwgb3IgYSBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgZmVhdHVyZSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZmlyc3Q/CiogICAqKlN5bWJvbCBoaWVyYXJjaHk6KiogSG93IGFyZSB0aGUgU01DIG9wdGlvbnMgb3JnYW5pemVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gc3ltYm9scyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLgoqICAgKipEZWZhdWx0IHZhbHVlcyBhbmQgcHJvbXB0czoqKiBIb3cgYXJlIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHRoZSBTTUMgb3B0aW9ucyBkZWZpbmVkPyBXaGF0IGFyZSB0aGUgcHJvbXB0cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBvZiB0aGVtPyBUaGlzIGdpdmVzIG1lIGNvbnRleHQgYW5kIGhlbHBzIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWZmZWN0IG90aGVyIG9wdGlvbnMuCiogICAqKkltcGxpY2F0aW9ucyBhbmQgZnVydGhlciBkZXBlbmRlbmNpZXM6KiogQWZ0ZXIgSSBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIEkgaGF2ZSB0byB0aGVuIGNoZWNrIHdoZXRoZXIgdGhvc2Ugc3ltYm9scyB0cmlnZ2VyIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGVsc2V3aGVyZS4gSSB3aWxsIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgZ3JhcGguIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgaW1wYWN0cyBvbiBvdGhlciBzdWJzeXN0ZW1zPyBJIHdvdWxkIGFsc28gdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLgoqICAgKipDcm9zcy1hcmNoaXRlY3R1cmUgY29uc2lkZXJhdGlvbnM6KiogQXJlIHRoZXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZGl0aW9uYWxzIG9yIGRlcGVuZGVuY2llcz8gU01DIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgb3IgZnVuY3Rpb24gaWRlbnRpY2FsbHkgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzLgoqICAgKipEb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzOioqIEkmIzM5O20gaG9waW5nIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgaGVscGZ1bCBjb21tZW50cyBleHBsYWluaW5nIHRoZSBwdXJwb3NlIG9mIGVhY2ggc3ltYm9sIGFuZCBpdHMgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbWF5YmUgaGludHMgYWJvdXQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4KCkJ5IHRob3JvdWdobHkgYW5hbHl6aW5nIGBuZXQvc21jL0tjb25maWdgLCBJIGNhbiBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU01DIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBlbmFibGluZyBvciBtb2RpZnlpbmcgdGhvc2Ugb3B0aW9ucy4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgU01DX0RJQUdcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIFNNQ1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xuICAxOTpcdFx0ICBzbWNzcy5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTTUMgYW5kIERJQlMgZm9yIEZ1enppbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIGBESUJTYCwgYW5kIGl0IGxvb2tzIGxpa2UgYFNNQ2AgcmVsaWVzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQsIGNydWNpYWxseSwgYERJQlNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBJZiBgU01DYCBuZWVkcyBgRElCU2AsIGZ1enppbmcgYERJQlNgIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgdW5jb3ZlcmluZyBgU01DYCB2dWxuZXJhYmlsaXRpZXMuCgpUaGVyZWZvcmUsIHRvIHByb3Blcmx5IGV4ZXJjaXNlIGFuZCBmdXp6IGBESUJTYCwgSSBuZWVkIHRvIGVuYWJsZSBib3RoIHRoZSBjb3JlIGBESUJTYCBmdW5jdGlvbmFsaXR5ICphbmQqIHRoZSBsb3ctb3ZlcmhlYWQgdmFyaWFudCwgd2hpY2ggSSYjMzk7bSBpbmZlcnJpbmcgaXMgYERJQlNfTE9gLiBUaGF0IGdpdmVzIG1lIGEgbW9yZSBjb21wbGV0ZSBhdHRhY2sgc3VyZmFjZS4KCk5vdywgYmVmb3JlIEkganVtcCBpbiwgSSB3YW50IHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBmbGFncyBpbiBwbGF5LiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IGhvdyBgRElCU2AgYmVoYXZlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBteSBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdGNvbmZpZyBESUJTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVmYXVsdCBuXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XG4gICA3Olx0XHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXG4gICA4Olx0XHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxuICAxMTpcdFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXG4gIDEyOlx0XHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBESUJTX0xPXG4gIDE1Olx0XHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBESUJTXG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxuICAyMDpcdFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgSSBzZWUgdGhpcyBtZW50aW9uIG9mIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGFib3V0IHRoYXQ/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gSG1tbSwgSSB0aGluayB0aG9zZSBmdW5jdGlvbnMsIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLCBzaG91bGQgcHJvYmFibHkgYmUgaW5jbHVkZWQgd2l0aGluIGBGb2N1c1N5bWJvbHNgLiAKCkhhbmcgb24sIHRob3VnaC4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uIGlzbiYjMzk7dCBgZGlic19kZXZfYWxsb2NgIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uPyBUaGUgdHJpY2t5IHF1ZXN0aW9uIGlzIGNhbiB3ZSBwb3RlbnRpYWxseSB0cmlnZ2VyIGl0IGZyb20gdXNlciBzcGFjZT8KCklmIGBTTUNgIGlzIGVuYWJsZWQsIGRvZXMgdGhhdCBzb21laG93IGNhdXNlIGBkaWJzX2Rldl9hbGxvY2AgdG8gcnVuPyBObywgd2FpdC4uLiBgU01DYCBpcyBhIGNsaWVudCwgcmlnaHQ/IEl0IHJlZ2lzdGVycyB0aHJvdWdoIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAuIE9rYXksIGdvdCBpdC4KClNvIHRoZSBhY3R1YWwgZGV2aWNlLCB0aGF0JiMzOTtzIGNyZWF0ZWQgYnkgdGhlICpwcm92aWRlciogLSBlaXRoZXIgYGlzbV9kcnZgIG9yIGBkaWJzX2xvb3BiYWNrYC4gRm9yIGBkaWJzX2xvb3BiYWNrYCwgaXQmIzM5O3MgZHVyaW5nIG1vZHVsZSBpbml0LiBBbmQgZm9yIGBpc21fZHJ2YCwgdGhhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIFBDSSBwcm9iZS4gTm93LCBpZiBzeXprYWxsZXIgY2FuIHNvbWVob3cgZW11bGF0ZSBQQ0kgZGV2aWNlcywgaXQgbWlnaHQgdHJpZ2dlciB0aGF0IGBpc21fcHJvYmVgLgoKQWgsIGJ1dCBhIHBvdGVudGlhbCBzbmFnLi4uIGBpc21fZHJ2YCBpcyBzMzkwIHNwZWNpZmljIGJlY2F1c2Ugb2YgdGhlIGBDT05GSUdfSVNNYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gV2FpdC4uLiBpcyBgQ09ORklHX0lTTWAgKm9ubHkqIGZvciBzMzkwPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0Y29uZmlnIFFFVEhfT1NYXG4gIDcxOlx0XHRkZWZfYm9vbCAhSEFWRV9NQVJDSF9aMTVfRkVBVFVSRVNcbiAgNzI6XHRcdHByb21wdCBcJiMzNDtxZXRoIE9TWCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA3MzpcdFx0ZGVwZW5kcyBvbiBRRVRIXG4gIDc0Olx0XHRoZWxwXG4gIDc1Olx0XHQgIFRoaXMgZW5hYmxlcyB0aGUgcWV0aCBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGluIE9TWCBtb2RlLlxuICA3NjpcdFx0ICBJZiB1bnN1cmUsIGNob29zZSBOLlxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBDQ1dHUk9VUFxuICA3OTpcdFx0dHJpc3RhdGVcbiAgODA6XHRcdGRlZmF1bHQgKENUQ00gfHwgUUVUSCB8fCBTTUMpXG4gIDgxOlx0XG4gIDgyOlx0Y29uZmlnIElTTVxuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgSVNNIHZQQ0kgQWRhcHRlclwmIzM0O1xuICA4NDpcdFx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IERJQlNcbiAgODU6XHRcdGRlZmF1bHQgblxuICA4NjpcdFx0aGVscFxuICA4NzpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJbnRlcm5hbCBTaGFyZWQgTWVtb3J5XG4gIDg4Olx0XHQgIHZQQ0kgQWRhcHRlci4gVGhlIGFkYXB0ZXIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgU01DIG5ldHdvcmsgcHJvdG9jb2wuXG4gIDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzU2CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDE1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgRElCUyBhbmQgU01DKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIERJQlMtcmVsYXRlZCBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgcGxhbiBmb3IgZnV6emluZyBpdC4gSSYjMzk7bSBzdGFydGluZyB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIGBJU01gIGZlYXR1cmUsIHdoaWNoIHJlbGllcyBvbiBib3RoIGBQQ0lgIGFuZCBgRElCU2AsIGlzIG9ubHkgYnVpbHQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSG93ZXZlciwgc2luY2UgU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlIHMzOTB4IGFyY2hpdGVjdHVyZSwgSSYjMzk7bSB0aGlua2luZyBJIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBgSVNNYCBvbiB0aGF0IGFyY2hpdGVjdHVyZS4gQWxzbyBgRElCU19MT2AgY2FuIGJlIGZ1enplZCBvbiBhbnkgYXJjaGl0ZWN0dXJlLiBTbyBsZXQmIzM5O3MgZm9jdXMgb24gYERJQlNgIGFuZCBgRElCU19MT2AgYmVjYXVzZSB0aG9zZSBjYW4gYmUgZnV6emVkIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaXMgYSBiaWcgd2luLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdWNoIGFzIGBkaWJzX2Rldl9hbGxvY2AsIGFyZSBhY3R1YWxseSBjYWxsZWQgaW4gYSBmdXp6YWJsZSB3YXkuIEkgc2VlIHRoYXQgYGRpYnNfZGV2X2FsbG9jYCBpcyBjYWxsZWQgZWl0aGVyIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgUENJIHByb2JlLCB3aGljaCBhcmUgYm90aCB0cmlnZ2VyYWJsZSBieSBTeXprYWxsZXIgdGhyb3VnaCBpdHMgbW9kdWxlIGxvYWRpbmcgb3IgUENJIHByb2JpbmcgY2FwYWJpbGl0aWVzIChsaWtlIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YCkuIENydWNpYWxseSwgdGhlIGJ1ZyBpdHNlbGYgaXMgYSBmdW5jdGlvbmFsIGJ1Zywgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbG9jay4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaXNzdWUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHRocm91Z2ggU3l6a2FsbGVyJiMzOTtzIGV4aXN0aW5nIGZlYXR1cmVzLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEkgbG9va2VkIGF0IGZ1bmN0aW9ucyBsaWtlIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAsIGBkaWJzX3VucmVnaXN0ZXJfY2xpZW50YCwgYW5kIGBkaWJzX2Rldl9kZWxgLCBidXQgdGhlIHBhdGNoIG1haW5seSB0b3VjaGVzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgZm9yIGJvdGguIGBkaWJzX2Rldl9hbGxvY2AgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgYGRpYnNfZGV2YC4gYGRpYnNfZGV2X2FkZGAgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYWxsb2NhdGluZyBhbiBhcnJheSBhbmQgYWRkaW5nIHRoZSBkZXZpY2UgdG8gdGhlIHN5c3RlbS4gU2luY2UgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGJ1Z2ZpeCBhbmQgYXJlIGZ1bmN0aW9uYWwsIEkmIzM5O20gY2VydGFpbiB0aGF0IHRoZXNlIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFNvLCBgRm9jdXNTeW1ib2xzYDogYGRpYnNfZGV2X2FsbG9jYCwgYGRpYnNfZGV2X2FkZGAuCgpJJiMzOTttIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGUgYERJQlNgIGFuZCBgRElCU19MT2AgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUgdW5kZXIgdGVzdC4KCk5vdywgYW4gaW50ZXJlc3RpbmcgdGhvdWdodDogc2hvdWxkIEkgYWxzbyBpbmNsdWRlIGBTTUNgIGluIGBFbmFibGVDb25maWdzYD8gYFNNQ2AgaXMgYSAqY2xpZW50KiBvZiBESUJTLiBUaGUgYGRpYnNfZGV2X2FkZGAgZnVuY3Rpb24gaGFzIGEgbG9vcCB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggcmVnaXN0ZXJlZCBjbGllbnRzLiBJZiBJIGVuYWJsZSBgU01DYCwgd2hpY2ggaXMgYSBESUJTIGNsaWVudCwgdGhhdCBsb29wIGJlY29tZXMgbW9yZSBpbnRlcmVzdGluZy4gRW5hYmxpbmcgYFNNQ2AgbWVhbnMgYSBjbGllbnQgd2lsbCBiZSByZWdpc3RlcmVkLiBUaGlzIHJlZ2lzdHJhdGlvbiBtaWdodCB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBleGVjdXRpb24gcGF0aCB3aXRoaW4gYGRpYnNfZGV2X2FkZGAgd2hlcmUgdGhlIGJ1ZyBpcyBwcmVzZW50LiBTbywgYWRkaW5nIGBTTUNgIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFNNQ2AmIzM5O3MgZGVwZW5kZW5jaWVzIGFyZSBjb3ZlcmVkLiBgU01DYCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQsIHNvIEkmIzM5O20gY292ZXJlZCB0aGVyZS4gYElORklOSUJBTkRgIGlzIHVzdWFsbHkgZW5hYmxlZCB0b28sIGJ1dCBJJiMzOTtsbCBhZGQgaXQgdG8gbWFrZSBzdXJlLiBTbywgdG8gY292ZXIgYWxsIGRlcGVuZGVuY2llcywgSSB3aWxsIGluY2x1ZGUgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgIGluIGBFbmFibGVDb25maWdzYC4KCkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCBhZ2Fpbi4gSXQgaW5pdGlhbGl6ZXMgdGhlIHNwaW5sb2NrIGBkaWJzLSZndDtsb2NrYC4gVGhpcyBjb25maXJtcyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBzcGlubG9jayBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3Mgc2FmZSB0byBmdXp6IHRoaXMuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgICAmIzM0O2RpYnNfZGV2X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzLVx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfZGV2X2FsbG9jJiMzNDssCiAgICAmIzM0O2RpYnNfZGV2X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBkaWJzLVx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyMy4xMzY5ODc4OTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxNTIyODE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlic19kZXZfYWxsb2NcIixcbiAgICBcImRpYnNfZGV2X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGRpYnMtXFx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjIzLjEzNjk5NDIzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3MzE2Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGIyZmYzNTExNWJiMjM1Nzg3NGUxOWJlMTE4MTZhYThlYWE4MjIyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjUwOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX21haW4uYyBiL2RyaXZlcnMvZGlicy9kaWJzX21haW4uY1xcbmluZGV4IDE0YzNlMmQ4NDkwMmUuLjRjMjZmZDA2OTczZjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXFxuQEAgLTEzOCw2ICsxMzgsNyBAQCBzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXFxuIFxcdGRpYnMgPSBremFsbG9jX29iaigqZGlicyk7XFxuIFxcdGlmICghZGlicylcXG4gXFx0XFx0cmV0dXJuIGRpYnM7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrKTtcXG4gXFx0ZGlicy1cXHUwMDNlZGV2LnJlbGVhc2UgPSBkaWJzX2Rldl9yZWxlYXNlO1xcbiBcXHRkaWJzLVxcdTAwM2VkZXYuY2xhc3MgPSBcXHUwMDI2ZGlic19jbGFzcztcXG4gXFx0ZGV2aWNlX2luaXRpYWxpemUoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuQEAgLTE4Niw3ICsxODcsNiBAQCBpbnQgZGlic19kZXZfYWRkKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4gXFx0aW50IGksIHJldDtcXG4gXFxuIFxcdG1heF9kbWJzID0gZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VtYXhfZG1icygpO1xcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuIFxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIgPSBremFsbG9jKG1heF9kbWJzLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kaWJzLmggYi9pbmNsdWRlL2xpbnV4L2RpYnMuaFxcbmluZGV4IGM3NTYwN2Y4YTVjZjkuLmQzZTA3NzdmMjVhZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kaWJzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RpYnMuaFxcbkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpkaWJzX2dldF9wcml2KHN0cnVjdCBkaWJzX2RldiAqZGV2LFxcbiAvKipcXG4gICogZGlic19kZXZfYWxsb2MoKSAtIGFsbG9jYXRlIGFuZCByZWZlcmVuY2UgZGV2aWNlIHN0cnVjdHVyZVxcbiAgKlxcbi0gKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldlxcbisgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldiwgbG9ja1xcbiAgKiBOT1RFOiBVc2UgcHV0X2RldmljZShkaWJzX2dldF9kZXYoQGRpYnMpKSB0byBnaXZlIHVwIHlvdXIgcmVmZXJlbmNlIGluc3RlYWRcXG4gICogb2YgZnJlZWluZyBAZGlicyBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCB0aGlzXFxuICAqIGZ1bmN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyMy41MTQ5NjQzMDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzc3NzQyOTYyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlic19kZXZfYWxsb2NcIixcbiAgICBcImRpYnNfZGV2X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGRpYnMtXFx1MDAzZWxvY2tgIHNwaW5sb2NrIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgbG9jayBjb3VsZCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaWYgYW4gaW50ZXJydXB0IG9jY3VycyBvciBhIGNsZWFudXAgcGF0aCBpcyB0YWtlbiBiZWZvcmUgYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIGNvcmUgRElCUyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMmZmMzUxMTViYjIzNTc4NzRlMTliZTExODE2YWE4ZWFhODIyMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjUwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jIGIvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXG5pbmRleCAxNGMzZTJkODQ5MDJlLi40YzI2ZmQwNjk3M2Y3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL2RpYnMvZGlic19tYWluLmNcbkBAIC0xMzgsNiArMTM4LDcgQEAgc3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKVxuIFx0ZGlicyA9IGt6YWxsb2Nfb2JqKCpkaWJzKTtcbiBcdGlmICghZGlicylcbiBcdFx0cmV0dXJuIGRpYnM7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxvY2spO1xuIFx0ZGlicy1cdTAwM2VkZXYucmVsZWFzZSA9IGRpYnNfZGV2X3JlbGVhc2U7XG4gXHRkaWJzLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmRpYnNfY2xhc3M7XG4gXHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZkaWJzLVx1MDAzZWRldik7XG5AQCAtMTg2LDcgKzE4Nyw2IEBAIGludCBkaWJzX2Rldl9hZGQoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxuIFx0aW50IGksIHJldDtcbiBcbiBcdG1heF9kbWJzID0gZGlicy1cdTAwM2VvcHMtXHUwMDNlbWF4X2RtYnMoKTtcbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jayk7XG4gXHRkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnIgPSBremFsbG9jKG1heF9kbWJzLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RpYnMuaCBiL2luY2x1ZGUvbGludXgvZGlicy5oXG5pbmRleCBjNzU2MDdmOGE1Y2Y5Li5kM2UwNzc3ZjI1YWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kaWJzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGlicy5oXG5AQCAtNDM5LDcgKzQzOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZGlic19nZXRfcHJpdihzdHJ1Y3QgZGlic19kZXYgKmRldixcbiAvKipcbiAgKiBkaWJzX2Rldl9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIHJlZmVyZW5jZSBkZXZpY2Ugc3RydWN0dXJlXG4gICpcbi0gKiBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIHZhbGlkIHVwb24gc3VjY2Vzc2Z1bCByZXR1cm46IGRldlxuKyAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIHdpbGwgYmUgdmFsaWQgdXBvbiBzdWNjZXNzZnVsIHJldHVybjogZGV2LCBsb2NrXG4gICogTk9URTogVXNlIHB1dF9kZXZpY2UoZGlic19nZXRfZGV2KEBkaWJzKSkgdG8gZ2l2ZSB1cCB5b3VyIHJlZmVyZW5jZSBpbnN0ZWFkXG4gICogb2YgZnJlZWluZyBAZGlicyBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCB0aGlzXG4gICogZnVuY3Rpb24uXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyMy41MTQ5NjU5ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUyNjMxMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlicyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2RpYnMvZGlic19tYWluLmNgIGFuZCBgaW5jbHVkZS9saW51eC9kaWJzLmhgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgbW92aW5nIGBzcGluX2xvY2tfaW5pdChcdTAwMjZkaWJzLVx1MDAzZWxvY2spO2AgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEZ1bmN0aW9uYWxseSwgdGhpcyBpbml0aWFsaXplcyB0aGUgbG9jayBlYXJsaWVyLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGVyZSB3YXMgcG90ZW50aWFsbHkgYW4gdW5pbml0aWFsaXplZCBsb2NrIGlzc3VlLiBJZiB0aGUgbG9jayB3YXMgYmVpbmcgdXNlZCAqYmVmb3JlKiBgZGlic19kZXZfYWRkYCB3YXMgY2FsbGVkLCBvciwgaWYgYGRpYnNfZGV2X2FkZGAgd2Fzbid0IGFsd2F5cyBjYWxsZWQsIHRoZW4gd2UnZCBoYXZlIGEgcHJvYmxlbS4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWJlZm9yZS1pbml0aWFsaXphdGlvbiBidWcsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29tcGlsZXIuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGF0IGBkaWJzYCBhY3R1YWxseSAqaXMqLiBMZXQncyBzZWUuLi4gaXQncyBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCwgb2YgY291cnNlLiBPa2F5LCBub3csIHdoYXQgZG9lcyBgZGlic2AgcmVmZXIgdG8gZXhhY3RseT8gQmV0dGVyIGRvdWJsZS1jaGVjayB3aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgdGhhdCBpdCdzIGluaXRpYWxpemluZy5cblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBiaWcgcGljdHVyZS4gSSdsbCBncmVwIGZvciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gTmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMgdG8gdGhvc2UgZnVuY3Rpb25zLiBLbm93aW5nIHdoZXJlIHRoZSBgZGlic2AgZGV2aWNlIGlzIGFsbG9jYXRlZCBhbmQgYWRkZWQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHRoZSB1bmluaXRpYWxpemVkIGxvY2sgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDoyNy43Njc1OTkxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5OTQ5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlic19kZXZfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kaWJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cXHRpZiAoIWRpYnMpIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5OlxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjI3LjgwOTU5OTMyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjMzMTc1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgXCJEaWJzXCIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIGJ1cm5pbmc6IHdoYXQgZXhhY3RseSBpcyB0aGlzIFwiZGlic1wiIHRoaW5nIGFsbCBhYm91dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHRydWUgbWVhbmluZyDigJMgaXRzIHB1cnBvc2UgYW5kIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmNvdmVyIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24uIEkga25vdyBpdCBtdXN0IGJlIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHN5c3RlbS5cblxuRm9sbG93aW5nIHRoYXQsIGl0J3Mgbm90IGVub3VnaCB0byBrbm93ICp3aGF0KiBpdCBpcywgSSBoYXZlIHRvIGtub3cgKmhvdyogaXQncyBpbXBsZW1lbnRlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IGFjdHVhbGx5IGVuYWJsZSBvciBjb250cm9sIFwiZGlicy5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgaXRzIGRlcGVuZGVuY2llcywgaXRzIHRyaWdnZXJzIOKAkyBldmVyeXRoaW5nLiBJIHdhbnQgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIG5vdCBqdXN0IGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6MzAuOTMyOTI4OTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTM2OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjMwLjk4NDQ3MzE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzMDc3NjQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIERJQlM6IENoZWNraW5nIHRoZSBLY29uZmlnKipcblxuQWxyaWdodCwgdGhlIGNvbnRleHQgaXMgY2xlYXJseSBESUJTLCBvciBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcuIEkga25vdyB0aGlzIGFyY2hpdGVjdHVyZSwgc28gaXQncyB0aW1lIHRvIGRpZyBpbi4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGJ1aWxkLXRpbWUgY29udHJvbHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmVhdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBpdCBoYXMgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gcXVpY2tseSBhc3Nlc3MgYSBuZXcgb3IgdW5mYW1pbGlhciBhcmNoaXRlY3R1cmUgZmVhdHVyZS4gSXQnbGwgZ2l2ZSBtZSBhIHN0cm9uZyBmb3VuZGF0aW9uIGZvciB0aGUgZGVlcCBkaXZlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDozMy45MTUyNTMyMDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgRElCU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XFxuICAgNzpcXHRcXHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXFxuICAgODpcXHRcXHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXFxuICAxMTpcXHRcXHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cXG4gIDEyOlxcdFxcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBESUJTX0xPXFxuICAxNTpcXHRcXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIERJQlNcXG4gIDE3OlxcdFxcdGRlZmF1bHQgblxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXFxuICAyMDpcXHRcXHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cXG4gIDIxOlxcdFxcdCAgb2NjdXJzIHdpdGhpbiB0aGUgc2FtZSBPUy4gVGhpcyBoZWxwcyBpbiBjb252ZW5pZW50IHRlc3Rpbmcgb2ZcXG4gIDIyOlxcdFxcdCAgZGlicyBjbGllbnRzLCBzaW5jZSBkaWJzIGxvb3BiYWNrIGlzIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZSBvclxcbiAgMjM6XFx0XFx0ICBoYXJkd2FyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6MzMuOTE1MzIxNjc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1NTgwNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERJQlMgQ29uZmlndXJhdGlvbiBhbmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBpdCBpbnZvbHZlcyBhcmUgYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgdGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBtb3ZpbmcgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jayk7YCBpbnRvIGBkaWJzX2Rldl9hbGxvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZSwgb3IgYXJlIG5vdyBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIG1vZGlmaWNhdGlvbi4gXG5cbkl0IGxvb2tzIGxpa2UgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAgYXJlIHRoZSB0d28gbWFqb3IgcGxheWVycyBoZXJlLCB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24uIFRvIGdldCBhIGJldHRlciBncmFzcCBvbiB0aGUgb3ZlcmFsbCBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHNjaGVtZSBvZiB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjM5LjM3MTEyOTU5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMjk1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlic19kZXZfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zMDY9c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMzAtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMzE6XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRpYnNfZGV2X2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTgzLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxODQ6aW50IGRpYnNfZGV2X2FkZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE4NS17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjI0LX1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjI1OkVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2FkZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTIyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6MzkuNDE0NDY2NjY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDYyNDQ3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6XG5cbioqRXhhbWluaW5nIERJQlMgRHJpdmVyIEFsbG9jYXRpb24gXHUwMDI2IEFkZGl0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBESUJTIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gYW5kIGFkZGl0aW9uIGxvZ2ljLCBzbyBJJ20gaGVhZGluZyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgaW4gYGRyaXZlcnMvZGlicy9kaWJzX21haW4uY2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0J3Mgd2hlcmUgdGhlIHByaW1hcnkgZGV2aWNlIG1hbmFnZW1lbnQgc2hvdWxkIHJlc2lkZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IG5ldyBESUJTIGRldmljZXMgYXJlIGFsbG9jYXRlZCBhbmQgdGhlbiBpbmNvcnBvcmF0ZWQgaW50byB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZXNlIG1lY2hhbmlzbXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBvdmVyYWxsIGJlaGF2aW9yIGFuZCBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gbGF0ZXIuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjQyLjU2MDcxNDE1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvZGlic19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXG4gMTMxOlxcdFxcdGtmcmVlKGRpYnMpO1xcbiAxMzI6XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnNfZGV2X2FsbG9jKHZvaWQpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGRpYnMgPSBremFsbG9jX29iaigqZGlicyk7XFxuIDEzOTpcXHRcXHRpZiAoIWRpYnMpXFxuIDE0MDpcXHRcXHRcXHRyZXR1cm4gZGlicztcXG4gMTQxOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrKTtcXG4gMTQyOlxcdFxcdGRpYnMtXFx1MDAzZWRldi5yZWxlYXNlID0gZGlic19kZXZfcmVsZWFzZTtcXG4gMTQzOlxcdFxcdGRpYnMtXFx1MDAzZWRldi5jbGFzcyA9IFxcdTAwMjZkaWJzX2NsYXNzO1xcbiAxNDQ6XFx0XFx0ZGV2aWNlX2luaXRpYWxpemUoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdHJldHVybiBkaWJzO1xcbiAxNDc6XFx0fVxcbiAxNDg6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdGF0aWMgc3NpemVfdCBnaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxNTE6XFx0XFx0XFx0XFx0Y2hhciAqYnVmKVxcbiAxNTI6XFx0e1xcbiAxNTM6XFx0XFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRkaWJzID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRpYnNfZGV2LCBkZXYpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcFViXFxcXG5cXFwiLCBcXHUwMDI2ZGlicy1cXHUwMDNlZ2lkKTtcXG4gMTU4OlxcdH1cXG4gMTU5OlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhnaWQpO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRzdGF0aWMgc3NpemVfdCBmYWJyaWNfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxNjI6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbiAxNjM6XFx0e1xcbiAxNjQ6XFx0XFx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xcbiAxNjU6XFx0XFx0dTE2IGZhYnJpY19pZDtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0ZGlicyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkaWJzX2RldiwgZGV2KTtcXG4gMTY4OlxcdFxcdGZhYnJpY19pZCA9IGRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X2ZhYnJpY19pZChkaWJzKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMHglMDR4XFxcXG5cXFwiLCBmYWJyaWNfaWQpO1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKGZhYnJpY19pZCk7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaWJzX2Rldl9hdHRyc1tdID0ge1xcbiAxNzU6XFx0XFx0XFx1MDAyNmRldl9hdHRyX2dpZC5hdHRyLFxcbiAxNzY6XFx0XFx0XFx1MDAyNmRldl9hdHRyX2ZhYnJpY19pZC5hdHRyLFxcbiAxNzc6XFx0XFx0TlVMTCxcXG4gMTc4OlxcdH07XFxuIDE3OTpcXHRcXG4gMTgwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRpYnNfZGV2X2F0dHJfZ3JvdXAgPSB7XFxuIDE4MTpcXHRcXHQuYXR0cnMgPSBkaWJzX2Rldl9hdHRycyxcXG4gMTgyOlxcdH07XFxuIDE4MzpcXHRcXG4gMTg0OlxcdGludCBkaWJzX2Rldl9hZGQoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbiAxODU6XFx0e1xcbiAxODY6XFx0XFx0aW50IG1heF9kbWJzO1xcbiAxODc6XFx0XFx0aW50IGksIHJldDtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0bWF4X2RtYnMgPSBkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZW1heF9kbWJzKCk7XFxuIDE5MDpcXHRcXHRkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyID0ga3phbGxvYyhtYXhfZG1icywgR0ZQX0tFUk5FTCk7XFxuIDE5MTpcXHRcXHRpZiAoIWRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpXFxuIDE5MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTkzOlxcdFxcdG1lbXNldChkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyLCBOT19ESUJTX0NMSUVOVCwgbWF4X2RtYnMpO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRyZXQgPSBkZXZpY2VfYWRkKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbiAxOTY6XFx0XFx0aWYgKHJldClcXG4gMTk3OlxcdFxcdFxcdGdvdG8gZnJlZV9jbGllbnRfYXJyO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNmRpYnMtXFx1MDAzZWRldi5rb2JqLCBcXHUwMDI2ZGlic19kZXZfYXR0cl9ncm91cCk7XFxuIDIwMDpcXHRcXHRpZiAocmV0KSB7XFxuIDIwMTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYsIFxcXCJzeXNmc19jcmVhdGVfZ3JvdXAgZmFpbGVkIGZvciBkaWJzX2RldlxcXFxuXFxcIik7XFxuIDIwMjpcXHRcXHRcXHRnb3RvIGVycl9kZXZpY2VfZGVsO1xcbiAyMDM6XFx0XFx0fVxcbiAyMDQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDIwNTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjbGllbnRzX2xvY2spO1xcbiAyMDY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9jbGllbnQ7ICsraSkge1xcbiAyMDc6XFx0XFx0XFx0aWYgKGNsaWVudHNbaV0pIHtcXG4gMjA4OlxcdFxcdFxcdFxcdGNsaWVudHNbaV0tXFx1MDAzZW9wcy1cXHUwMDNlYWRkX2RldihkaWJzKTtcXG4gMjA5OlxcdFxcdFxcdFxcdGRpYnNfc2V0dXBfZm9yd2FyZGluZyhjbGllbnRzW2ldLCBkaWJzKTtcXG4gMjEwOlxcdFxcdFxcdH1cXG4gMjExOlxcdFxcdH1cXG4gMjEyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2xpZW50c19sb2NrKTtcXG4gMjEzOlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZkaWJzLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZGlic19kZXZfbGlzdC5saXN0KTtcXG4gMjE0OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdHJldHVybiAwO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRlcnJfZGV2aWNlX2RlbDpcXG4gMjE5OlxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDIyMDpcXHRmcmVlX2NsaWVudF9hcnI6XFxuIDIyMTpcXHRcXHRrZnJlZShkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcXG4gMjIyOlxcdFxcdHJldHVybiByZXQ7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdH1cXG4gMjI1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfZGV2X2FkZCk7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdHZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4gMjI4OlxcdHtcXG4gMjI5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjQyLjU2MDc5NjMyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjE3MzgxMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIFBhdGNoIGZvciBESUJTIERldmljZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGZ1bmRhbWVudGFsIGlzc3VlIGluIHRoZSBESUJTIGRldmljZSBtYW5hZ2VtZW50IGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIGJ1ZyB3aGVyZSB0aGUgYGRpYnMtXHUwMDNlbG9ja2Agc3BpbmxvY2sgaXMgYmVpbmcgdXNlZCBiZWZvcmUgdGhlIGBkaWJzX2Rldl9hZGRgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgb3IgcG90ZW50aWFsbHkgZXZlbiB3aGVuIGBkaWJzX2Rldl9hZGRgIGlzIG5ldmVyIGNhbGxlZCBhdCBhbGwuIFRoZSB1bmRlcmx5aW5nIHByb2JsZW0gc2VlbXMgdG8gc3RlbSBmcm9tIHRoZSBzZXF1ZW5jZSBvZiBkZXZpY2UgYWxsb2NhdGlvbiBhbmQgYWRkaXRpb246IGBkaWJzX2Rldl9hbGxvY2AgaGFuZGxlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZW4gYGRpYnNfZGV2X2FkZGAgc3Vic2VxdWVudGx5IGFkZHMgdGhpcyBkZXZpY2UgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJZiBmb3Igc29tZSByZWFzb24gYGRpYnNfZGV2X2FkZGAgaXNuJ3QgaW52b2tlZCAqYWZ0ZXIqIGFsbG9jYXRpb24sIGFuZCB5ZXQgdGhlIGRldmljZSBpcyBmcmVlZCwgb3IsIHdvcnNlLCBzb21lIG90aGVyIGNvZGUgdHJpZXMgdG8gdXNlIHRoZSBkZXZpY2UgKmJlZm9yZSogaXQgaGFzIGJlZW4gcHJvcGVybHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBzeXN0ZW0gdmlhIHRoZSBjYWxsIHRvIGBkaWJzX2Rldl9hZGRgLCB3ZSd2ZSBnb3QgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSByYWNlIGNvbmRpdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgYmFkbmVzcy5cblxuVGhlIHNvbHV0aW9uIGJlaW5nIHByb3Bvc2VkIGlzIHRvIG1vdmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzcGlubG9jaywgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jaylgLCBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGluc2lkZSBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIFRoZSBjb3JlIG9mIHRoaXMgZml4IGlzIGVuc3VyaW5nIHRoZSBsb2NrIGlzIGluaXRpYWxpemVkICphdCB0aGUgcG9pbnQgb2YgZGV2aWNlIGFsbG9jYXRpb24qLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcHByb2FjaCB0byBhZGRyZXNzIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cblRvIHRob3JvdWdobHkgdGVzdCB0aGlzLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggdGhlIGBESUJTYCBhbmQgYERJQlNfTE9gIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBjb3ZlcmFnZSB3ZSBuZWVkLiBBbmQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiBhcmUgZ29pbmcgdG8gYmUgYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IG1heSBiZSBleGVyY2lzZWQuXG5cbldhaXQgYSBtaW51dGUsIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBtZWFuaW5nIGRyaXZlcnMgYXJlIGxpa2VseSBjYWxsaW5nIHRoZW0uIFRoaXMgYWRkcyBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkgdG8gdGhlIHJldmlldyBhbmQgdGVzdGluZy4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBkcml2ZXIgdXNhZ2UgaXMgY29ycmVjdCEgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgZHJpdmVycyB1dGlsaXppbmcgdGhlc2UgZnVuY3Rpb25zLiBMZXQncyBzdGFydCBieSBjaGVja2luZyBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDo0OC4xNzgxODA1MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjA1Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfZGV2X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zMDY9c3RhdGljIGludCBkaWJzX2xvX2Rldl9wcm9iZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTUtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMTY6XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMTctXFx0aWYgKCFkaWJzKSB7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzOC1cXHRrZnJlZShkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMzOTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0MC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNDY9c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1Mi1cXHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTM6XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTQtXFx0cHV0X2RldmljZShcXHUwMDI2bG9fZGV2LVxcdTAwM2VkaWJzLVxcdTAwM2VkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MDo0OC4yMjI3ODk1NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NzA4NzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBkaWJzX2xvX2Rldl9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgY29udGV4dCBoZXJlIGNsZWFybHkgcG9pbnRzIHRvIGEgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBjYWxsZWQgYGRpYnNfbG9fZGV2X3Byb2JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqd2hhdCogaXQgaXMuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgbGlrZWx5IGludm9sdmVzIERldmljZSBJbml0aWFsaXphdGlvbiBCbG9jayBTdWJzeXN0ZW0gKGRpYnMpIGFuZCBpdCBpcyBsb3ctbGV2ZWwsIGEgcHJvYmUuIE15IGV4cGVyaWVuY2UgaXMgdGhhdCBhIHByb2JlIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBkZXZpY2UgZGlzY292ZXJ5IG9yIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgd2l0aGluIHRoZSBrZXJuZWwsIHF1aXRlIHBvc3NpYmx5IHNwZWNpZmljIHRvIGEgc3RvcmFnZSBvciBJL08gZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIElzIGl0IHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgbmV3IGhhcmR3YXJlPyBJcyBpdCBwYXJ0IG9mIGEgZHJpdmVyIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBJcyB0aGlzIHNvbWUgc29ydCBvZiBlYXJseSBib290IHN0YWdlIGNvbXBvbmVudD8gVGhlIFwibG9cIiBwcmVmaXggY291bGQgYmUgYSByZWZlcmVuY2UgdG8gYSBMb3cgT3V0cHV0LiBNeSBndXQgdGVsbHMgbWUgSSBzaG91bGQgY2hlY2sga2VybmVsIHNvdXJjZSBvciBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gZGlicyBzdWJzeXN0ZW0gb3Igc3RvcmFnZSBkcml2ZXJzLCBhbmQgcGVyaGFwcyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpZGVudGlmaWVyIHdpdGggYW55IHJlbGF0ZWQgZGVidWdnaW5nIG9yIGxvZ2dpbmcgbWVzc2FnZXMgaW4gdGhlIHN5c3RlbS4gVGhlIHNwZWNpZmljcyBhcmUga2V5IGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGNhbGxlZC4gSSB3YW50IHRvIHNlZSBpZiBpdCdzIGludGVyYWN0aW5nIHdpdGggYW55IHNwZWNpZmljIGhhcmR3YXJlIGRldmljZXMgb3IgYnVzIHN5c3RlbXMuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgd29ya2Zsb3cgd2lsbCBiZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODA4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTEuOTc5ODgwNDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9leGl0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2NudCkpXFxuIDMwMzpcXHRcXHRcXHR3YWl0X2V2ZW50KGxkZXYtXFx1MDAzZWxkZXZfcmVsZWFzZSwgIWF0b21pY19yZWFkKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfY250KSk7XFxuIDMwNDpcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdHN0YXRpYyBpbnQgZGlic19sb19kZXZfcHJvYmUodm9pZClcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG4gMzA5OlxcdFxcdHN0cnVjdCBkaWJzX2RldiAqZGlicztcXG4gMzEwOlxcdFxcdGludCByZXQ7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdGxkZXYgPSBremFsbG9jX29iaigqbGRldik7XFxuIDMxMzpcXHRcXHRpZiAoIWxkZXYpXFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuIDMxNzpcXHRcXHRpZiAoIWRpYnMpIHtcXG4gMzE4OlxcdFxcdFxcdGtmcmVlKGxkZXYpO1xcbiAzMTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGxkZXYtXFx1MDAzZWRpYnMgPSBkaWJzO1xcbiAzMjM6XFx0XFx0ZGlicy1cXHUwMDNlZHJ2X3ByaXYgPSBsZGV2O1xcbiAzMjQ6XFx0XFx0ZGlic19sb19kZXZfaW5pdChsZGV2KTtcXG4gMzI1OlxcdFxcdHV1aWRfZ2VuKFxcdTAwMjZkaWJzLVxcdTAwM2VnaWQpO1xcbiAzMjY6XFx0XFx0ZGlicy1cXHUwMDNlb3BzID0gXFx1MDAyNmRpYnNfbG9fb3BzO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRkaWJzLVxcdTAwM2VkZXYucGFyZW50ID0gTlVMTDtcXG4gMzI5OlxcdFxcdGRldl9zZXRfbmFtZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2LCBcXFwiJXNcXFwiLCBkaWJzX2xvX2Rldl9uYW1lKTtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbiAzMzI6XFx0XFx0aWYgKHJldClcXG4gMzMzOlxcdFxcdFxcdGdvdG8gZXJyX3JlZztcXG4gMzM0OlxcdFxcdGxvX2RldiA9IGxkZXY7XFxuIDMzNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0ZXJyX3JlZzpcXG4gMzM4OlxcdFxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbiAzMzk6XFx0XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuIDM0MDpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbiAzNDE6XFx0XFx0a2ZyZWUobGRldik7XFxuIDM0MjpcXHRcXG4gMzQzOlxcdFxcdHJldHVybiByZXQ7XFxuIDM0NDpcXHR9XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdHN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0aWYgKCFsb19kZXYpXFxuIDM0OTpcXHRcXHRcXHRyZXR1cm47XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdGRpYnNfZGV2X2RlbChsb19kZXYtXFx1MDAzZWRpYnMpO1xcbiAzNTI6XFx0XFx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xcbiAzNTM6XFx0XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuIDM1NDpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuIDM1NTpcXHRcXHRrZnJlZShsb19kZXYpO1xcbiAzNTY6XFx0XFx0bG9fZGV2ID0gTlVMTDtcXG4gMzU3OlxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbiAzNjA6XFx0e1xcbiAzNjE6XFx0XFx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XFxuIDM2MjpcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdHZvaWQgZGlic19sb29wYmFja19leGl0KHZvaWQpXFxuIDM2NTpcXHR7XFxuIDM2NjpcXHRcXHRkaWJzX2xvX2Rldl9yZW1vdmUoKTtcXG4gMzY3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTEuOTc5OTY0OTgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQ4MjYzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBgZGlic19sb19kZXZfcHJvYmVgKipcblxuUmlnaHQsIHNvIGBkaWJzX2xvX2Rldl9wcm9iZWAuIEknbSBzdGFydGluZyBmcm9tIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQncyBiZWluZyBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UsIGFuZCB0aGUgY2FsbCBzdGFjayBzdWdnZXN0cyBpdCdzIGNvbWluZyBmcm9tIGBkaWJzX2xvb3BiYWNrX2luaXRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgZGV2aWNlIHByb2JlIGZ1bmN0aW9uIHNvIGl0IHN0YW5kcyB0byByZWFzb24gaXQncyB0aWVkIHRvIGRldmljZSByZWdpc3RyYXRpb24gYXQgc3RhcnR1cC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgZm9yIG1lIGlzIHRvIHRyYWNlIHdoZXJlIGBkaWJzX2xvb3BiYWNrX2luaXRgIGl0c2VsZiBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgZGVwZW5kZW5jeSBmbG93LCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIGFueSBwb3RlbnRpYWwgdGltaW5nIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTUuMTk0Nzk0NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzAwMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfbG9vcGJhY2tfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTgtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTk6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDMtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDUtdm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00Ni0jZWxzZVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00OC17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjU0PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2MS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjYyOlxcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2My1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUwOjU1LjIzNzUwMzIzOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0MDA5NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBNb2R1bGUgU2V0dXAqKlxuXG5SaWdodCwgc28gYGRpYnNfbG9vcGJhY2tfaW5pdGAgaXMgaW52b2tlZCBmcm9tIGBkaWJzX2luaXRgLiBgZGlic19pbml0YCBpcyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpc24ndCBzb21ldGhpbmcgdHJpZ2dlcmVkIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBJdCdzIGhhcHBlbmluZyBhcyBwYXJ0IG9mIHRoZSBzeXN0ZW0ncyBzZXR1cCBwcm9jZXNzIHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGxvY2F0aW9uLlxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGVsc2UgaXMgY2FsbGluZyBgZGlic19kZXZfYWxsb2NgLiBJdCBzZWVtcyB0byBtZSB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyB3b3VsZCBicmluZyBiZXR0ZXIgaW5zaWdodHMuIFRpbWUgdG8gZG8gYSBxdWljayBncmVwIHNlYXJjaCBvbiB0aGUgd2hvbGUga2VybmVsIGZvciBjYWxscyB0byBgZGlic19kZXZfYWxsb2NgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTA6NTguOTExNTE1NzU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM4NzI1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfZGV2X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cXHRpZiAoIWRpYnMpIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5OlxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz01OTQ9c3RhdGljIGludCBpc21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYyNC1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MjU6XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI2LVxcdGlmICghZGlicykge1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjYwLWVycl9kaWJzOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY2MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY3ND1zdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjgwLVxcdGlzbV9kZXZfZXhpdChpc20pO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY4MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgKmRpYnNfZ2V0X3ByaXYoc3RydWN0IGRpYnNfZGV2ICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MzktLyoqXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDQwOiAqIGRpYnNfZGV2X2FsbG9jKCkgLSBhbGxvY2F0ZSBhbmQgcmVmZXJlbmNlIGRldmljZSBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDEtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQ0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDg6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDktLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjAwLjY1MDI0NzY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQ2MjIzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgczM5MCBTcGVjaWZpY2l0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBgZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmNgIGZpbGUgYW5kIEkgc2VlIHRoZSBjYWxsIHRvIGBkaWJzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBgZGlic2AgZnVuY3Rpb24gaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gR2l2ZW4gdGhhdCBgaXNtX2Rydi5jYCBpcyBleHBsaWNpdGx5IGFuIHMzOTAgZHJpdmVyLCBpdCByYWlzZXMgdGhlIHF1ZXN0aW9uLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgZmlsZS4gWWVzLCBjb25maXJtZWQsIGl0IHJlZmVycyB0byBcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCIuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoYXQgKm9ubHkqIGZvciBzMzkwPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHdpdGggYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYCB0byBiZSBzdXJlLCBhbmQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNlIHdpdGhpbiB0aGUgczM5MCBuZXR3b3JraW5nIGRyaXZlci4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTowNC4xNTQ4NzMxMjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDAyODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnPTc4PWNvbmZpZyBDQ1dHUk9VUFxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9LY29uZmlnLTgxLVxcbmRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZzo4Mjpjb25maWcgSVNNXFxuZHJpdmVycy9zMzkwL25ldC9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBJU00gdlBDSSBBZGFwdGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTowNC4xOTkyODAxNjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4ODI2MDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERpYnMgRHJpdmVyIFVzYWdlKipcblxuT2theSwgc28gYElTTWAgaXMgZGVmaW5pdGVseSBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciwgbm8gc3VycHJpc2VzIHRoZXJlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBESUJTX0xPYCBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYSBsb29wYmFjayBpbnRlcmZhY2UuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBrbm93IHRoYXQga2luZCBvZiB0aGluZyBpcyBoZWxwZnVsIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGZvciBkaWJzIGNsaWVudHMuIFRoZSBsb29wYmFjayBmdW5jdGlvbmFsaXR5J3Mgc29mdHdhcmUtYmFzZWQgbmF0dXJlIG1lYW5zIGl0J3Mgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG9yIGhhcmR3YXJlLCB3aGljaCBpcyBhIGRlZmluaXRlIGFkdmFudGFnZS4gU28sIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgYERJQlNfTE9gICpzaG91bGQqIGJlIHVzYWJsZSBvbiBhbnkgYXJjaGl0ZWN0dXJlLiBOb3csIEknbSBjdXJpb3VzLiBBcmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMgYmV5b25kIGBJU01gIHRoYXQgYXJlIHV0aWxpemluZyB0aGUgYGRpYnNgIGludGVyZmFjZT8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkaWJzX2NsaWVudF9yZWdpc3RlcmAgZnVuY3Rpb24sIHRvIHNlZSB3aGVyZSBlbHNlIGRpYnMgaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MDcuNDg3NTQzMzY0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ5OTAzOTc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzX2NsaWVudF9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjA5LjMzNzQ1Njk2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTk3OTA3NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBkaWJzXFxfcmVnaXN0ZXJcXF9jbGllbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZGlic19yZWdpc3Rlcl9jbGllbnRgLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBJ4oCZbSB0aGlua2luZyBhYm91dCB3aGF0IGl0cyB0eXBpY2FsIHJvbGUgc2hvdWxkIGJlIGFuZCBJ4oCZbGwgY29uc2lkZXIgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZTogd2hhdCBpcyBpdCBleHBlY3RpbmcgYXMgaW5wdXQsIGFuZCB3aGF0IGRvZXMgaXQgcHJvbWlzZSB0byBkZWxpdmVyIGluIHRlcm1zIG9mIG91dHB1dD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGl0cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIC0gd2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgY2FsbCBvciB1c2U/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoaW4gdGhlIGJpZ2dlciBzeXN0ZW0sIGFuZCB3aGF0IHNwZWNpZmljIHJlc3BvbnNpYmlsaXRpZXMgaXQncyBzdXBwb3NlZCB0byBoYW5kbGUgd2l0aGluIHRoZSBkaWJzIHdvcmtmbG93LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gcmlnaHQgYXdheS4gSXMgdGhpcyBmdW5jdGlvbiBhIHBvaW50IG9mIGNvbnRlbnRpb24gd2l0aCBvdGhlciBmdW5jdGlvbnM/IERvZXMgdGhpcyBmdW5jdGlvbiBjYXVzZSBtb3JlIG92ZXJoZWFkIHRoYW4gaXQgc2hvdWxkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc4MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjE2LjUzNTM2NzY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2MjUwMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfcmVnaXN0ZXJfY2xpZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19tYWluLmM9NDA9c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ5LVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo1MDppbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTUxLXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy04MC19XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjgxOkVYUE9SVF9TWU1CT0xfR1BMKGRpYnNfcmVnaXN0ZXJfY2xpZW50KTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtODItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0xMTY9c3RydWN0IGRpYnNfY2xpZW50X29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0xMjAtXFx0ICpcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxMjE6XFx0ICogV2lsbCBiZSBjYWxsZWQgZHVyaW5nIGRpYnNfcmVnaXN0ZXJfY2xpZW50KCkgZm9yIGFsbCBleGlzdGluZ1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTEyMi1cXHQgKiBkaWJzIGRldmljZXMgYW5kIHdoZW5ldmVyIGEgbmV3IGRpYnMgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaD0xNjY9c3RydWN0IGRpYnNfY2xpZW50IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTE3Ni0vKipcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoxNzc6ICogZGlic19yZWdpc3Rlcl9jbGllbnQoKSAtIHJlZ2lzdGVyIGEgY2xpZW50IHdpdGggZGlicyBsYXllclxcbmluY2x1ZGUvbGludXgvZGlicy5oLTE3OC0gKiBAY2xpZW50OiB0aGlzIGNsaWVudFxcbi0tXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMTgyLSAqL1xcbmluY2x1ZGUvbGludXgvZGlicy5oOjE4MzppbnQgZGlic19yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGRpYnNfY2xpZW50ICpjbGllbnQpO1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTE4NC0vKipcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jPTYzMD1pbnQgc21jX2lzbV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYy02MzYtXFxubmV0L3NtYy9zbWNfaXNtLmM6NjM3OlxcdHJjID0gZGlic19yZWdpc3Rlcl9jbGllbnQoXFx1MDAyNnNtY19kaWJzX2NsaWVudCk7XFxubmV0L3NtYy9zbWNfaXNtLmMtNjM4LVxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MTguMTcxNjUxNjQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTc0NzgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgQ2xpZW50IFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L3NtYy9zbWNfaXNtLmNgLiBJdCBsb29rcyBsaWtlIHRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgYSBjbGllbnQg4oCTIHRoYXQncyBhIGtleSBlbnRyeSBwb2ludCwgbmF0dXJhbGx5LiBTTUMsIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIHRoYXQncyB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLCByaWdodD8gT2theSwgc28gSSBzaG91bGQgc2VlIGhvdyB0aGlzIGNsaWVudCByZWdpc3RyYXRpb24gaXMgY29uZmlndXJlZC4gQSBxdWljayBjaGVjayBvZiBgbmV0L3NtYy9LY29uZmlnYCBzaG91bGQgcHJvdmlkZSB0aGUgZGV0YWlscyBJIG5lZWQuIExldCdzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggb25lcyBkZXBlbmQgb24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MToyMS4zNjkxMzI0MzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDIzNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MToyMS40MTQxNjAwNTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4MDY3NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYFNNQ2AgUGF0Y2ggb24gYERJQlNgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIGBTTUNgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgRElCU2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBtb2RpZmljYXRpb25zIHRvIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBgRElCU19MT2AgaXMgYSBzb2Z0d2FyZSBsb29wYmFjayBkZXZpY2UsIGl0IG9mZmVycyBhIGNvbnZlbmllbnQsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCB0ZXN0aW5nIGdyb3VuZCBmb3IgdGhlc2UgY2hhbmdlcy4gIFRoZSByZWxldmFudCBjb25maWdzIHRvIGVuYWJsZSBhcHBlYXIgdG8gYmUgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYC5cblxuTm93LCBpZiBJIHRoaW5rIGFib3V0IGl0IGEgYml0IG1vcmUsIHdvdWxkbid0IHNpbXBseSBlbmFibGluZyBgRElCU2AgYW5kIGBESUJTX0xPYCBiZSBzdWZmaWNpZW50IHRvIGV4ZXJjaXNlIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgPyBSZWNhbGwgdGhhdCBgZGlic19sb29wYmFja19pbml0YCBjYWxscyBgZGlic19sb19kZXZfcHJvYmVgLCBhbmQgKnRoYXQqIGluIHR1cm4gY2FsbHMgYm90aCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gQWhhISBgZGlic19sb29wYmFja19pbml0YCBpcyBpbnZva2VkIHdpdGhpbiBgZGlic19pbml0YCwgd2hpY2ggaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGZvciBgZGlic2AuXG5cblRoZXJlZm9yZSwgbG9hZGluZyB0aGUgYGRpYnNgIG1vZHVsZSAob3IgYm9vdGluZyB3aXRoIGl0IGJ1aWx0LWluKSBzaG91bGQgZGlyZWN0bHkgdHJpZ2dlciB0aGUgZXhlY3V0aW9uIG9mIGJvdGggYGRpYnNfZGV2X2FsbG9jYCBhbmQgYGRpYnNfZGV2X2FkZGAuIFNvIHRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0ZXN0IHRoZSBiYXNlIGNoYW5nZXMuIEJ1dCBpcyB0aGVyZSBhIHVzZXItc3BhY2UgdHJpZ2dlcmFibGUgcGF0aCBJIG5lZWQgdG8gY29uc2lkZXI/IEl0IGlzIHBvc3NpYmxlIHRoYXQgd2hlbiBgU01DYCBpcyBlbmFibGVkLCBpdCBtYXkgdHJpZ2dlciBzb21lIG9wZXJhdGlvbnMgb24gdGhlIGBkaWJzYCBkZXZpY2VzP1xuXG5UaGUgcGF0Y2ggaXRzZWxmIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHJlbG9jYXRpb24gb2YgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jaylgIGZyb20gYGRpYnNfZGV2X2FkZGAgdG8gYGRpYnNfZGV2X2FsbG9jYC4gVGhpcyBpcyBjcnVjaWFsLiBJdCBzdWdnZXN0cyB0aGF0IHRoZSBsb2NrIChgZGlicy1cdTAwM2Vsb2NrYCkgbWlnaHQgaGF2ZSBiZWVuIHVzZWQgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgd2FzIGNhbGxlZCwgb3IsIGFsdGVybmF0aXZlbHksIHdoZW4gYGRpYnNfZGV2X2FkZGAgd2FzIG5vdCBjYWxsZWQgYXQgYWxsLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGlzIGBkaWJzLVx1MDAzZWxvY2tgIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHRyYWNlIHRob3NlIHVzZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjI2Ljc5NDgzNzE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc0MDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzLVxcdTAwM2Vsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz00OD1zdGF0aWMgaW50IGRpYnNfbG9fcmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIsXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTEwNy1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEwODpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTA5LVxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbc2JhX2lkeF0gPSBjbGllbnQtXFx1MDAzZWlkO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTEwOlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTExMS1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MTMyPXN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNTgtXFx0aWYgKGxhc3QpIHtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE1OTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTYwLVxcdFxcdGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iX25vZGUtXFx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNjE6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTYyLVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yMzU9c3RhdGljIGludCBkaWJzX2xvX21vdmVfZGF0YShzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCBkbWJfdG9rLFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNjktXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNzA6XFx0c3Bpbl9sb2NrKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI3MS1cXHRjbGllbnRfaWQgPSBkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyW3NiYV9pZHhdO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzQtXFx0XFx0ZGlicy1cXHUwMDNlc3Vic1tjbGllbnRfaWRdLVxcdTAwM2VvcHMtXFx1MDAzZWhhbmRsZV9pcnEoZGlicywgc2JhX2lkeCwgc19tYXNrKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI3NTpcXHRzcGluX3VubG9jayhcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzYtXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9NDA9c3RhdGljIHZvaWQgZGlic19zZXR1cF9mb3J3YXJkaW5nKHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50LFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ0LVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo0NTpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy00Ni1cXHRkaWJzLVxcdTAwM2VzdWJzW2NsaWVudC1cXHUwMDNlaWRdID0gY2xpZW50O1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzo0NzpcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTQ4LX1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYz04Mz1pbnQgZGlic191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy05MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRpYnMsIFxcdTAwMjZkaWJzX2Rldl9saXN0Lmxpc3QsIGxpc3QpIHtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6OTI6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtOTMtXFx0XFx0bWF4X2RtYnMgPSBkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZW1heF9kbWJzKCk7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTAzLVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbY2xpZW50LVxcdTAwM2VpZF0gPSBOVUxMO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxMDQ6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xMDUtXFx0XFx0Y2xpZW50c1tjbGllbnQtXFx1MDAzZWlkXS1cXHUwMDNlb3BzLVxcdTAwM2VkZWxfZGV2KGRpYnMpO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTExOC1lcnJfcmVnX2RtYjpcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTE5OlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTIwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlic19kZXZfbGlzdC5tdXRleCk7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTM0PXN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDAtXFx0XFx0cmV0dXJuIGRpYnM7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjE0MTpcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTE0Mi1cXHRkaWJzLVxcdTAwM2VkZXYucmVsZWFzZSA9IGRpYnNfZGV2X3JlbGVhc2U7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjI3PXZvaWQgZGlic19kZXZfZGVsKHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMzMtXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jOjIzNDpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMzUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9ESUJTX0NMSUVOVFM7ICsraSlcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMjM2LVxcdFxcdGRpYnMtXFx1MDAzZXN1YnNbaV0gPSBOVUxMO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoyMzc6XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0yMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjI2LjgzOTU4MjU5OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk0NTgxNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIGRpYnMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGlic19kZXZfZGVsYCBmdW5jdGlvbiwgYW5kIGl0IHVzZXMgYGRpYnMtXHUwMDNlbG9ja2AuIFJpZ2h0LiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcHJvY2Vzcy4gSWYgYGRpYnNfZGV2X2FsbG9jYCBnZXRzIGNhbGxlZCwgYnV0IHNvbWV0aGluZyBnb2VzIHdyb25nIOKAkyBsaWtlIGBkaWJzX2Rldl9hZGRgIGZhaWxzIG9yIGlzbid0IGV2ZW4gY2FsbGVkIOKAkyBhbmQgdGhlbiBgZGlic19kZXZfZGVsYCBnZXRzIHRyaWdnZXJlZCBmb3IgY2xlYW51cCwgd2UgbWlnaHQgaGF2ZSBhIHByb2JsZW0uIEl0IGNvdWxkIGJlIHRyeWluZyB0byB1c2UgYW4gdW5pbml0aWFsaXplZCBsb2NrLiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvIVxuXG5MZXQgbWUgdHJhY2UgdGhpcyBmdXJ0aGVyLi4uIGBkaWJzX2xvX2Rldl9wcm9iZWAgY2FsbHMgYGRpYnNfZGV2X2FsbG9jYCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQuIElmIGBkaWJzX2Rldl9hZGRgIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgZXJyX3JlZ2AuIEFuZCB3aGF0IGRvZXMgKnRoYXQqIGRvPyBBaCwgaXQgY2FsbHMgYHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpYC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJ3QqIGNhbGwgYGRpYnNfZGV2X2RlbGAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBjb25jZXJuLlxuXG5Ob3csIGhlcmUncyB0aGUga2lja2VyOiB3aGF0IGhhcHBlbnMgaWYgYGRpYnNfcmVnaXN0ZXJfY2xpZW50YCBpcyBjYWxsZWQgY29uY3VycmVudGx5PyBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGBkaWJzX2Rldl9saXN0YC4gUmVtZW1iZXIsIGEgZGV2aWNlIGlzIGFkZGVkIHRvIHRoaXMgbGlzdCBpbiBgZGlic19kZXZfYWRkYCwgc28gaXQncyBwcm90ZWN0ZWQgdG8gYSBkZWdyZWUuIEl0IHdvbid0IHNlZSBhbiB1bmluaXRpYWxpemVkIGRldmljZSBiZWZvcmUgYGRpYnNfZGV2X2FkZGAuIE9rYXksIHRoYXQncyBzbGlnaHRseSBsZXNzIGNvbmNlcm5pbmcuLi4gYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlci5cblxuUmlnaHQsIEkgbmVlZCB0byBjaGVjayBgaXNtX2Rydi5jYC4gVGhpcyBjb3VsZCB2ZXJ5IHdlbGwgaG9sZCBhbm90aGVyIHBhcnQgb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjMxLjUzNDE2NjYzNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNjg1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlic19kZXZfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTU5ND1zdGF0aWMgaW50IGlzbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjM1LVxcdC8qIGVuYWJsZSBpc20gZGV2aWNlLCBidXQgYW55IGludGVycnVwdHMgYW5kIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWRcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MzY6XFx0ICogYmVmb3JlIGRpYnNfZGV2X2FkZCgpIGFkZHMgaXQgdG8gYW55IGNsaWVudHMuXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjM3LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjUxLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY1MjpcXHRyZXQgPSBkaWJzX2Rldl9hZGQoZGlicyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjUzLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjMxLjU3OTU0MjM0MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NDEzNTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpc21fcHJvYmVgIGluIHRoZSBzMzkwIE5ldHdvcmsgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaXNtX3Byb2JlYCB3aXRoaW4gYGRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBHaXZlbiB0aGUgZmlsZSBwYXRoLCB0aGlzIGlzIGxpa2VseSB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBJbnRlZ3JhdGVkIFN1YnN5c3RlbSBNdWx0aXBsZXhlciAoSVNNKSBuZXR3b3JrIGRyaXZlciBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgZGlzY292ZXJ5IGFzcGVjdHMuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgaG93IGl0IHNldHMgdXAgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgd2hhdCByZXNvdXJjZXMgaXQgY2xhaW1zLiBJdCdzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aGVuIGEgbmV3IElTTSBkZXZpY2UgaXMgZGV0ZWN0ZWQgYnkgdGhlIHN5c3RlbSBhbmQgbmVlZHMgdG8gYmUgYnJvdWdodCBvbmxpbmUsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgZGVidWdnaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcuIEtub3dpbmcgdGhlIGRldmljZSB3ZWxsLCBJIGNhbiBiZSBzdXJlIHRvIGV4cGVjdCBjZXJ0YWluIHNwZWNpZmljIGNhbGxzLCBlcnJvciBjb25kaXRpb25zIGFuZCBzcGVjaWZpYyByZXNvdXJjZSB1c2FnZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiBhbnkgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgbWFuYWdpbmcgdGhlIElTTSBuZXR3b3JraW5nIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjM1LjAwMzk1ODU1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcbiA2MjE6XFx0XFx0ZG1hX3NldF9zZWdfYm91bmRhcnkoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgU1pfMU0gLSAxKTtcXG4gNjIyOlxcdFxcdGRtYV9zZXRfbWF4X3NlZ19zaXplKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFNaXzFNKTtcXG4gNjIzOlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiA2MjQ6XFx0XFxuIDYyNTpcXHRcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG4gNjI2OlxcdFxcdGlmICghZGlicykge1xcbiA2Mjc6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNjI4OlxcdFxcdFxcdGdvdG8gZXJyX3Jlc291cmNlO1xcbiA2Mjk6XFx0XFx0fVxcbiA2MzA6XFx0XFx0Lyogc2V0IHRoaXMgdXAgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzICovXFxuIDYzMTpcXHRcXHRpc20tXFx1MDAzZWRpYnMgPSBkaWJzO1xcbiA2MzI6XFx0XFx0ZGlicy1cXHUwMDNlZHJ2X3ByaXYgPSBpc207XFxuIDYzMzpcXHRcXHRkaWJzLVxcdTAwM2VvcHMgPSBcXHUwMDI2aXNtX29wcztcXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0LyogZW5hYmxlIGlzbSBkZXZpY2UsIGJ1dCBhbnkgaW50ZXJydXB0cyBhbmQgZXZlbnRzIHdpbGwgYmUgaWdub3JlZFxcbiA2MzY6XFx0XFx0ICogYmVmb3JlIGRpYnNfZGV2X2FkZCgpIGFkZHMgaXQgdG8gYW55IGNsaWVudHMuXFxuIDYzNzpcXHRcXHQgKi9cXG4gNjM4OlxcdFxcdHJldCA9IGlzbV9kZXZfaW5pdChpc20pO1xcbiA2Mzk6XFx0XFx0aWYgKHJldClcXG4gNjQwOlxcdFxcdFxcdGdvdG8gZXJyX2RpYnM7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdC8qIGFmdGVyIGlzbV9kZXZfaW5pdCgpIHdlIGNhbiBjYWxsIGlzbSBmdW5jdGlvbiB0byBzZXQgZ2lkICovXFxuIDY0MzpcXHRcXHRyZXQgPSBpc21fcmVhZF9sb2NhbF9naWQoZGlicyk7XFxuIDY0NDpcXHRcXHRpZiAocmV0KVxcbiA2NDU6XFx0XFx0XFx0Z290byBlcnJfaXNtO1xcbiA2NDY6XFx0XFxuIDY0NzpcXHRcXHRkaWJzLVxcdTAwM2VkZXYucGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0emRldiA9IHRvX3pwY2kocGRldik7XFxuIDY1MDpcXHRcXHRkZXZfc2V0X25hbWUoXFx1MDAyNmRpYnMtXFx1MDAzZWRldiwgXFxcImlzbSV4XFxcIiwgemRldi1cXHUwMDNldWlkID8gemRldi1cXHUwMDNldWlkIDogemRldi1cXHUwMDNlZmlkKTtcXG4gNjUxOlxcdFxcbiA2NTI6XFx0XFx0cmV0ID0gZGlic19kZXZfYWRkKGRpYnMpO1xcbiA2NTM6XFx0XFx0aWYgKHJldClcXG4gNjU0OlxcdFxcdFxcdGdvdG8gZXJyX2lzbTtcXG4gNjU1OlxcdFxcbiA2NTY6XFx0XFx0cmV0dXJuIDA7XFxuIDY1NzpcXHRcXG4gNjU4OlxcdGVycl9pc206XFxuIDY1OTpcXHRcXHRpc21fZGV2X2V4aXQoaXNtKTtcXG4gNjYwOlxcdGVycl9kaWJzOlxcbiA2NjE6XFx0XFx0LyogcGFpcnMgd2l0aCBkaWJzX2Rldl9hbGxvYygpICovXFxuIDY2MjpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYpO1xcbiA2NjM6XFx0ZXJyX3Jlc291cmNlOlxcbiA2NjQ6XFx0XFx0cGNpX3JlbGVhc2VfbWVtX3JlZ2lvbnMocGRldik7XFxuIDY2NTpcXHRlcnJfZGlzYWJsZTpcXG4gNjY2OlxcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gNjY3OlxcdGVycl9kZXY6XFxuIDY2ODpcXHRcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuIDY2OTpcXHRcXHRrZnJlZShpc20pO1xcbiA2NzA6XFx0XFxuIDY3MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NzI6XFx0fVxcbiA2NzM6XFx0XFxuIDY3NDpcXHRzdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiA2NzU6XFx0e1xcbiA2NzY6XFx0XFx0c3RydWN0IGlzbV9kZXYgKmlzbSA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gNjc3OlxcdFxcdHN0cnVjdCBkaWJzX2RldiAqZGlicyA9IGlzbS1cXHUwMDNlZGlicztcXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFx0ZGlic19kZXZfZGVsKGRpYnMpO1xcbiA2ODA6XFx0XFx0aXNtX2Rldl9leGl0KGlzbSk7XFxuIDY4MTpcXHRcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG4gNjgyOlxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdHBjaV9yZWxlYXNlX21lbV9yZWdpb25zKHBkZXYpO1xcbiA2ODU6XFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiA2ODY6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbiA2ODc6XFx0XFx0a2ZyZWUoaXNtKTtcXG4gNjg4OlxcdH1cXG4gNjg5OlxcdFxcbiA2OTA6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlzbV9kcml2ZXIgPSB7XFxuIDY5MTpcXHRcXHQubmFtZVxcdCAgPSBEUlZfTkFNRSxcXG4gNjkyOlxcdFxcdC5pZF90YWJsZSA9IGlzbV9kZXZpY2VfdGFibGUsXFxuIDY5MzpcXHRcXHQucHJvYmVcXHQgID0gaXNtX3Byb2JlLFxcbiA2OTQ6XFx0XFx0LnJlbW92ZVxcdCAgPSBpc21fcmVtb3ZlLFxcbiA2OTU6XFx0fTtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0c3RhdGljIGludCBfX2luaXQgaXNtX2luaXQodm9pZClcXG4gNjk4OlxcdHtcXG4gNjk5OlxcdFxcdGludCByZXQ7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdGlzbV9kZWJ1Z19pbmZvID0gZGVidWdfcmVnaXN0ZXIoXFxcImlzbVxcXCIsIDIsIDEsIDE2KTtcXG4gNzAyOlxcdFxcdGlmICghaXNtX2RlYnVnX2luZm8pXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhpc21fZGVidWdfaW5mbywgXFx1MDAyNmRlYnVnX2hleF9hc2NpaV92aWV3KTtcXG4gNzA2OlxcdFxcdHJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmlzbV9kcml2ZXIpO1xcbiA3MDc6XFx0XFx0aWYgKHJldClcXG4gNzA4OlxcdFxcdFxcdGRlYnVnX3VucmVnaXN0ZXIoaXNtX2RlYnVnX2luZm8pO1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MTE6XFx0fVxcbiA3MTI6XFx0XFxuIDcxMzpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgaXNtX2V4aXQodm9pZClcXG4gNzE0OlxcdHtcXG4gNzE1OlxcdFxcdHBjaV91bnJlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aXNtX2RyaXZlcik7XFxuIDcxNjpcXHRcXHRkZWJ1Z191bnJlZ2lzdGVyKGlzbV9kZWJ1Z19pbmZvKTtcXG4gNzE3OlxcdH1cXG4gNzE4OlxcdFxcbiA3MTk6XFx0bW9kdWxlX2luaXQoaXNtX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTozNS4wMDQwNTgwNDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5ODQ0NTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElTTSBQcm9iZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXNtX3Byb2JlYCBmdW5jdGlvbiBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBmaXJzdCBjYWxscyBgZGlic19kZXZfYWxsb2NgLCB3aGljaCBpcyBzdGFuZGFyZCwgdGhlbiBpbW1lZGlhdGVseSBwcm9jZWVkcyB0byBgaXNtX2Rldl9pbml0YC4gTm93LCBhIHJlZCBmbGFnIGlzIHBvcHBpbmcgdXAuIElmIGBpc21fZGV2X2luaXRgIGZhaWxzLCBpdCBqdW1wcyB0byBgZXJyX2RpYnNgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGVhc2VzIHRoZSBkZXZpY2UgdXNpbmcgYHB1dF9kZXZpY2UoXHUwMDI2ZGlicy1cdTAwM2VkZXYpYC4gVGhhdCdzIGNsZWFuIGVycm9yIGhhbmRsaW5nLCBnb29kLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYGlzbV9kZXZfaW5pdGAgZW5hYmxlcyBpbnRlcnJ1cHRzISBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLiBJZiBhbiBpbnRlcnJ1cHQgZmlyZXMgKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLCB3ZSBjb3VsZCBoYXZlIGEgcmFjZSBjb25kaXRpb24uIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbGlrZWx5IGBpc21faGFuZGxlX2lycWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGNvdWxkIGJlIHRyaWdnZXJlZC4gQW5kIGlmIGl0J3MgdXNpbmcgYSBsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGRpYnNgIHN0cnVjdHVyZSBiZWZvcmUgdGhlIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZCwgd2UncmUgaW4gdHJvdWJsZS4gV2UgbWlnaHQgc2VlIGNvcnJ1cHRpb24gb3IgYSBrZXJuZWwgcGFuaWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gYGlzbV9oYW5kbGVfZXZlbnRgIGFuZCBgaXNtX2hhbmRsZV9pcnFgIGFuZCBzZWUgaWYgdGhleSdyZSB0b3VjaGluZyBgZGlicy1cdTAwM2Vsb2NrYCB0b28gZWFybHkuIEkgc3VzcGVjdCB0aGV5J3JlIHRoZSB3ZWFrIHBvaW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MzkuNDAyNTA1NDg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg4OTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzLVxcdTAwM2Vsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTI3Nz1zdGF0aWMgaW50IGlzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYixcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMwNS1cXHRkbWItXFx1MDAzZWRtYl90b2sgPSBjbWQucmVzcG9uc2UuZG1iX3RvaztcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzozMDY6XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMDctXFx0ZGlicy1cXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWItXFx1MDAzZWlkeCAtIElTTV9ETUJfQklUX09GRlNFVF0gPSBjbGllbnQtXFx1MDAzZWlkO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMwODpcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzA5LW91dDpcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTMxMz1zdGF0aWMgaW50IGlzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI1LVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMyNjpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTMyNy1cXHRkaWJzLVxcdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYi1cXHUwMDNlaWR4IC0gSVNNX0RNQl9CSVRfT0ZGU0VUXSA9IE5PX0RJQlNfQ0xJRU5UO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjMyODpcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkaWJzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtMzI5LVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM9NDkzPXN0YXRpYyBpcnFyZXR1cm5fdCBpc21faGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNTA2LVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjUwNzpcXHRzcGluX2xvY2soXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTUwOC1cXHRpc20tXFx1MDAzZXNiYS1cXHUwMDNlcyA9IDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy01MzItXFx0fVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjUzMzpcXHRzcGluX3VubG9jayhcXHUwMDI2ZGlicy1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNTM0LVxcdHJldHVybiBJUlFfSEFORExFRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6MzkuNDQ1NDAwMzEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzU2OTg5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3BpbmxvY2sgSW5pdGlhbGl6YXRpb24gQnVnIGFuZCBQb3RlbnRpYWwgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzbmFwcyBpbnRvIGZvY3VzOiBgaXNtX2hhbmRsZV9pcnFgIGlzIHVzaW5nIGBzcGluX2xvY2soXHUwMDI2ZGlicy1cdTAwM2Vsb2NrKWAuIEkgcmVtZW1iZXIgbm93IHRoYXQgYGRpYnMtXHUwMDNlbG9ja2AgaXMgaW5pdGlhbGl6ZWQsIG9yICp3YXMqIGluaXRpYWxpemVkLCBpbiBgZGlic19kZXZfYWRkYC4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBhbiBpbnRlcnJ1cHQgY29tZXMgaW4gKmJlZm9yZSogYGRpYnNfZGV2X2FkZGAgaXMgY2FsbGVkLCBzcGVjaWZpY2FsbHksIHJpZ2h0IGFmdGVyIGBpc21fZGV2X2luaXRgIHdoaWNoIGVuYWJsZXMgaW50ZXJydXB0cywgdGhlIGRyaXZlciB3b3VsZCBhdHRlbXB0IHRvIGxvY2sgYW4gdW5pbml0aWFsaXplZCBzcGlubG9jayBpbiBgaXNtX2hhbmRsZV9pcnFgLiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGFuZCBhIHBvdGVudGlhbCBrZXJuZWwgcGFuaWMgd2FpdGluZyB0byBoYXBwZW4hIFRoaXMgcGF0Y2ggY2xldmVybHkgZml4ZXMgdGhpcyBieSBtb3ZpbmcgYHNwaW5fbG9ja19pbml0KFx1MDAyNmRpYnMtXHUwMDNlbG9jaylgIHRvIGBkaWJzX2Rldl9hbGxvY2AsIHdoaWNoIGlzIGNhbGxlZCBiZWZvcmUgYGlzbV9kZXZfaW5pdGAuIEEgbmljZSwgY2xlYW4gZnVuY3Rpb25hbCBmaXguXG5cbk5vdywgd2hpbGUgdGhpcyBpcyBvYnZpb3VzbHkgYW4gczM5MC1zcGVjaWZpYyBkcml2ZXIgZHVlIHRvIGBDT05GSUdfSVNNYCwgSSdtIHNlZWluZyBpbXBsaWNhdGlvbnMgdGhhdCBleHRlbmQgYmV5b25kIHRoYXQgaW5pdGlhbCBzY29wZS4gSSByZWNhbGwgdGhhdCBgZGlic19sb29wYmFjay5jYCBhbHNvIGNhbGxzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgIGluIGBkaWJzX2xvX2Rldl9wcm9iZWAsIHJpZ2h0PyBFdmVuIHRob3VnaCB0aGUgbG9vcGJhY2sgZHJpdmVyIGRvZXNuJ3QgaW52b2x2ZSBoYXJkd2FyZSBpbnRlcnJ1cHRzLCB0aGF0J3Mgbm90IHRoZSBwb2ludC4gQm90aCBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBhcmUgcGFydCBvZiB0aGUgKmNvcmUqIERJQlMgc3Vic3lzdGVtLiBBbmQgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBiZWdpbnMgdG8gdW5mb2xkLi4uXG5cbkNvdWxkIHdlIGZ1enogdGhpcz8gVGhlIGJ1ZyBpc24ndCBzcGVjaWZpYyB0byBoYXJkd2FyZSBpbnRlcnJ1cHRzOyBpdCdzIHdpdGhpbiBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCB0aGVtc2VsdmVzLiBJZiB3ZSBjYW4gZW5hYmxlIGJvdGggYERJQlNgIGFuZCBgRElCU19MT2AsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBpbiB0aGUgc2FtZSB3YXksIHJpZ2h0PyBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgRElCU19MT2AgaW5zdGFudGlhdGVkIG9ubHkgb25jZSBkdXJpbmcgbW9kdWxlIGluaXQ/IElmIGl0IGlzLCB0aGF0IGxpbWl0cyB0aGUgY2hhbmNlcyBvZiBmdXp6aW5nLiBJZiBpdCBhbGxvd3MgZm9yIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLCBvciBtb3JlIGltcG9ydGFudGx5LCBpZiB3ZSBjb3VsZCBmaW5kIGEgd2F5IHRvIHRyaWdnZXIgYGRpYnNfZGV2X2FsbG9jYCBmcm9tIHVzZXIgc3BhY2UsIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBleHBhbmQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCwgd2l0aCBpdCwgb3VyIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlIGxvb3BiYWNrIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkIG11bHRpcGxlIHRpbWVzIG9yIGlmIGl0cyBjcmVhdGlvbiBpcyBsaW1pdGVkIHRvIG1vZHVsZSBsb2FkIHRpbWUuIEZpbmRpbmcgYSB3YXkgdG8gdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYCBmcm9tIHVzZXIgc3BhY2Ugd291bGQgYmUgYSBodWdlIHdpbiBoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MTo0Ni41ODExMDE3MzdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzAxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfbG9vcGJhY2tfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzQ2PXN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X3JlbW92ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTgtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTk6aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg9MzU9c3RydWN0IGRpYnNfbG9fZGV2IHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDMtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDo0NDppbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNDUtdm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00Ni0jZWxzZVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmg6NDc6c3RhdGljIGlubGluZSBpbnQgZGlic19sb29wYmFja19pbml0KHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00OC17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MjU0PXN0YXRpYyBpbnQgX19pbml0IGRpYnNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2MS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MjYyOlxcdHJjID0gZGlic19sb29wYmFja19pbml0KCk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTI2My1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjQ2LjYyNjgxMTQ1NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU5OTU2MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRElCUyBEZXZpY2UgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIGp1c3Qgb25lIGRldmljZSBiZWluZyBhbGxvY2F0ZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgZGlic19kZXZfYWxsb2NgIGlzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBvdGhlciBkcml2ZXJzICpjb3VsZCogYmUgdXNpbmcgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5MZXQncyBzZWXigKYgb25seSB0d28gZHJpdmVyczogYGlzbV9kcnYuY2AgYW5kIGBkaWJzX2xvb3BiYWNrLmNgLiBgaXNtX2Rydi5jYCBpcyB0aGUgUENJIGRyaXZlciwgYW5kIEkga25vdyB0aGF0IHByb2JlcyB3aGVuIGEgUENJIGRldmljZSBnZXRzIGFkZGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhvdWdodCBpcyB3aGV0aGVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBjYW4gd2UgZW11bGF0ZSBhbiBJU00gZGV2aWNlP1xuXG5Pa2F5LCBsZXQgbWUgY2hlY2vigKYgV2FpdCEgSVNNIGlzIFwiSW50ZXJuYWwgU2hhcmVkIE1lbW9yeVwiIG9uIHMzOTB4LiBJdCdzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHByb3ZpZGVkIGJ5IHRoZSBzMzkwIGZpcm13YXJlIOKAkyBsaWtlIHovVk0gb3IgTFBBUi4gUmlnaHQsIGl0J3Mgbm90IGEgc3RhbmRhcmQgUENJIGRldmljZSB0aGF0IFFFTVUgd291bGQgbmF0aXZlbHkgZW11bGF0ZSB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgaW1wbGVtZW50ZWQgdGhhdC5cblxuV2FpdCBhIHNlY29uZCwgYERJQlNfTE9gIGlzIHRoZSBzb2Z0d2FyZSBsb29wYmFjay4gQ291bGQgdGhhdCBiZSBhIHdheSB0byB0cmlnZ2VyIGBkaWJzX2Rldl9hbGxvY2A/IE9ubHkgb24gbW9kdWxlIGxvYWQuIFNvLCBpZiBJIGNvbXBpbGUgYERJQlNgIGFzIGEgbW9kdWxlLCBJIGNhbiBsb2FkIGFuZCB1bmxvYWQgaXQsIHdoaWNoIGRvZXMgdHJpZ2dlciBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gQnV0IG1vZHVsZSBsb2FkL3VubG9hZCBpc24ndCB0aGUgKmJlc3QqIGZ1enppbmcgdGFyZ2V0IGZvciBzeXprYWxsZXIsIGFsdGhvdWdoIGl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHNvLlxuXG5Ib2xkIG9uLCB3aGF0IGFib3V0IGBTTUNgPyBEb2VzIGBTTUNgIGNyZWF0ZSBgZGlic2AgZGV2aWNlcz8gTm8sIGl0J3MganVzdCBhIGNsaWVudCwgaXQgcmVnaXN0ZXJzIHRocm91Z2ggYGRpYnNfcmVnaXN0ZXJfY2xpZW50YC4gVGhhdCdzIG5vdCBpdC5cblxuU28sIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byB0cmlnZ2VyIGBkaWJzX2Rldl9hbGxvY2A/IE9rYXksIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5ldGxpbmsgb3Igc3lzZnMgaW50ZXJmYWNlcyBmb3IgY3JlYXRpbmcgYGRpYnNgIGRldmljZXMuIFRoYXQncyB0aGUgbmV4dCBhdmVudWUgdG8gZXhwbG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTE6NTIuNTg2NzcwNDYyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MzI2MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfZGV2X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTMwNj1zdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMxNjpcXHRkaWJzID0gZGlic19kZXZfYWxsb2MoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMxNy1cXHRpZiAoIWRpYnMpIHtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzM4LVxcdGtmcmVlKGRpYnMtXFx1MDAzZWRtYl9jbGllbnRpZF9hcnIpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzM5OlxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQwLVxcdHB1dF9kZXZpY2UoXFx1MDAyNmRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM0Nj1zdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9yZW1vdmUodm9pZClcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUyLVxcdGRpYnNfbG9fZGV2X2V4aXQobG9fZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM1MzpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1NC1cXHRwdXRfZGV2aWNlKFxcdTAwMjZsb19kZXYtXFx1MDAzZWRpYnMtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM9MTI1PXN0YXRpYyB2b2lkIGRpYnNfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jLTEzMy1cXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmM6MTM0OnN0cnVjdCBkaWJzX2RldiAqZGlic19kZXZfYWxsb2Modm9pZClcXG5kcml2ZXJzL2RpYnMvZGlic19tYWluLmMtMTM1LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDctfVxcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwoZGlic19kZXZfYWxsb2MpO1xcbmRyaXZlcnMvZGlicy9kaWJzX21haW4uYy0xNDktXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz01OTQ9c3RhdGljIGludCBpc21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTYyNC1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzo2MjU6XFx0ZGlicyA9IGRpYnNfZGV2X2FsbG9jKCk7XFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjI2LVxcdGlmICghZGlicykge1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjYwLWVycl9kaWJzOlxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY2MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02NjItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY3ND1zdGF0aWMgdm9pZCBpc21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjgwLVxcdGlzbV9kZXZfZXhpdChpc20pO1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjY4MTpcXHQvKiBwYWlycyB3aXRoIGRpYnNfZGV2X2FsbG9jKCkgKi9cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02ODItXFx0cHV0X2RldmljZShcXHUwMDI2ZGlicy1cXHUwMDNlZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oPTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgKmRpYnNfZ2V0X3ByaXYoc3RydWN0IGRpYnNfZGV2ICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00MzktLyoqXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6NDQwOiAqIGRpYnNfZGV2X2FsbG9jKCkgLSBhbGxvY2F0ZSBhbmQgcmVmZXJlbmNlIGRldmljZSBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDEtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZGlicy5oLTQ0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDo0NDg6c3RydWN0IGRpYnNfZGV2ICpkaWJzX2Rldl9hbGxvYyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC00NDktLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjU0LjIzMzEwMjE5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTUyNTAzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGlic2AgSW5pdGlhbGl6YXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlcyBhcmUgbGltaXRlZCB0byBgaXNtX2Rydi5jYCBhbmQgYGRpYnNfbG9vcGJhY2suY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB0aGVyZSBhbnkgb3RoZXIgd2F5cyB0byB0cmlnZ2VyIHRoZSBgZGlic19kZXZfYWxsb2NgIGZ1bmN0aW9uP1wiIFRoZSBhbnN3ZXIgYXBwZWFycyB0byBiZSBubywgd2hpY2ggaXMgaGVscGZ1bC5cblxuQnV0IGhvbGQgb24sIGBkaWJzX2Rldl9hbGxvY2AgKmlzKiBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGRpYnNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHZpYSBgZGlic19sb29wYmFja19pbml0YC4gVGhhdCBtZWFucyBpZiBgZGlic2AgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCB0aGUgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZHVyaW5nIGJvb3QuIElmIGl0J3MgbG9hZGVkIGFzIGEgbW9kdWxlLCB0aGVuIGl0IGhhcHBlbnMgZHVyaW5nIG1vZHVsZSBsb2FkLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nP1xuXG5UaGUgYnVnLCBpZiBpdCBleGlzdHMsIGlzIGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbG9jayB1c2FnZSB0aGF0IG9jY3VycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IHRyaWNreS4gSXQgc2VlbXMgdGhhdCB0aGlzIGlzIG9ubHkgZ29pbmcgdG8gdHJpZ2dlciBkdXJpbmcgbW9kdWxlIGxvYWQgb3IgUENJIHByb2JlIG9mIGFuIHMzOTAgc3BlY2lmaWMgZGV2aWNlLiBEeW5hbWljIGZ1enppbmcgd2lsbCBiZSBjaGFsbGVuZ2luZyB1bmxlc3Mgd2UgY2FuIHNpbXVsYXRlIFBDSSBkZXZpY2VzIG9yIGNvbnRyb2wgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nIHdpdGggc3l6a2FsbGVyLlxuXG5BaGEhIFdhaXQsIHN5emthbGxlciAqY2FuKiBpbmplY3QgUENJIGRldmljZXMgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYHN5el9wY2lfdnBjaV9pbmplY3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyISBUaGUga2V5IGNoYWxsZW5nZSwgb2YgY291cnNlLCBpcyB0aGF0IGBJU01gIGlzIGFuIHMzOTAtc3BlY2lmaWMgUENJIGRldmljZS5cblxuT2theSwgc28gYElTTWAgaXMgYSBQQ0kgZGV2aWNlLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bC4gVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNoZWNrIHRoZSBgaXNtX2RldmljZV90YWJsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjU5LjU0ODM1NDcyOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NDg0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNtX2RldmljZV90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYz0yMT1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0yNC1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYzoyNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXNtX2RldmljZV90YWJsZVtdID0ge1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jLTI2LVxcdHsgUENJX1ZERVZJQ0UoSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9JU00pIH0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0yOC19O1xcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jOjI5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpc21fZGV2aWNlX3RhYmxlKTtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy0zMC1cXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvaXNtX2Rydi5jPTY5MD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaXNtX2RyaXZlciA9IHtcXG5kcml2ZXJzL3MzOTAvbmV0L2lzbV9kcnYuYy02OTEtXFx0Lm5hbWVcXHQgID0gRFJWX05BTUUsXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmM6NjkyOlxcdC5pZF90YWJsZSA9IGlzbV9kZXZpY2VfdGFibGUsXFxuZHJpdmVycy9zMzkwL25ldC9pc21fZHJ2LmMtNjkzLVxcdC5wcm9iZVxcdCAgPSBpc21fcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUxOjU5LjU5MTIwODQ0NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTIxODAyNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGludm9sdmVzIGEgYFBDSV9ERVZJQ0VfSURfSUJNX0lTTWAuIEkgaW1tZWRpYXRlbHkgY29uc2lkZXIgc3l6a2FsbGVyJ3MgY2FwYWJpbGl0aWVzIOKAkyBpdCBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgYnV0IG1vcmUgcmVsZXZhbnRseSwgaXQgaGFzIGEgUENJIGZ1enplciB1c2luZyBgc3l6X3BjaV92cGNpX2luamVjdGAuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaGFzIGEgbGlzdCBvZiBjb25kaXRpb25zIHRoYXQgd291bGQgbWFrZSB0aGlzIHBhdGNoICpub3QqIHdvcnRoIGZ1enppbmcuIEl0IG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCBuZWVkIHJlYWwgaGFyZHdhcmUsIGFuZCBJJ20gYXNraW5nIG15c2VsZiwgaXMgdGhpcyBJQk0gSVNNIGNhcmQgc3VjaCBhIHRoaW5nP1xuXG5BaGEsIGl0J3MgYW4gSUJNIEludGVybmFsIFNoYXJlZCBNZW1vcnkgZGV2aWNlLiBCdXQgd2FpdCwgYERJQlNfTE9gIGlzIGEgc29mdHdhcmUgbG9vcGJhY2shIFRoYXQncyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyBgRElCU19MT2AgZnVuY3Rpb25hbGl0eSB0cmlnZ2VyYWJsZT8gSXQgbG9va3MgbGlrZSBpdCdzIGluaXRpYWxpemVkIGR1cmluZyBtb2R1bGUgbG9hZC4gSWYgc3l6a2FsbGVyIGNhbiBsb2FkIGFuZCB1bmxvYWQgbW9kdWxlcywgdGhlbiB0aGVvcmV0aWNhbGx5LCBpdCBjb3VsZCByZWFjaCBpdCwgYWx0aG91Z2ggbW9kdWxlIGZ1enppbmcgaXNuJ3QgdXN1YWxseSB0aGUgKnByaW1hcnkqIGZvY3VzLlxuXG5MZXQgbWUgZ28gYmFjayB0byB0aGUgcHJvbXB0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBmYWxsIGludG8gdGhlIFwibm90IHdvcnRoIGZ1enppbmdcIiBjYXRlZ29yeS4gT2theSwgc28gaXQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN0dWZmIG5lZWRpbmcgcGh5c2ljYWwgY2FyZHMsIGJ1dCBpcyBgZGlic19tYWluLmNgIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyPyBObywgaXQncyBgZHJpdmVycy9kaWJzL2RpYnNfbWFpbi5jYCwgcGFydCBvZiB0aGUgXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmdcIiBzdWJzeXN0ZW0sIGFuZCBpdCAqZG9lcyogaGF2ZSBhIHNvZnR3YXJlIGxvb3BiYWNrIChgRElCU19MT2ApLiBUaGVyZWZvcmUsIGl0ICppcyogcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGF0J3MgZ29vZC5cblxuSXMgdGhpcyBjb2RlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIHRlYXJkb3duPyBObywgYGRpYnNfZGV2X2FsbG9jYCBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3Byb2JlLiBTbywgaXQgbG9va3MgbGlrZSBpdCBpcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgcmVhY2ggYGRpYnNfZGV2X2FsbG9jYD8gT2theSwgaXQncyBjYWxsZWQgdmlhIGBkaWJzX2xvb3BiYWNrX2luaXRgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkaWJzX2luaXRgLiBTbywgaWYgc3l6a2FsbGVyIGRvZXMgZnV6eiBtb2R1bGUgbG9hZGluZywgaXQgd2lsbCBoaXQgaXQuIExldCdzIHNlZSBpZiBpdCdzIGNhbGxlZCBhbnl3aGVyZSBlbHNlIGp1c3QgdG8gbWFrZSBzdXJlLiBJJ3ZlIGFscmVhZHkgZ3JlcHBlZCBmb3IgaXQsIGl0J3Mgb25seSBpbiBgaXNtX2Rydi5jYCBhbmQgYGRpYnNfbG9vcGJhY2suY2AuXG5cbkFoYSwgaXQncyBhIGhlbHBlciBmdW5jdGlvbiwgbm90IGEgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBwYXRjaCBmaXhlcyBhIGBzcGluX2xvY2tfaW5pdGAgcGxhY2VtZW50IGluIGBkaWJzX2Rldl9hZGRgIHJhdGhlciB0aGFuIGluIGBkaWJzX2Rldl9hbGxvY2AuIFNvIGlmIEknbSBtYXJraW5nIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIGBFbmFibGVDb25maWdzYCB3b3VsZCBiZSBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgIGJlY2F1c2UgYFNNQ2AgaXMgYSBjbGllbnQgb2YgYERJQlNgLCBldmVuIHRob3VnaCBpdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQuIE9rYXksIGxldCdzIGp1c3QgbWFrZSBzdXJlIGFib3V0IHRoYXQgYFNNQ2AgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjowOS41MTMwMTM3ODdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDY1MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjowOS41NTk0ODQ1MTRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNDIwNjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gd2hhdCBJJ2QgYmUgbG9va2luZyBhdCBuZXh0OlxuXG4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgaW4gYG5ldC9zbWNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBuZXR3b3JrIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJJ2QgZG8gaXMgemVybyBpbiBvbiB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjb250cm9sIGNlbnRlciBmb3IgY29uZmlndXJpbmcgb3B0aW9ucyBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4gSSdkIGJlIGxvb2tpbmcgZm9yIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgd2l0aGluIHRoYXQgZmlsZSwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS5cblxuSSdkIGJlIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluOlxuXG4qICAgKipEaXJlY3QgZGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIGRvZXMgYG5ldC9zbWMvS2NvbmZpZ2AgZGVwZW5kIG9uIHRvIGV2ZW4gYmUgKnZpc2libGUqIG9yIGF2YWlsYWJsZSBmb3IgY29uZmlndXJhdGlvbj8gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIHByZXJlcXVpc2l0ZXMuIEZvciBleGFtcGxlLCBpcyB0aGVyZSBhIGdsb2JhbCBmbGFnLCBhIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQgc3ltYm9sLCBvciBhIHBhcnRpY3VsYXIgbmV0d29ya2luZyBmZWF0dXJlIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmaXJzdD9cbiogICAqKlN5bWJvbCBoaWVyYXJjaHk6KiogSG93IGFyZSB0aGUgU01DIG9wdGlvbnMgb3JnYW5pemVkIHdpdGhpbiB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gc3ltYm9scyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLlxuKiAgICoqRGVmYXVsdCB2YWx1ZXMgYW5kIHByb21wdHM6KiogSG93IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGUgU01DIG9wdGlvbnMgZGVmaW5lZD8gV2hhdCBhcmUgdGhlIHByb21wdHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlbT8gVGhpcyBnaXZlcyBtZSBjb250ZXh0IGFuZCBoZWxwcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdCBvdGhlciBvcHRpb25zLlxuKiAgICoqSW1wbGljYXRpb25zIGFuZCBmdXJ0aGVyIGRlcGVuZGVuY2llczoqKiBBZnRlciBJIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMgSSBoYXZlIHRvIHRoZW4gY2hlY2sgd2hldGhlciB0aG9zZSBzeW1ib2xzIHRyaWdnZXIgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZWxzZXdoZXJlLiBJIHdpbGwgbWFwIG91dCB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBncmFwaC4gQXJlIHRoZXJlIGFueSBpbmRpcmVjdCBpbXBhY3RzIG9uIG90aGVyIHN1YnN5c3RlbXM/IEkgd291bGQgYWxzbyB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuXG4qICAgKipDcm9zcy1hcmNoaXRlY3R1cmUgY29uc2lkZXJhdGlvbnM6KiogQXJlIHRoZXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZGl0aW9uYWxzIG9yIGRlcGVuZGVuY2llcz8gU01DIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgb3IgZnVuY3Rpb24gaWRlbnRpY2FsbHkgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzLlxuKiAgICoqRG9jdW1lbnRhdGlvbiBvciBjb21tZW50czoqKiBJJ20gaG9waW5nIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgaGVscGZ1bCBjb21tZW50cyBleHBsYWluaW5nIHRoZSBwdXJwb3NlIG9mIGVhY2ggc3ltYm9sIGFuZCBpdHMgcmVsYXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgbWF5YmUgaGludHMgYWJvdXQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS5cblxuQnkgdGhvcm91Z2hseSBhbmFseXppbmcgYG5ldC9zbWMvS2NvbmZpZ2AsIEkgY2FuIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBTTUMgY29uZmlndXJhdGlvbiBvcHRpb25zIGludGVncmF0ZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgbW9kaWZ5aW5nIHRob3NlIG9wdGlvbnMuIFRoYXQncyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjEzLjk5MzY5Mzk2OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6MTMuOTkzNzU5MjU3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1Mjk3MzgxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU01DIGFuZCBESUJTIGZvciBGdXp6aW5nKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgYERJQlNgLCBhbmQgaXQgbG9va3MgbGlrZSBgU01DYCByZWxpZXMgb24gYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCwgY3J1Y2lhbGx5LCBgRElCU2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIElmIGBTTUNgIG5lZWRzIGBESUJTYCwgZnV6emluZyBgRElCU2AgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGZvciB1bmNvdmVyaW5nIGBTTUNgIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlcmVmb3JlLCB0byBwcm9wZXJseSBleGVyY2lzZSBhbmQgZnV6eiBgRElCU2AsIEkgbmVlZCB0byBlbmFibGUgYm90aCB0aGUgY29yZSBgRElCU2AgZnVuY3Rpb25hbGl0eSAqYW5kKiB0aGUgbG93LW92ZXJoZWFkIHZhcmlhbnQsIHdoaWNoIEknbSBpbmZlcnJpbmcgaXMgYERJQlNfTE9gLiBUaGF0IGdpdmVzIG1lIGEgbW9yZSBjb21wbGV0ZSBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCBiZWZvcmUgSSBqdW1wIGluLCBJIHdhbnQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGZsYWdzIGluIHBsYXkuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zLiBJJ2xsIHNlYXJjaCBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgaG93IGBESUJTYCBiZWhhdmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdG8gcHJvcGVybHkgY29uZmlndXJlIG15IGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjoxOS41MjM0OTk2ODNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgRElCU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyAoRElCUykgaXMgYSBjb21tdW5pY2F0aW9uIG1ldGhvZCB0aGF0XFxuICAgNzpcXHRcXHQgIHVzZXMgY29tbW9uIHBoeXNpY2FsIChpbnRlcm5hbCkgbWVtb3J5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgYWNjZXNzXFxuICAgODpcXHRcXHQgIGludG8gYSByZW1vdGUgYnVmZmVyLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXFxuICAxMTpcXHRcXHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cXG4gIDEyOlxcdFxcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBESUJTX0xPXFxuICAxNTpcXHRcXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIERJQlNcXG4gIDE3OlxcdFxcdGRlZmF1bHQgblxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXFxuICAyMDpcXHRcXHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6MTkuNTIzNTYwMjMzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODEwMTkwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBhbmQgSSBzZWUgdGhpcyBtZW50aW9uIG9mIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGFib3V0IHRoYXQ/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgZGlic19kZXZfYWxsb2NgIGFuZCBgZGlic19kZXZfYWRkYC4gSG1tbSwgSSB0aGluayB0aG9zZSBmdW5jdGlvbnMsIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLCBzaG91bGQgcHJvYmFibHkgYmUgaW5jbHVkZWQgd2l0aGluIGBGb2N1c1N5bWJvbHNgLiBcblxuSGFuZyBvbiwgdGhvdWdoLiBUaGlua2luZyB0aGlzIHRocm91Z2guLi4gaXNuJ3QgYGRpYnNfZGV2X2FsbG9jYCBjYWxsZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbj8gVGhlIHRyaWNreSBxdWVzdGlvbiBpcyBjYW4gd2UgcG90ZW50aWFsbHkgdHJpZ2dlciBpdCBmcm9tIHVzZXIgc3BhY2U/XG5cbklmIGBTTUNgIGlzIGVuYWJsZWQsIGRvZXMgdGhhdCBzb21laG93IGNhdXNlIGBkaWJzX2Rldl9hbGxvY2AgdG8gcnVuPyBObywgd2FpdC4uLiBgU01DYCBpcyBhIGNsaWVudCwgcmlnaHQ/IEl0IHJlZ2lzdGVycyB0aHJvdWdoIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAuIE9rYXksIGdvdCBpdC5cblxuU28gdGhlIGFjdHVhbCBkZXZpY2UsIHRoYXQncyBjcmVhdGVkIGJ5IHRoZSAqcHJvdmlkZXIqIC0gZWl0aGVyIGBpc21fZHJ2YCBvciBgZGlic19sb29wYmFja2AuIEZvciBgZGlic19sb29wYmFja2AsIGl0J3MgZHVyaW5nIG1vZHVsZSBpbml0LiBBbmQgZm9yIGBpc21fZHJ2YCwgdGhhdCdzIGhhcHBlbmluZyBkdXJpbmcgUENJIHByb2JlLiBOb3csIGlmIHN5emthbGxlciBjYW4gc29tZWhvdyBlbXVsYXRlIFBDSSBkZXZpY2VzLCBpdCBtaWdodCB0cmlnZ2VyIHRoYXQgYGlzbV9wcm9iZWAuXG5cbkFoLCBidXQgYSBwb3RlbnRpYWwgc25hZy4uLiBgaXNtX2RydmAgaXMgczM5MCBzcGVjaWZpYyBiZWNhdXNlIG9mIHRoZSBgQ09ORklHX0lTTWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFdhaXQuLi4gaXMgYENPTkZJR19JU01gICpvbmx5KiBmb3IgczM5MD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjoyNy42MDQ1ODE4NzlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdGNvbmZpZyBRRVRIX09TWFxcbiAgNzE6XFx0XFx0ZGVmX2Jvb2wgIUhBVkVfTUFSQ0hfWjE1X0ZFQVRVUkVTXFxuICA3MjpcXHRcXHRwcm9tcHQgXFxcInFldGggT1NYIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgNzM6XFx0XFx0ZGVwZW5kcyBvbiBRRVRIXFxuICA3NDpcXHRcXHRoZWxwXFxuICA3NTpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgcWV0aCBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGluIE9TWCBtb2RlLlxcbiAgNzY6XFx0XFx0ICBJZiB1bnN1cmUsIGNob29zZSBOLlxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgQ0NXR1JPVVBcXG4gIDc5OlxcdFxcdHRyaXN0YXRlXFxuICA4MDpcXHRcXHRkZWZhdWx0IChDVENNIHx8IFFFVEggfHwgU01DKVxcbiAgODE6XFx0XFxuICA4MjpcXHRjb25maWcgSVNNXFxuICA4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgSVNNIHZQQ0kgQWRhcHRlclxcXCJcXG4gIDg0OlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gIDg1OlxcdFxcdGRlZmF1bHQgblxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJbnRlcm5hbCBTaGFyZWQgTWVtb3J5XFxuICA4ODpcXHRcXHQgIHZQQ0kgQWRhcHRlci4gVGhlIGFkYXB0ZXIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgU01DIG5ldHdvcmsgcHJvdG9jb2wuXFxuICA4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6MjcuNjA0Njc5MjQ5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjA5NTU3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIERJQlMgYW5kIFNNQyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgRElCUy1yZWxhdGVkIHBhdGNoLCBhbmQgaGVyZSdzIG15IHBsYW4gZm9yIGZ1enppbmcgaXQuIEknbSBzdGFydGluZyB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIGBJU01gIGZlYXR1cmUsIHdoaWNoIHJlbGllcyBvbiBib3RoIGBQQ0lgIGFuZCBgRElCU2AsIGlzIG9ubHkgYnVpbHQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSG93ZXZlciwgc2luY2UgU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlIHMzOTB4IGFyY2hpdGVjdHVyZSwgSSdtIHRoaW5raW5nIEkgY2FuIGRlZmluaXRlbHkgdGFyZ2V0IGBJU01gIG9uIHRoYXQgYXJjaGl0ZWN0dXJlLiBBbHNvIGBESUJTX0xPYCBjYW4gYmUgZnV6emVkIG9uIGFueSBhcmNoaXRlY3R1cmUuIFNvIGxldCdzIGZvY3VzIG9uIGBESUJTYCBhbmQgYERJQlNfTE9gIGJlY2F1c2UgdGhvc2UgY2FuIGJlIGZ1enplZCBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMsIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdWNoIGFzIGBkaWJzX2Rldl9hbGxvY2AsIGFyZSBhY3R1YWxseSBjYWxsZWQgaW4gYSBmdXp6YWJsZSB3YXkuIEkgc2VlIHRoYXQgYGRpYnNfZGV2X2FsbG9jYCBpcyBjYWxsZWQgZWl0aGVyIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgUENJIHByb2JlLCB3aGljaCBhcmUgYm90aCB0cmlnZ2VyYWJsZSBieSBTeXprYWxsZXIgdGhyb3VnaCBpdHMgbW9kdWxlIGxvYWRpbmcgb3IgUENJIHByb2JpbmcgY2FwYWJpbGl0aWVzIChsaWtlIGBzeXpfcGNpX3ZwY2lfaW5qZWN0YCkuIENydWNpYWxseSwgdGhlIGJ1ZyBpdHNlbGYgaXMgYSBmdW5jdGlvbmFsIGJ1Zywgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbG9jay4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgaXNzdWUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHRocm91Z2ggU3l6a2FsbGVyJ3MgZXhpc3RpbmcgZmVhdHVyZXMsIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEkgbG9va2VkIGF0IGZ1bmN0aW9ucyBsaWtlIGBkaWJzX3JlZ2lzdGVyX2NsaWVudGAsIGBkaWJzX3VucmVnaXN0ZXJfY2xpZW50YCwgYW5kIGBkaWJzX2Rldl9kZWxgLCBidXQgdGhlIHBhdGNoIG1haW5seSB0b3VjaGVzIGBkaWJzX2Rldl9hbGxvY2AgYW5kIGBkaWJzX2Rldl9hZGRgLiBJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgZm9yIGJvdGguIGBkaWJzX2Rldl9hbGxvY2AgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgYGRpYnNfZGV2YC4gYGRpYnNfZGV2X2FkZGAgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYWxsb2NhdGluZyBhbiBhcnJheSBhbmQgYWRkaW5nIHRoZSBkZXZpY2UgdG8gdGhlIHN5c3RlbS4gU2luY2UgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGJ1Z2ZpeCBhbmQgYXJlIGZ1bmN0aW9uYWwsIEknbSBjZXJ0YWluIHRoYXQgdGhlc2UgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gU28sIGBGb2N1c1N5bWJvbHNgOiBgZGlic19kZXZfYWxsb2NgLCBgZGlic19kZXZfYWRkYC5cblxuSSdtIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGUgYERJQlNgIGFuZCBgRElCU19MT2AgdG8gYWN0aXZhdGUgdGhlIGZlYXR1cmUgdW5kZXIgdGVzdC5cblxuTm93LCBhbiBpbnRlcmVzdGluZyB0aG91Z2h0OiBzaG91bGQgSSBhbHNvIGluY2x1ZGUgYFNNQ2AgaW4gYEVuYWJsZUNvbmZpZ3NgPyBgU01DYCBpcyBhICpjbGllbnQqIG9mIERJQlMuIFRoZSBgZGlic19kZXZfYWRkYCBmdW5jdGlvbiBoYXMgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCByZWdpc3RlcmVkIGNsaWVudHMuIElmIEkgZW5hYmxlIGBTTUNgLCB3aGljaCBpcyBhIERJQlMgY2xpZW50LCB0aGF0IGxvb3AgYmVjb21lcyBtb3JlIGludGVyZXN0aW5nLiBFbmFibGluZyBgU01DYCBtZWFucyBhIGNsaWVudCB3aWxsIGJlIHJlZ2lzdGVyZWQuIFRoaXMgcmVnaXN0cmF0aW9uIG1pZ2h0IHRyaWdnZXIgdGhlIHNwZWNpZmljIGV4ZWN1dGlvbiBwYXRoIHdpdGhpbiBgZGlic19kZXZfYWRkYCB3aGVyZSB0aGUgYnVnIGlzIHByZXNlbnQuIFNvLCBhZGRpbmcgYFNNQ2Agc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgU01DYCdzIGRlcGVuZGVuY2llcyBhcmUgY292ZXJlZC4gYFNNQ2AgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIGBJTkVUYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgc28gSSdtIGNvdmVyZWQgdGhlcmUuIGBJTkZJTklCQU5EYCBpcyB1c3VhbGx5IGVuYWJsZWQgdG9vLCBidXQgSSdsbCBhZGQgaXQgdG8gbWFrZSBzdXJlLiBTbywgdG8gY292ZXIgYWxsIGRlcGVuZGVuY2llcywgSSB3aWxsIGluY2x1ZGUgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgIGluIGBFbmFibGVDb25maWdzYC5cblxuRmluYWxseSwgYSBxdWljayByZXZpZXcgb2YgdGhlIHBhdGNoIGFnYWluLiBJdCBpbml0aWFsaXplcyB0aGUgc3BpbmxvY2sgYGRpYnMtXHUwMDNlbG9ja2AuIFRoaXMgY29uZmlybXMgaXQncyBhIGZ1bmN0aW9uYWwgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBzcGlubG9jayBpbml0aWFsaXphdGlvbi4gSXQncyBzYWZlIHRvIGZ1enogdGhpcy5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzU2LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mjo0MS4yMTQyMzg1MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDE4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2Rldl9hbGxvY1wiLFxuICAgIFwiZGlic19kZXZfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZGlicy1cXHUwMDNlbG9ja2Agc3BpbmxvY2sgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBsb2NrIGNvdWxkIGJlIHVzZWQgdW5pbml0aWFsaXplZCBpZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIG9yIGEgY2xlYW51cCBwYXRoIGlzIHRha2VuIGJlZm9yZSBgZGlic19kZXZfYWRkYCBpcyBjYWxsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgY29yZSBESUJTIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2Rldl9hbGxvY1wiLFxuICAgIFwiZGlic19kZXZfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZGlicy1cXHUwMDNlbG9ja2Agc3BpbmxvY2sgZnJvbSBgZGlic19kZXZfYWRkYCB0byBgZGlic19kZXZfYWxsb2NgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBsb2NrIGNvdWxkIGJlIHVzZWQgdW5pbml0aWFsaXplZCBpZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIG9yIGEgY2xlYW51cCBwYXRoIGlzIHRha2VuIGJlZm9yZSBgZGlic19kZXZfYWRkYCBpcyBjYWxsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgY29yZSBESUJTIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowcxgd4[1] Phase: Succeeded StartedAt: 2026-08-01 02:52:52 +0000 UTC FinishedAt: 2026-08-01 02:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 02:52:52 +0000 UTC FinishedAt: 2026-08-01 02:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2] Phase: Succeeded StartedAt: 2026-08-01 02:52:52 +0000 UTC FinishedAt: 2026-08-01 04:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 02:52:52 +0000 UTC FinishedAt: 2026-08-01 04:25:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 02:52:52 +0000 UTC FinishedAt: 2026-08-01 02:53:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 02:52:52 +0000 UTC FinishedAt: 2026-08-01 02:52:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxgd4/series-workflowcxgd4-convert-artifact-3545746654/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 02:53:02 +0000 UTC FinishedAt: 2026-08-01 03:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 02:53:02 +0000 UTC FinishedAt: 2026-08-01 03:13:33 +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:*53d8d4f7-1ce8-42f1-96cc-e5f80e5c7146,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-workflowcxgd4/series-workflowcxgd4-convert-artifact-3545746654/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": "b714be2b-843e-454e-bc99-d138ee8d8d95", "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-workflowcxgd4/series-workflowcxgd4-build-action-2832461252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 02:53:02 +0000 UTC FinishedAt: 2026-08-01 03:13:10 +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:*53d8d4f7-1ce8-42f1-96cc-e5f80e5c7146,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-workflowcxgd4/series-workflowcxgd4-convert-artifact-3545746654/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": "b714be2b-843e-454e-bc99-d138ee8d8d95", "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-workflowcxgd4/series-workflowcxgd4-build-action-2832461252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 03:13:33 +0000 UTC FinishedAt: 2026-08-01 03:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 03:13:33 +0000 UTC FinishedAt: 2026-08-01 03:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 03:13:33 +0000 UTC FinishedAt: 2026-08-01 03:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 03:13:33 +0000 UTC FinishedAt: 2026-08-01 03:13:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxgd4/series-workflowcxgd4-convert-artifact-1509265041/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 03:13:57 +0000 UTC FinishedAt: 2026-08-01 03:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 03:13:57 +0000 UTC FinishedAt: 2026-08-01 03:15:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b714be2b-843e-454e-bc99-d138ee8d8d95,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-workflowcxgd4/series-workflowcxgd4-build-action-2832461252/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-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 03:16:07 +0000 UTC FinishedAt: 2026-08-01 03:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 03:16:07 +0000 UTC FinishedAt: 2026-08-01 03:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 03:16:07 +0000 UTC FinishedAt: 2026-08-01 03:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 03:16:07 +0000 UTC FinishedAt: 2026-08-01 03:34:07 +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:*53d8d4f7-1ce8-42f1-96cc-e5f80e5c7146,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-workflowcxgd4/series-workflowcxgd4-convert-artifact-1509265041/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": "d2a4648a-120b-43cc-8a26-2ec5aceda41f", "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-workflowcxgd4/series-workflowcxgd4-build-action-269254237/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 03:16:07 +0000 UTC FinishedAt: 2026-08-01 03:33:57 +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:*53d8d4f7-1ce8-42f1-96cc-e5f80e5c7146,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-workflowcxgd4/series-workflowcxgd4-convert-artifact-1509265041/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": "d2a4648a-120b-43cc-8a26-2ec5aceda41f", "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-workflowcxgd4/series-workflowcxgd4-build-action-269254237/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 03:34:07 +0000 UTC FinishedAt: 2026-08-01 03:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 03:34:07 +0000 UTC FinishedAt: 2026-08-01 03:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 03:34:07 +0000 UTC FinishedAt: 2026-08-01 03:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 03:34:07 +0000 UTC FinishedAt: 2026-08-01 03:35:51 +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:*d2a4648a-120b-43cc-8a26-2ec5aceda41f,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-workflowcxgd4/series-workflowcxgd4-build-action-269254237/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-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 04:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 04:25:08 +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":["dibs_dev_alloc","dibs_dev_add"],"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:*b714be2b-843e-454e-bc99-d138ee8d8d95,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2a4648a-120b-43cc-8a26-2ec5aceda41f,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-workflowcxgd4/series-workflowcxgd4-build-action-2832461252/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-workflowcxgd4/series-workflowcxgd4-build-action-269254237/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 03:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 03:36:08 +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":["dibs_dev_alloc","dibs_dev_add"],"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-workflowcxgd4/series-workflowcxgd4-convert-artifact-2500095942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 03:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 03:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 03:36:01 +0000 UTC FinishedAt: 2026-08-01 03:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 03:36:11 +0000 UTC FinishedAt: 2026-08-01 04:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxgd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_dev_alloc","dibs_dev_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"fbcae62b-40ac-470a-8d1a-6174faa8802f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 03:36:11 +0000 UTC FinishedAt: 2026-08-01 04:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b714be2b-843e-454e-bc99-d138ee8d8d95,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2a4648a-120b-43cc-8a26-2ec5aceda41f,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-workflowcxgd4/series-workflowcxgd4-build-action-2832461252/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-workflowcxgd4/series-workflowcxgd4-build-action-269254237/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-workflowcxgd4/series-workflowcxgd4-convert-artifact-2500095942/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,}