Name: series-workflowkkh8m Phase: Succeeded StartedAt: 2026-07-07 23:05:28 +0000 UTC FinishedAt: 2026-07-08 03:32:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[0] Phase: Succeeded StartedAt: 2026-07-07 23:05:28 +0000 UTC FinishedAt: 2026-07-07 23:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 23:05:28 +0000 UTC FinishedAt: 2026-07-07 23:24:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "36933561-6c0f-41f5-9b54-8542fd66184f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_free_huge_pmd", "madvise_cold_or_pageout_pte_range", "queue_folios_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTlkMDNhYWY3NzdjYzJiZjVlMzY5ZGFkMTY1YzY0Mzg0M2Y2YzRiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjM6MjE6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi4wMTc4M2QwMTVhZmI0OSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMjk2LDYgJiM0MzsyMjk2LDkgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpZiAoaXNfaHVnZV96ZXJvX3BtZChvcmlnX3BtZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4gXHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggOTI5MmY2MGIxOWFhN2MuLjg3MGJlMzk4YzZmMzc0IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0zODQsNiAmIzQzOzM4NCw5IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdG9yaWdfcG1kID0gKnBtZDtcbiYjNDM7XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuJiM0MztcbiBcdFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKVxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggOTE0ZjgxODYzZGI1YTYuLmVkYTgxNzUzOWM3N2VhIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtNjU5LDYgJiM0Mzs2NTksOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkpXG4mIzQzO1x0XHRyZXR1cm47XG4gXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxOWQwM2FhZjc3N2NjMmJmNWUzNjlkYWQxNjVjNjQzODQzZjZjNGI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMzoyMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi4wMTc4M2QwMTVhZmI0OSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yMjk2LDYgJiM0MzsyMjk2LDkgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkgewogCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7CiAJCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IDkyOTJmNjBiMTlhYTdjLi44NzBiZTM5OGM2ZjM3NCAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtMzg0LDYgJiM0MzszODQsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCQkJcmV0dXJuIDA7CiAKIAkJb3JpZ19wbWQgPSAqcG1kOwomIzQzOwkJaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpCiYjNDM7CQkJZ290byBodWdlX3VubG9jazsKJiM0MzsKIAkJaWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKQogCQkJZ290byBodWdlX3VubG9jazsKIApkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA5MTRmODE4NjNkYjVhNi4uZWRhODE3NTM5Yzc3ZWEgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jCkBAIC02NTksNiAmIzQzOzY1OSw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiAJCXFwLSZndDtucl9mYWlsZWQmIzQzOyYjNDM7OwogCQlyZXR1cm47CiAJfQomIzQzOwlpZiAodW5saWtlbHkocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSkKJiM0MzsJCXJldHVybjsKIAlmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTsKIAlpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkgewogCQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZGRpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpYCBjaGVja3MsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgY2hlY2tzIGhhdmUgYmVlbiBhZGRlZCBpbiB0aHJlZSBrZXkgYXJlYXM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaW4gYG1tL21hZHZpc2UuY2AsIGFuZCBgcXVldWVfZm9saW9zX3BtZGAgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4KCkZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiAqd2hhdCogaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpYD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIGRlZmluaXRpb24gb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgaXQmIzM5O3MgZW5hYmxlZC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byB0ZWxsIHVzLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHJlbGV2YW50IENPTkZJRyBvcHRpb25zIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQgb24gaXRzIHZhbGlkaXR5IGFuZCBpbXBhY3QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk0LSAqIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEwLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyODA9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMjk4LVxubW0vaHVnZV9tZW1vcnkuYzoyMjk5Olx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXG5tbS9odWdlX21lbW9yeS5jLTIzMDAtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzAzND1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxMTYtXHRcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MzExNzpcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTMxMTgtXHRcdHNvZnRsZWFmX3QgZW50cnk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMjU3LVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjMyNTg6XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvbGRfcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMjU5LVx0XHRwdGVfdCBlbnRyeTtcbi0tXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTM4Ni1cdFx0b3JpZ19wbWQgPSAqcG1kO1xubW0vbWFkdmlzZS5jOjM4NzpcdFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXG5tbS9tYWR2aXNlLmMtMzg4LVx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4tLVxubW0vbWVtb3J5LmM9NjM5Nz1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy02NDcwLVx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudCh2bWYub3JpZ19wbWQpKSkge1xubW0vbWVtb3J5LmM6NjQ3MTpcdFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSh2bWYub3JpZ19wbWQpKVxubW0vbWVtb3J5LmMtNjQ3Mi1cdFx0XHRyZXR1cm4gZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoXHUwMDI2dm1mKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz02NTM9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9tZW1wb2xpY3kuYy02NjEtXHR9XG5tbS9tZW1wb2xpY3kuYzo2NjI6XHRpZiAodW5saWtlbHkocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSlcbm1tL21lbXBvbGljeS5jLTY2My1cdFx0cmV0dXJuO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nj1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXHRcdCAgICAocG1kX3RyYW5zX2h1Z2UocG1kZSkgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKSB8fFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjU0Olx0XHQgICAgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU1LVx0XHRcdHB2bXctXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXHUwMDNlcG1kKTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjUtXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI2NjpcdFx0XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY3LVx0XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGFjdGl2ZS4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBJIGNhbiYjMzk7dCBxdWl0ZSByZWNhbGwgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGVuYWJsZSBpdC4gVG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHksIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBwcmVwcm9jZXNzb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaXRzIGVuYWJsaW5nIGNvbmRpdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjb25maWcgb3B0aW9ucyAob3IsIGF0IGxlYXN0LCB0aGUgaW5jbHVkZS9kZXBlbmRlbmN5IHN0cnVjdHVyZSksIHRoYXQgZ292ZXJuIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIGZpbGUgd2lsbCBoYXZlIHRoZSBhbnN3ZXIsIG9yIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXG4gNTkxOlx0XG4gNTkyOlx0LyoqXG4gNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiA2MTM6XHRcdHJldHVybiBmYWxzZTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXG4gNjE3Olx0XG4gNjE4Olx0LyoqXG4gNjE5Olx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgZGVwZW5kcyBvbiBib3RoIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYC4gTm93LCBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB1c3VhbGx5IHByZXR0eSBzdHJhaWdodGZvcndhcmQsIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBCdXQsIGBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgLi4uIHRoYXQgb25lIHJpbmdzIGEgYmVsbCBhcyBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyB1c2VyLWNvbmZpZ3VyYWJsZSwgb3IgaWYgaXQmIzM5O3Mgc29tZXRoaW5nIGJha2VkIGluIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgaG93IEkgYXBwcm9hY2ggdGhpcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLiBJcyBpdCBhIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIHRoYXQmIzM5O3MgYXV0b21hdGljYWxseSBzZXQgYmFzZWQgb24gdGhlIGBBUkNIYCBzZXR0aW5nPyBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgbW92aW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzAzPWNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwNS1cbm1tL0tjb25maWc6NzA2OmNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xubW0vS2NvbmZpZy03MDctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGEgQm9vbGVhbiBGbGFnKioKCk9rYXksIHNvIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gYSBoaWRkZW4gYm9vbGVhbiB2YXJpYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgcmVhZGluZyBvciB3cml0aW5nIHRvIHRoaXMgZmxhZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB0aGVuIHNlZSB3aGF0JiMzOTtzIGFmZmVjdGluZyBpdHMgdmFsdWUuIEZpbmRpbmcgdGhlIHBvaW50cyB3aGVyZSB0aGUgYm9vbGVhbiBpcyBhY3R1YWxseSBzZWxlY3RlZCAob3Igc2V0KSBpcyB0aGUgbmV4dCB2aXRhbCBwaWVjZSBvZiB0aGlzIHB1enpsZTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQmIzM5O3MgZHJpdmluZyBpdHMgc3RhdGUgdHJhbnNpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTktXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9hcm02NC9LY29uZmlnOjIwOlx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjEtXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1Olx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE2LVx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTEwOT1jb25maWcgUFBDX1RIUFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNC0gICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlOjExNTogICAgICAgc2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTYtXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0yNC1cdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyXG5hcmNoL3Jpc2N2L0tjb25maWc6MjU6XHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODQtXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9zMzkwL0tjb25maWc6ODU6XHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvczM5MC9LY29uZmlnLTg2LVx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy03Mi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbmFyY2gveDg2L0tjb25maWc6NzM6XHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC94ODYvS2NvbmZpZy03NC1cdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcdGlmIEFDUElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgYSBrZXJuZWwgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBNRCBTb2Z0bGVhdmVzIG9uIHg4Nl82NCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBBUkNIX0hBU19QTURfU09GVExFQVZFU2AgaW50ZXJhY3RzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb24geDg2XzY0LiBJdCBsb29rcyBsaWtlIHRoZSBrZXJuZWwgc2V0cyBpdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBkZXBlbmRlbmN5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBaT05FX0RFVklDRWAgaGVyZS4gSSByZWNhbGwgaXQgaXMgbmVlZGVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBgWk9ORV9ERVZJQ0VgIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IHpvbmUgYWN0dWFsbHkgKmRvZXMqIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRGV2aWNlIFByaXZhdGUgUE1EIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYFpPTkVfREVWSUNFYCB0aGluZyBpcyBhIHVzZXItY29uZmlndXJhYmxlIG9wdGlvbi4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIGBxdWV1ZV9mb2xpb3NfcG1kYC4gQWxsIG9mIHRoZXNlIGFyZSBlbnRyeSBwb2ludHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYG1hZHZpc2VgLCBgbWJpbmRgLCBgc2V0X21lbXBvbGljeWAsIGFuZCBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgaW50ZW5kZWQgdXNlIGNhc2UgaGVyZT8KClRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhZGRpbmcgYSBjaGVjayBmb3IgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIFRoaXMgdGVsbHMgbWUgdGhlIGdvYWwgaXMgdG8gc2tpcCBhbnkgcHJvY2Vzc2luZyB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW50cmllcyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgbWFya2VkIGFzICYjMzQ7ZGV2aWNlIHByaXZhdGUmIzM0Oy4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJiMzOTt0IHdhbnQgdGhlc2UgZnVuY3Rpb25zLCB3aGljaCBwcmVzdW1hYmx5IGhhbmRsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltLCBpbnRlcmZlcmluZyB3aXRoIG1lbW9yeSB0aGF0JiMzOTtzIGRlZGljYXRlZCB0byBkZXZpY2UgYWNjZXNzLiBXZSYjMzk7cmUga2VlcGluZyBvdXIgaGFuZHMgb2ZmIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGBaT05FX0RFVklDRWAsIGFuZCBsZWF2aW5nIHRoZSBkZXZpY2UgaW4gY29udHJvbCBvZiBpdHMgZGF0YS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgY2hlY2sgaW50ZWdyYXRlcyBpbnRvIGl0cyBleGlzdGluZyBsb2dpYyBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzk7ZnJlZWluZyYjMzk7IG1lYW5zIGluIHRoaXMgY29udGV4dCB3aGVuIGl0IGlzIHNraXBwaW5nIHRoZSBwcm9jZXNzaW5nIGZvciBkZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgaXMgc29tZSBmb3JtIG9mIG9wdGltaXphdGlvbiwgb3IgYXZvaWRpbmcgYW4gZXJyb3IgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHRib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjIyODE6XHRcdFx0cG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpXG4yMjgyOlx0e1xuMjI4MzpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuMjI4NDpcdFx0cG1kX3Qgb3JpZ19wbWQ7XG4yMjg1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMjI4NjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0bGItXHUwMDNlbW07XG4yMjg3Olx0XHRib29sIHJldCA9IGZhbHNlO1xuMjI4ODpcdFxuMjI4OTpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XG4yMjkwOlx0XG4yMjkxOlx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbjIyOTI6XHRcdGlmICghcHRsKVxuMjI5MzpcdFx0XHRnb3RvIG91dF91bmxvY2tlZDtcbjIyOTQ6XHRcbjIyOTU6XHRcdG9yaWdfcG1kID0gKnBtZDtcbjIyOTY6XHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbjIyOTc6XHRcdFx0Z290byBvdXQ7XG4yMjk4Olx0XG4yMjk5Olx0XHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcbjIzMDA6XHRcdFx0Z290byBvdXQ7XG4yMzAxOlx0XG4yMzAyOlx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbjIzMDM6XHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4yMzA0Olx0XHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4yMzA1Olx0XHRcdGdvdG8gb3V0O1xuMjMwNjpcdFx0fVxuMjMwNzpcdFxuMjMwODpcdFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xuMjMwOTpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9tYWR2aXNlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBhZ2UgdGFibGUgZW50cmllcyB3aGVuIGBNQURWX0NPTERgIG9yIHBvdGVudGlhbGx5IGBNQURWX1BBR0VPVVRgIGlzIGludm9sdmVkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBmaW5lciBwb2ludHM6IHdoYXQmIzM5O3MgdGhlIGV4YWN0IGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIGhvdyBhcmUgZGlydHkgcGFnZXMgaGFuZGxlZCwgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0aGlzIHByb2Nlc3M/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGp1bXAgb3V0IGZyb20gYSBxdWljayByZXZpZXc/IEkgd2FudCB0byB0aGluayB0aHJvdWdoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgb3B0aW1pemF0aW9ucyBJIHNob3VsZCBrZWVwIGluIG1pbmQgZm9yIHJlbGF0ZWQgY29kZS4gTXkgZ29hbCBpcyB0byBnYWluIGNsYXJpdHkgb24gdGhlIGludGVuZGVkIG9wZXJhdGlvbiBzbyBJIGNhbiBjb25zaWRlciBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBsaW1pdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIDM3MTpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDM3MjpcdFxuIDM3MzpcdFx0cGFnZW91dF9hbm9uX29ubHlfZmlsdGVyID0gcGFnZW91dCBcdTAwMjZcdTAwMjYgIXZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjZcbiAzNzQ6XHRcdFx0XHRcdFx0IWNhbl9kb19maWxlX3BhZ2VvdXQodm1hKTtcbiAzNzU6XHRcbiAzNzY6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gMzc3Olx0XHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbiAzNzg6XHRcdFx0cG1kX3Qgb3JpZ19wbWQ7XG4gMzc5Olx0XHRcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIDM4MDpcdFxuIDM4MTpcdFx0XHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcbiAzODI6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4gMzgzOlx0XHRcdGlmICghcHRsKVxuIDM4NDpcdFx0XHRcdHJldHVybiAwO1xuIDM4NTpcdFxuIDM4NjpcdFx0XHRvcmlnX3BtZCA9ICpwbWQ7XG4gMzg3Olx0XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuIDM4ODpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gMzg5Olx0XG4gMzkwOlx0XHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiAzOTE6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDM5MjpcdFxuIDM5MzpcdFx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiAzOTQ6XHRcdFx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbiAzOTU6XHRcdFx0XHRcdFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbiAzOTY6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDM5NzpcdFx0XHR9XG4gMzk4Olx0XG4gMzk5Olx0XHRcdGZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpbiBgbW0vbWVtcG9saWN5LmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZm9saW8gcXVldWluZyB3b3JrcywgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gdGhlIGBwbWRgIGxldmVsLiBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSYjMzk7cyBhIHJlYXNvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgYmVpbmcgZmxhZ2dlZC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGluIGBtbS9tZW1wb2xpY3kuY2AsIEkmIzM5O20gZ29pbmcgdG8gYXNzdW1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gbWVtb3J5IHBvbGljaWVzLCB3aGljaCBtZWFucyBJIHNob3VsZCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIE5VTUEsIG1pZ3JhdGlvbiwgYW5kIGFsbG9jYXRpb24gZmxhZ3MgYXQgdGhpcyBwb2ludC4gSSBuZWVkIHRvIGRldGVybWluZTogV2hhdCYjMzk7cyB0aGUgc3BlY2lmaWMgcm9sZSBvZiBgcXVldWVfZm9saW9zX3BtZGAgaW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgcG9saWNpZXM/IElzIHRoaXMgZnVuY3Rpb24gaW52b2x2ZWQgaW4gdGhlIGFjdHVhbCBxdWV1aW5nIG9mIGZvbGlvcyBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgYmFzZWQgb24gdGhlIHNldCBwb2xpY3k/IE9yIGlzIGl0IG1vcmUgb2YgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBlbHNld2hlcmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGludHJvZHVjZSwgcGFydGljdWxhcmx5IHdpdGhpbiBhIG11bHRpLXRocmVhZGVkIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGNvbnRleHQ/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIHRoZW4gdHJhY2UgaXRzIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJldHVybiBub2RlX2lzc2V0KG5pZCwgKnFwLVx1MDAzZW5tYXNrKSA9PSAhKGZsYWdzIFx1MDAyNiBNUE9MX01GX0lOVkVSVCk7XG4gNjUxOlx0fVxuIDY1MjpcdFxuIDY1MzpcdHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNjU0Olx0e1xuIDY1NTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA2NTY6XHRcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNjU3Olx0XG4gNjU4Olx0XHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbiA2NTk6XHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiA2NjA6XHRcdFx0cmV0dXJuO1xuIDY2MTpcdFx0fVxuIDY2MjpcdFx0aWYgKHVubGlrZWx5KHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkpXG4gNjYzOlx0XHRcdHJldHVybjtcbiA2NjQ6XHRcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuIDY2NTpcdFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiA2NjY6XHRcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4gNjY3Olx0XHRcdHJldHVybjtcbiA2Njg6XHRcdH1cbiA2Njk6XHRcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiA2NzA6XHRcdFx0cmV0dXJuO1xuIDY3MTpcdFx0aWYgKCEocXAtXHUwMDNlZmxhZ3MgXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcbiA2NzI6XHRcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cdTAwM2V2bWEpIHx8XG4gNjczOlx0XHQgICAgIW1pZ3JhdGVfZm9saW9fYWRkKGZvbGlvLCBxcC1cdTAwM2VwYWdlbGlzdCwgcXAtXHUwMDNlZmxhZ3MpKVxuIDY3NDpcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIDY3NTpcdH1cbiA2NzY6XHRcbiA2Nzc6XHQvKlxuIDY3ODpcdCAqIFNjYW4gdGhyb3VnaCBmb2xpb3MsIGNoZWNraW5nIGlmIHRoZXkgc2F0aXNmeSB0aGUgcmVxdWlyZWQgY29uZGl0aW9ucyxcbiA2Nzk6XHQgKiBtb3ZpbmcgdGhlbSBmcm9tIExSVSB0byBsb2NhbCBwYWdlbGlzdCBmb3IgbWlncmF0aW9uIGlmIHRoZXkgZG8gKG9yIG5vdCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBNRCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyBob3cgYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBvcGVyYXRpb25zIGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcy4gVGhpcyBpcyBnb29kOyBza2lwcGluZyB0aGVzZSBlbnRyaWVzIGluIGNlcnRhaW4gc2l0dWF0aW9ucyBpcyBkZWZpbml0ZWx5IGEgcHJhY3RpY2FsLCByZWFjaGFibGUgb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gYmUgZnVuY3Rpb25hbC4gVGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgYXQgcGxheSBoZXJlIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgWk9ORV9ERVZJQ0VgLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIGBxdWV1ZV9mb2xpb3NfcG1kYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHBhdGNoIGludGVyYWN0cyB3aXRoIHRoZXNlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0LgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBgWk9ORV9ERVZJQ0VgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gT3IsIGlzIHRoaXMgZGVwZW5kZW50IG9uIGFub3RoZXIgY29uZmlnLCBuYW1lbHkgYERFVklDRV9QUklWQVRFYD8gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI2ND1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjY2LVxubW0vS2NvbmZpZzoxMjY3OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjY4LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBvZiBERVZJQ0VfUFJJVkFURSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIHRpZWQgdG8gYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyBpbmZsdWVuY2UuIFdoYXQgY29tcG9uZW50cywgbW9kdWxlcywgb3Igb3RoZXIgcGllY2VzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdD8gSXMgaXQgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGNvbXByZWhlbmRpbmcgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBlYXNpbHkuIEl0JiMzOTtzIHRpbWUgdG8gbWFwIG91dCB0aGlzIGRlcGVuZGVuY3kgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRGV2aWNlLVNwZWNpZmljIE1lbW9yeSBNYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgcmVsYXRlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYSBkZXZpY2UuIEZpcnN0IHRob3VnaHQsIHllYWgsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBERVZJQ0VfUFJJVkFURWAgKmRlcGVuZHMqIG9uIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgcmVtZW1iZXIgc2VlaW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIHVzZWQgc29tZXdoZXJlLCBhbmQgSSBzdXNwZWN0IHRoYXQmIzM5O3MgdGhlIGtleS4gTGV0IG1lIHNlZS4uLiB5ZXMhIEl0IHVzZXMgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYC4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGlzIGxpa2VseSBnb2luZyB0byBiZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXHRcdFx0XHRwcmVzZW50ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3MC0gKiB3cml0YWJsZSBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4MS0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4OC17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDY6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM3LVx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzOS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yNjYtXHRcdCAqL1xubW0vaG1tLmM6MjY3Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMjY4LVx0XHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0yNzAtXHRcdFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcbm1tL2htbS5jOjI3MTpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMjcyLVx0XHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMjg0LVxubW0vaG1tLmM6Mjg1Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMjg2LVx0XHRcdGdvdG8gZmF1bHQ7XG4tLVxubW0vaG1tLmM9MzM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYy0zNDUtXG5tbS9obW0uYzozNDY6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMzQ3LVx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTM1My1cbm1tL2htbS5jOjM1NDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTM1NS1cdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0zNzItXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbm1tL2htbS5jOjM3MzpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTM3NC1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MjctXHRcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxODI4Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyOS1cdFx0Lypcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MzItXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxODMzOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4MzQtXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1NTg9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU3OS1cdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNTgwOlx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MS1cdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwMzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTI3LVxubW0vaHVnZV9tZW1vcnkuYzozMTI4Olx0XHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzEyOS1cdFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4ODI9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5MTEtXG5tbS9odWdlX21lbW9yeS5jOjQ5MTI6XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDkxMy1cdFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XG4tLVxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtOTgzLVx0XHR9XG5tbS9tZW1vcnkuYzo5ODQ6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtOTg1LVx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmMtMTAwOC1cdFx0ICovXG5tbS9tZW1vcnkuYzoxMDA5Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vbWVtb3J5LmMtMTAxMC1cdFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xuLS1cbm1tL21lbW9yeS5jPTE3Mjg9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3MzctXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcbm1tL21lbW9yeS5jOjE3Mzg6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9tZW1vcnkuYy0xNzM5LVx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4tLVxubW0vbWVtb3J5LmM9NDc0Mj12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NzY4LVx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG5tbS9tZW1vcnkuYzo0NzY5Olx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtNDc3MC1cdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTY5LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzA6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cdFx0ICAgICEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxODI6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTE4My1cdFx0XHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTktXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzozMDA6XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMS1cdFx0XHRcdGdvdG8gbmV4dDtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTMzMy1cdFx0XHRcdFx0TUlHUkFURV9QRk5fTUlHUkFURTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzM0Olx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTMzNS1cdFx0XHRcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTIzNS1cdFx0XHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xubW0vbXByb3RlY3QuYzoyMzY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vbXByb3RlY3QuYy0yMzctXHRcdC8qXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxODQ6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIHx8XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03Mi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMwLVx0XHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMyLVx0XHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxuLS1cbm1tL3JtYXAuYz0yNDE0PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYwMi1cbm1tL3JtYXAuYzoyNjAzOlx0XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vcm1hcC5jLTI2MDQtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgIE1hY3JvKioKClJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgaGVhZGVyIGZpbGUgYW5kIHNlZSBob3cgdGhpcyBtYWNybyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBrbm93IHRoaXMgY29kZSwgc28gSSYjMzk7bGwgd2FudCB0byBjaGVjayBhcm91bmQgbGluZSAyODcgb2YgdGhhdCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgZGVmaW5pdGlvbnMgbGlrZSB0aGlzIHdvdWxkIHNpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIHN1cmUgdGhlcmUmIzM5O3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBiZWhpbmQgdGhpcyBtYWNyby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc1Olx0ICovXG4gMjc2Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjc3Olx0e1xuIDI3ODpcdFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xuIDI3OTpcdH1cbiAyODA6XHRcbiAyODE6XHQvKipcbiAyODI6XHQgKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG4gMjgzOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDI4NDpcdCAqXG4gMjg1Olx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXG4gMjg2Olx0ICovXG4gMjg3Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuIDI5MDpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbiAyOTE6XHRcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiAyOTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjkzOlx0XHRkZWZhdWx0OlxuIDI5NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjk1Olx0XHR9XG4gMjk2Olx0fVxuIDI5NzpcdFxuIDI5ODpcdC8qKlxuIDI5OTpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XG4gMzAwOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDMwMTpcdCAqXG4gMzAyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAzMDM6XHQgKi9cbiAzMDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU4NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEVgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJdCYjMzk7cyBhIGtleSBjb25zdGFudCwgYW5kIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2guIEkmIzM5O2xsIHVzZSBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2wg4oCTIHByb2JhYmx5IGEgZ3JlcCBvciBzb21ldGhpbmcgc2ltaWxhciDigJMgYW5kIGxvb2sgZm9yIHRoZSBleGFjdCBzdHJpbmcsIHBheWluZyBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBJcyBpdCBhIGhlYWRlciBmaWxlPyBBIGNvbmZpZyBvcHRpb24/IEEgbWFjcm8gZGVmaW5pdGlvbj8gV2hlcmUgaXMgaXQgYmVpbmcgKnVzZWQqPyBUaGUgY29udGV4dCB3aWxsIGJlIGNyaXRpY2FsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBwcm9wYWdhdGlvbiBhbmQgYW55IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggaXQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBpbXBhY3QuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTk9ZW51bSBzb2Z0bGVhZl90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yOC1cdFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQsXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyOTpcdFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFLFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAtXHRTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFLFxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTgyLVx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTgzOlx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODQtXHRjYXNlIFNXUF9ERVZJQ0VfUkVBRDpcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc4Olx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yODc9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg5LVx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjkwOlx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5MS1cdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYFNXUF9ERVZJQ0VfV1JJVEVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgc2ltcGxlOiBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFdlIG5lZWQgdG8gY2hlY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGBTV1BfREVWSUNFX1dSSVRFYCBmdW5jdGlvbi4gR2l2ZW4gb3VyIGtub3dsZWRnZSwgd2UgYm90aCBrbm93IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIGNvdWxkIGJlIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGEgZmlsZSB3cml0ZSwgYSBkcml2ZXIgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbnRpcmVseSBtb3JlIGNvbXBsZXguIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eSwgaXRzIGlucHV0cyBhbmQgb3V0cHV0cywgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NXUF9ERVZJQ0VfV1JJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTYwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODEtI2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTgyOlx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTgzLVx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mjk9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03Mi0jZGVmaW5lIFNXUF9ERVZJQ0VfTlVNIDNcbmluY2x1ZGUvbGludXgvc3dhcC5oOjczOiNkZWZpbmUgU1dQX0RFVklDRV9XUklURSAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0pXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NC0jZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzEpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQxPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV93cml0YWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE0Mi17XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNDM6XHRyZXR1cm4gc3dwX2VudHJ5KFNXUF9ERVZJQ0VfV1JJVEUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNDQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIFF1aWNrIERpYWdub3N0aWMgQ2hlY2sqKgoKUmlnaHQsIHNvIEkmIzM5O20gY2hhc2luZyBkb3duIGBTV1BfREVWSUNFX1dSSVRFYC4gSXQmIzM5O3MgbG9va2luZyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgY29uZGl0aW9uYWxseSwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIE5hdHVyYWxseSwgdGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhhdCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhpcyBidWlsZC4gTW9yZSBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gSSYjMzk7bGwganVtcCBvdmVyIHRvIHRoYXQgZmlsZSwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMTgxLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBodW50IGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBIb3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgY2x1ZSBhYm91dCB0aGUgY29uZmlnIGZsYWcmIzM5O3Mgc3RhdGUsIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX1NXQVA7XG4gMTcxOlx0XG4gMTcyOlx0XHRzd2l0Y2ggKHR5cGVfbnVtKSB7XG4gMTczOlx0I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbiAxNzQ6XHRcdGNhc2UgU1dQX01JR1JBVElPTl9SRUFEOlxuIDE3NTpcdFx0XHRyZXR1cm4gU09GVExFQUZfTUlHUkFUSU9OX1JFQUQ7XG4gMTc2Olx0XHRjYXNlIFNXUF9NSUdSQVRJT05fUkVBRF9FWENMVVNJVkU6XG4gMTc3Olx0XHRcdHJldHVybiBTT0ZUTEVBRl9NSUdSQVRJT05fUkVBRF9FWENMVVNJVkU7XG4gMTc4Olx0XHRjYXNlIFNXUF9NSUdSQVRJT05fV1JJVEU6XG4gMTc5Olx0XHRcdHJldHVybiBTT0ZUTEVBRl9NSUdSQVRJT05fV1JJVEU7XG4gMTgwOlx0I2VuZGlmXG4gMTgxOlx0I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuIDE4MjpcdFx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuIDE4MzpcdFx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG4gMTg0Olx0XHRjYXNlIFNXUF9ERVZJQ0VfUkVBRDpcbiAxODU6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ7XG4gMTg2Olx0XHRjYXNlIFNXUF9ERVZJQ0VfRVhDTFVTSVZFOlxuIDE4NzpcdFx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX0VYQ0xVU0lWRTtcbiAxODg6XHQjZW5kaWZcbiAxODk6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4gMTkwOlx0XHRjYXNlIFNXUF9IV1BPSVNPTjpcbiAxOTE6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX0hXUE9JU09OO1xuIDE5MjpcdCNlbmRpZlxuIDE5MzpcdFx0Y2FzZSBTV1BfUFRFX01BUktFUjpcbiAxOTQ6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX01BUktFUjtcbiAxOTU6XHRcdH1cbiAxOTY6XHRcbiAxOTc6XHRcdC8qIFVua25vd24gZW50cnkgdHlwZS4gKi9cbiAxOTg6XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiAxOTk6XHRcdHJldHVybiBTT0ZUTEVBRl9OT05FO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgRGV2aWNlIFByaXZhdGUgUGFnZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJiMzOTttIHNlZWluZy4gVG8gZ2V0IHRoZSBiZWhhdmlvciBJIG5lZWQsIHNwZWNpZmljYWxseSBhbGxvd2luZyBgc29mdGxlYWZfdHlwZWAgdG8gcmV0dXJuIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgb3IgYFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQURgLCBJIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBlbmFibGVkLiBJZiBpdCYjMzk7cyBub3QsIHRob3NlIHZhbHVlcyBhcmVuJiMzOTt0IGV2ZW4gYXZhaWxhYmxlLCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuIFNvLCB0aGF0JiMzOTtzIHRoZSBjb3JlIHJlcXVpcmVtZW50OiBgQ09ORklHX0RFVklDRV9QUklWQVRFYC4KCk5vdywgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXRzZWxmIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19aT05FX0RFVklDRWAuICBBbHNvLCB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24gaXMgb25seSBkZWZpbmVkIHRvIGNoZWNrIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaWYgYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCBhbmQgYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AgYXJlIHNldC4gVGhlcmVmb3JlLCB0aGlzIGJlY29tZXMgYSBoaWVyYXJjaHkgb2YgZGVwZW5kZW5jaWVzLgoKSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEhvd2V2ZXIsIHNpbmNlIGBERVZJQ0VfUFJJVkFURWAgKmRlcGVuZHMqIG9uIGBaT05FX0RFVklDRWAsIHRoYXQgbWVhbnMgYERFVklDRV9QUklWQVRFYCBlZmZlY3RpdmVseSBzdWJzdW1lcyBgWk9ORV9ERVZJQ0VgLiBTbyBJIGNhbiBlbGltaW5hdGUgYFpPTkVfREVWSUNFYCBhcyBhIGRpcmVjdCBuZWVkLiBGdXJ0aGVybW9yZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBuZWVkZWQgZm9yIGBBUkNIX0hBU19QTURfU09GVExFQVZFU2Agb24gbW9zdCBhcmNoaXRlY3R1cmVzLgoKU28sIGxldCYjMzk7cyBzaW1wbGlmeS4gIElzIGBERVZJQ0VfUFJJVkFURWAgc3VmZmljaWVudCBpbiBhbGwgY2FzZXM/IFllcywgaXQgYXBwZWFycyB0aGF0IGBERVZJQ0VfUFJJVkFURWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHRoZSBvbmx5IGNvbmZpZ3MgdGhhdCBJIG5lZWQuCgpGdW5jdGlvbmFsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBjaGFuZ2VzOgotIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgCi0gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAKLSBgcXVldWVfZm9saW9zX3BtZGAKClRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgd2hpY2ggc3VnZ2VzdHMgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgZm9jdXMgb24gZnV6emluZy4gV29ydGhGdXp6aW5nIHdpbGwgYmUgc2V0IHRvIHRydWUuCgpKdXN0IHRvIHJlY2FwIGFuZCBlbnN1cmUgSSYjMzk7bSBjbGVhciwgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdmVyaWZ5IGFyZToKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBERVZJQ0VfUFJJVkFURWAKCkFuZCB0aGUga2V5IHN5bWJvbHMgdG8gYmUgYXdhcmUgb2YgaW5jbHVkZToKKiAgIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgCiogICBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYAoqICAgYHF1ZXVlX2ZvbGlvc19wbWRgCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGFyZSByZWxhdGVkLgoKYFpPTkVfREVWSUNFYCBpcyBzZWxlY3RlZCBieSBgREVWSUNFX1BSSVZBVEVgLCBidXQgaXQmIzM5O3MgKmRlcGVuZGVkKiBvbiBieSBgREVWSUNFX1BSSVZBVEVgLCBzbyBJIG5lZWQgdG8gbGlzdCBib3RoIGBaT05FX0RFVklDRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuCgpDaGVja2luZyBgREVWSUNFX1BSSVZBVEVgIGFnYWluOiBJIGFtIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzg2CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgUmVsZXZhbnQgQ29kZSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0JiMzOTtzIGRlcGVuZGVuY3kgaGluZ2VzIG9uIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEltbWVkaWF0ZWx5LCBJIG5lZWQgdG8gbGlzdCBgWk9ORV9ERVZJQ0VgIGFuZCwgZ2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgREVWSUNFX1BSSVZBVEVgLiBJJiMzOTttIGFsc28gZmFpcmx5IGNlcnRhaW4gdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZXMgd2lsbCBiZSBpbXBvcnRhbnQgaGVyZSwgc28gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBuZWVkcyB0byBiZSBpbiB0aGUgbGlzdC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIGFib3V0IGl0cyBzY29wZS4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIGl0JiMzOTtzIHN0YXRpYy4gWWVzLCB0aGVyZSBpdCBpcywgdHVja2VkIGF3YXkgYXMgc3RhdGljIGluIGBtbS9tYWR2aXNlLmNgLiBHb29kLCB0aGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYXMgd2VsbDsgaXQmIzM5O3MgbGlrZWx5IHJlbGV2YW50IGdpdmVuIHRoZSBmb2N1cyBvbiBodWdlIHBhZ2VzLCBhbmQgdGhhdCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gRmluYWxseSwgSSYjMzk7bGwgY2hlY2sgb24gYHF1ZXVlX2ZvbGlvc19wbWRgLCB3aGljaCB3aWxsIGJlIHJlbGV2YW50IGFzIHdlbGwgYW5kIGlzIHN0YXRpYyBpbiBgbW0vbWVtcG9saWN5LmNgLgoKUmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB3aGF0IEkgbmVlZCB0byBwcm92aWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3F1ZXVlX2ZvbGlvc19wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjE6NTUuMzMzOTAyNjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2Mzk0ODUzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIxOjU1LjMzMzkxMjc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE3MjQ2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxOWQwM2FhZjc3N2NjMmJmNWUzNjlkYWQxNjVjNjQzODQzZjZjNGI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjM6MjE6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uMDE3ODNkMDE1YWZiNDkgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMjI5Niw2ICsyMjk2LDkgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4gXFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uODcwYmUzOThjNmYzNzQgMTAwNjQ0XFxuLS0tIGEvbW0vbWFkdmlzZS5jXFxuKysrIGIvbW0vbWFkdmlzZS5jXFxuQEAgLTM4NCw2ICszODQsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdG9yaWdfcG1kID0gKnBtZDtcXG4rXFx0XFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuK1xcbiBcXHRcXHRpZiAoaXNfaHVnZV96ZXJvX3BtZChvcmlnX3BtZCkpXFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXFxuaW5kZXggOTE0ZjgxODYzZGI1YTYuLmVkYTgxNzUzOWM3N2VhIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvbGljeS5jXFxuKysrIGIvbW0vbWVtcG9saWN5LmNcXG5AQCAtNjU5LDYgKzY1OSw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcdGlmICh1bmxpa2VseShwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xcbiBcXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xcbiBcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIxOjU2LjAwNzIyNjEyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ2OTY2MTQ4NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICAgIFwicXVldWVfZm9saW9zX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE5ZDAzYWFmNzc3Y2MyYmY1ZTM2OWRhZDE2NWM2NDM4NDNmNmM0YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIzOjIxOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi4wMTc4M2QwMTVhZmI0OSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMjk2LDYgKzIyOTYsOSBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiBcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uODcwYmUzOThjNmYzNzQgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTM4NCw2ICszODQsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRvcmlnX3BtZCA9ICpwbWQ7XG4rXHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuK1x0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4rXG4gXHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiBcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li5lZGE4MTc1MzljNzdlYSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY1OSw2ICs2NTksOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQrKztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1x0aWYgKHVubGlrZWx5KHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkpXG4rXHRcdHJldHVybjtcbiBcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuIFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiBcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMTo1Ni4wMDcyMzA0NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ0OTUyNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFkZGluZyBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KClgIGNoZWNrcywgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmU/IExldCdzIGJyZWFrIGl0IGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrcyBoYXZlIGJlZW4gYWRkZWQgaW4gdGhyZWUga2V5IGFyZWFzOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGluIGBtbS9tYWR2aXNlLmNgLCBhbmQgYHF1ZXVlX2ZvbGlvc19wbWRgIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiAqd2hhdCogaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpYD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIGRlZmluaXRpb24gb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgaXQncyBlbmFibGVkLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gdGVsbCB1cy4gVW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHJlbGV2YW50IENPTkZJRyBvcHRpb25zIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQgb24gaXRzIHZhbGlkaXR5IGFuZCBpbXBhY3QuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIxOjU5Ljk1MjE4NzAzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzUyMDUzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5NC0gKiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI5OC1cXG5tbS9odWdlX21lbW9yeS5jOjIyOTk6XFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXFxubW0vaHVnZV9tZW1vcnkuYy0yMzAwLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDM0PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTE2LVxcdFxcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMTc6XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMxMTgtXFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzI1Ny1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzozMjU4OlxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9sZF9wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjU5LVxcdFxcdHB0ZV90IGVudHJ5O1xcbi0tXFxubW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTM4Ni1cXHRcXHRvcmlnX3BtZCA9ICpwbWQ7XFxubW0vbWFkdmlzZS5jOjM4NzpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG5tbS9tYWR2aXNlLmMtMzg4LVxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz02Mzk3PXN0YXRpYyB2bV9mYXVsdF90IF9faGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtNjQ3MC1cXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHZtZi5vcmlnX3BtZCkpKSB7XFxubW0vbWVtb3J5LmM6NjQ3MTpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHZtZi5vcmlnX3BtZCkpXFxubW0vbWVtb3J5LmMtNjQ3Mi1cXHRcXHRcXHRyZXR1cm4gZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoXFx1MDAyNnZtZik7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz02NTM9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY2MS1cXHR9XFxubW0vbWVtcG9saWN5LmM6NjYyOlxcdGlmICh1bmxpa2VseShwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpKVxcbm1tL21lbXBvbGljeS5jLTY2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODY9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXFx0XFx0ICAgIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpIHx8XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjU0OlxcdFxcdCAgICBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU1LVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY1LVxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI2NjpcXHRcXHRcXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ny1cXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjowMi43MDQyNzU0ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkyOTkwMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgJ3MgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGFjdGl2ZS4gSXQncyBhIGtleSBmdW5jdGlvbiwgYnV0IEkgY2FuJ3QgcXVpdGUgcmVjYWxsIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24ga25vYnMgdGhhdCBlbmFibGUgaXQuIFRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LCBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgaXRzIGRlZmluaXRpb24gb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHJlbGV2YW50IHByZXByb2Nlc3NvciBtYWNyb3MgcmVsYXRlZCB0byBpdHMgZW5hYmxpbmcgY29uZGl0aW9ucy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZyBvcHRpb25zIChvciwgYXQgbGVhc3QsIHRoZSBpbmNsdWRlL2RlcGVuZGVuY3kgc3RydWN0dXJlKSwgdGhhdCBnb3Zlcm4gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCB1c2VkLiBIb3BlZnVsbHksIHRoaXMgZmlsZSB3aWxsIGhhdmUgdGhlIGFuc3dlciwgb3IgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjA1LjY5NzI2ODgxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUylcXG4gNTkxOlxcdFxcbiA1OTI6XFx0LyoqXFxuIDU5MzpcXHQgKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcXG4gNTk0OlxcdCAqIGVudHJ5LlxcbiA1OTU6XFx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cXG4gNTk2OlxcdCAqXFxuIDU5NzpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBNRCBjb250YWlucyBhIHN3YXAgZW50cnkgdGhhdCByZXByZXNlbnRzIGEgZGV2aWNlIHByaXZhdGVcXG4gNTk4OlxcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXFxuIDU5OTpcXHQgKiBzd2FwcGVkIG91dCBidXQgc3RpbGwgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGR1cmluZyB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50XFxuIDYwMDpcXHQgKiBvcGVyYXRpb25zLlxcbiA2MDE6XFx0ICpcXG4gNjAyOlxcdCAqIFJldHVybjogdHJ1ZSBpZiBQTUQgY29udGFpbnMgZGV2aWNlIHByaXZhdGUgZW50cnksIGZhbHNlIG90aGVyd2lzZVxcbiA2MDM6XFx0ICovXFxuIDYwNDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG4gNjA1OlxcdHtcXG4gNjA2OlxcdFxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG4gNjA3OlxcdH1cXG4gNjA4OlxcdFxcbiA2MDk6XFx0I2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgKi9cXG4gNjEwOlxcdFxcbiA2MTE6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYxMjpcXHR7XFxuIDYxMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdCNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxNzpcXHRcXG4gNjE4OlxcdC8qKlxcbiA2MTk6XFx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjA1LjY5NzM4MDc2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTcxMzg3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBkZXBlbmRzIG9uIGJvdGggYENPTkZJR19aT05FX0RFVklDRWAgYW5kIGBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgLiBOb3csIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIHVzdWFsbHkgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEJ1dCwgYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AuLi4gdGhhdCBvbmUgcmluZ3MgYSBiZWxsIGFzIHBvdGVudGlhbGx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgdXNlci1jb25maWd1cmFibGUsIG9yIGlmIGl0J3Mgc29tZXRoaW5nIGJha2VkIGluIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgaG93IEkgYXBwcm9hY2ggdGhpcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHNlZSBob3cgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZXMuIElzIGl0IGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgdGhhdCdzIGF1dG9tYXRpY2FsbHkgc2V0IGJhc2VkIG9uIHRoZSBgQVJDSGAgc2V0dGluZz8gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjowOC43MTQ1MjIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NDI2NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcwMz1jb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwNS1cXG5tbS9LY29uZmlnOjcwNjpjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5tbS9LY29uZmlnLTcwNy1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjExLjAzMjk2NzE2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzM0NDMwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgQm9vbGVhbiBGbGFnKipcblxuT2theSwgc28gSSd2ZSBzdHVtYmxlZCB1cG9uIGEgaGlkZGVuIGJvb2xlYW4gdmFyaWFibGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgYmVoYXZpb3IuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byB0aGlzIGZsYWcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB0aGVuIHNlZSB3aGF0J3MgYWZmZWN0aW5nIGl0cyB2YWx1ZS4gRmluZGluZyB0aGUgcG9pbnRzIHdoZXJlIHRoZSBib29sZWFuIGlzIGFjdHVhbGx5IHNlbGVjdGVkIChvciBzZXQpIGlzIHRoZSBuZXh0IHZpdGFsIHBpZWNlIG9mIHRoaXMgcHV6emxlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCdzIGRyaXZpbmcgaXRzIHN0YXRlIHRyYW5zaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MTMuNTY2NDEyNjkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQwNzM5ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOS1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL2FybTY0L0tjb25maWc6MjA6XFx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU6XFx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNi1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9MTA5PWNvbmZpZyBQUENfVEhQXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTQtICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6MTE1OiAgICAgICBzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTYtXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMjQtXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC9yaXNjdi9LY29uZmlnOjI1OlxcdHNlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFUyBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NC1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3MzOTAvS2NvbmZpZzo4NTpcXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL3MzOTAvS2NvbmZpZy04Ni1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTktcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03Mi1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiAoUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyKSBcXHUwMDI2XFx1MDAyNiAoWDg2XzY0IHx8IFg4Nl9QQUUpXFxuYXJjaC94ODYvS2NvbmZpZzo3MzpcXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC94ODYvS2NvbmZpZy03NC1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjoxNS45MDcxNjIwNDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2MzE0NDMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgYSBrZXJuZWwgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUE1EIFNvZnRsZWF2ZXMgb24geDg2XzY0KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBBUkNIX0hBU19QTURfU09GVExFQVZFU2AgaW50ZXJhY3RzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb24geDg2XzY0LiBJdCBsb29rcyBsaWtlIHRoZSBrZXJuZWwgc2V0cyBpdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIGRlcGVuZGVuY3kuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYFpPTkVfREVWSUNFYCBoZXJlLiBJIHJlY2FsbCBpdCBpcyBuZWVkZWQuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgYFpPTkVfREVWSUNFYCBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCB6b25lIGFjdHVhbGx5ICpkb2VzKiBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODMwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MTguODcwMzEwMTcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMzNjkwMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjIwLjkwNDAwOTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzI3MjgwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERldmljZSBQcml2YXRlIFBNRCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYFpPTkVfREVWSUNFYCB0aGluZyBpcyBhIHVzZXItY29uZmlndXJhYmxlIG9wdGlvbi4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIGBxdWV1ZV9mb2xpb3NfcG1kYC4gQWxsIG9mIHRoZXNlIGFyZSBlbnRyeSBwb2ludHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYG1hZHZpc2VgLCBgbWJpbmRgLCBgc2V0X21lbXBvbGljeWAsIGFuZCBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBoZXJlP1xuXG5UaGUgY3J1eCBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGEgY2hlY2sgZm9yIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGlzIHRlbGxzIG1lIHRoZSBnb2FsIGlzIHRvIHNraXAgYW55IHByb2Nlc3Npbmcgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggZW50cmllcyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgbWFya2VkIGFzIFwiZGV2aWNlIHByaXZhdGVcIi4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIHByZXN1bWFibHkgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHJlY2xhaW0sIGludGVyZmVyaW5nIHdpdGggbWVtb3J5IHRoYXQncyBkZWRpY2F0ZWQgdG8gZGV2aWNlIGFjY2Vzcy4gV2UncmUga2VlcGluZyBvdXIgaGFuZHMgb2ZmIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGBaT05FX0RFVklDRWAsIGFuZCBsZWF2aW5nIHRoZSBkZXZpY2UgaW4gY29udHJvbCBvZiBpdHMgZGF0YS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgZnVuY3Rpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNoZWNrIGludGVncmF0ZXMgaW50byBpdHMgZXhpc3RpbmcgbG9naWMgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAnZnJlZWluZycgbWVhbnMgaW4gdGhpcyBjb250ZXh0IHdoZW4gaXQgaXMgc2tpcHBpbmcgdGhlIHByb2Nlc3NpbmcgZm9yIGRldmljZS1wcml2YXRlIGVudHJpZXMuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBpcyBzb21lIGZvcm0gb2Ygb3B0aW1pemF0aW9uLCBvciBhdm9pZGluZyBhbiBlcnJvciBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MjUuMjM2NzQwNzY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODA6XFx0Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjI4MTpcXHRcXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4yMjgyOlxcdHtcXG4yMjgzOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4yMjg0OlxcdFxcdHBtZF90IG9yaWdfcG1kO1xcbjIyODU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yMjg2OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdGxiLVxcdTAwM2VtbTtcXG4yMjg3OlxcdFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuMjI4ODpcXHRcXG4yMjg5OlxcdFxcdHRsYl9jaGFuZ2VfcGFnZV9zaXplKHRsYiwgSFBBR0VfUE1EX1NJWkUpO1xcbjIyOTA6XFx0XFxuMjI5MTpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4yMjkyOlxcdFxcdGlmICghcHRsKVxcbjIyOTM6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrZWQ7XFxuMjI5NDpcXHRcXG4yMjk1OlxcdFxcdG9yaWdfcG1kID0gKnBtZDtcXG4yMjk2OlxcdFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4yMjk3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyOTg6XFx0XFxuMjI5OTpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG4yMzAwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIzMDE6XFx0XFxuMjMwMjpcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4yMzAzOlxcdFxcdFxcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxuMjMwNDpcXHRcXHRcXHRcXHRcXHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XFxuMjMwNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzA2OlxcdFxcdH1cXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xcbjIzMDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MjUuMjM3MDI1NTU3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjczMTM0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbW0vbWFkdmlzZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwYWdlIHRhYmxlIGVudHJpZXMgd2hlbiBgTUFEVl9DT0xEYCBvciBwb3RlbnRpYWxseSBgTUFEVl9QQUdFT1VUYCBpcyBpbnZvbHZlZC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBmaW5lciBwb2ludHM6IHdoYXQncyB0aGUgZXhhY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSBjYWNoZSwgaG93IGFyZSBkaXJ0eSBwYWdlcyBoYW5kbGVkLCBhbmQgd2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoaXMgcHJvY2Vzcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQganVtcCBvdXQgZnJvbSBhIHF1aWNrIHJldmlldz8gSSB3YW50IHRvIHRoaW5rIHRocm91Z2ggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBvcHRpbWl6YXRpb25zIEkgc2hvdWxkIGtlZXAgaW4gbWluZCBmb3IgcmVsYXRlZCBjb2RlLiBNeSBnb2FsIGlzIHRvIGdhaW4gY2xhcml0eSBvbiB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uIHNvIEkgY2FuIGNvbnNpZGVyIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGxpbWl0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjoyOS42NjQzNDE1MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNzA6XFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbiAzNzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0cGFnZW91dF9hbm9uX29ubHlfZmlsdGVyID0gcGFnZW91dCBcXHUwMDI2XFx1MDAyNiAhdm1hX2lzX2Fub255bW91cyh2bWEpIFxcdTAwMjZcXHUwMDI2XFxuIDM3NDpcXHRcXHRcXHRcXHRcXHRcXHQhY2FuX2RvX2ZpbGVfcGFnZW91dCh2bWEpO1xcbiAzNzU6XFx0XFxuIDM3NjpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDM3NzpcXHRcXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcXG4gMzc4OlxcdFxcdFxcdHBtZF90IG9yaWdfcG1kO1xcbiAzNzk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdFxcdHRsYl9jaGFuZ2VfcGFnZV9zaXplKHRsYiwgSFBBR0VfUE1EX1NJWkUpO1xcbiAzODI6XFx0XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuIDM4MzpcXHRcXHRcXHRpZiAoIXB0bClcXG4gMzg0OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRcXHRvcmlnX3BtZCA9ICpwbWQ7XFxuIDM4NzpcXHRcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG4gMzg4OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4gMzkxOlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdFxcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xcbiAzOTQ6XFx0XFx0XFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4gMzk1OlxcdFxcdFxcdFxcdFxcdFxcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XFxuIDM5NjpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiAzOTc6XFx0XFx0XFx0fVxcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjI5LjY2NDUwOTczNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5NDE1NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgcXVldWVfZm9saW9zX3BtZGAgaW4gYG1tL21lbXBvbGljeS5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZm9saW8gcXVldWluZyB3b3JrcywgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gdGhlIGBwbWRgIGxldmVsLiBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSdzIGEgcmVhc29uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBiZWluZyBmbGFnZ2VkLiBHaXZlbiB0aGF0IHRoaXMgaXMgaW4gYG1tL21lbXBvbGljeS5jYCwgSSdtIGdvaW5nIHRvIGFzc3VtZSBpdCdzIHJlbGF0ZWQgdG8gbWVtb3J5IHBvbGljaWVzLCB3aGljaCBtZWFucyBJIHNob3VsZCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIE5VTUEsIG1pZ3JhdGlvbiwgYW5kIGFsbG9jYXRpb24gZmxhZ3MgYXQgdGhpcyBwb2ludC4gSSBuZWVkIHRvIGRldGVybWluZTogV2hhdCdzIHRoZSBzcGVjaWZpYyByb2xlIG9mIGBxdWV1ZV9mb2xpb3NfcG1kYCBpbiB0aGUgY29udGV4dCBvZiB0aGVzZSBwb2xpY2llcz8gSXMgdGhpcyBmdW5jdGlvbiBpbnZvbHZlZCBpbiB0aGUgYWN0dWFsIHF1ZXVpbmcgb2YgZm9saW9zIGZvciBtZW1vcnkgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgc2V0IHBvbGljeT8gT3IgaXMgaXQgbW9yZSBvZiBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGVsc2V3aGVyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgcmFjZSBjb25kaXRpb25zIHRoaXMgZnVuY3Rpb24gY291bGQgaW50cm9kdWNlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgbXVsdGktdGhyZWFkZWQgb3IgY29uY3VycmVudCBhY2Nlc3MgY29udGV4dD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBmdW5jdGlvbidzIGRlZmluaXRpb24sIHRoZW4gdHJhY2UgaXRzIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjozMy4wOTM5Mjc1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdFxcdHJldHVybiBub2RlX2lzc2V0KG5pZCwgKnFwLVxcdTAwM2VubWFzaykgPT0gIShmbGFncyBcXHUwMDI2IE1QT0xfTUZfSU5WRVJUKTtcXG4gNjUxOlxcdH1cXG4gNjUyOlxcdFxcbiA2NTM6XFx0c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gNjU0OlxcdHtcXG4gNjU1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY1NjpcXHRcXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpKSB7XFxuIDY1OTpcXHRcXHRcXHRxcC1cXHUwMDNlbnJfZmFpbGVkKys7XFxuIDY2MDpcXHRcXHRcXHRyZXR1cm47XFxuIDY2MTpcXHRcXHR9XFxuIDY2MjpcXHRcXHRpZiAodW5saWtlbHkocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSlcXG4gNjYzOlxcdFxcdFxcdHJldHVybjtcXG4gNjY0OlxcdFxcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xcbiA2NjU6XFx0XFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcXG4gNjY2OlxcdFxcdFxcdHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9DT05USU5VRTtcXG4gNjY3OlxcdFxcdFxcdHJldHVybjtcXG4gNjY4OlxcdFxcdH1cXG4gNjY5OlxcdFxcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcXG4gNjcwOlxcdFxcdFxcdHJldHVybjtcXG4gNjcxOlxcdFxcdGlmICghKHFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcXG4gNjcyOlxcdFxcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cXHUwMDNldm1hKSB8fFxcbiA2NzM6XFx0XFx0ICAgICFtaWdyYXRlX2ZvbGlvX2FkZChmb2xpbywgcXAtXFx1MDAzZXBhZ2VsaXN0LCBxcC1cXHUwMDNlZmxhZ3MpKVxcbiA2NzQ6XFx0XFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbiA2NzU6XFx0fVxcbiA2NzY6XFx0XFxuIDY3NzpcXHQvKlxcbiA2Nzg6XFx0ICogU2NhbiB0aHJvdWdoIGZvbGlvcywgY2hlY2tpbmcgaWYgdGhleSBzYXRpc2Z5IHRoZSByZXF1aXJlZCBjb25kaXRpb25zLFxcbiA2Nzk6XFx0ICogbW92aW5nIHRoZW0gZnJvbSBMUlUgdG8gbG9jYWwgcGFnZWxpc3QgZm9yIG1pZ3JhdGlvbiBpZiB0aGV5IGRvIChvciBub3QpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjozMy4wOTQxNTgzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYwOTU2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQTUQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyBob3cgYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBvcGVyYXRpb25zIGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcy4gVGhpcyBpcyBnb29kOyBza2lwcGluZyB0aGVzZSBlbnRyaWVzIGluIGNlcnRhaW4gc2l0dWF0aW9ucyBpcyBkZWZpbml0ZWx5IGEgcHJhY3RpY2FsLCByZWFjaGFibGUgb3B0aW1pemF0aW9uLiBJdCdzIGxpa2VseSBnb2luZyB0byBiZSBmdW5jdGlvbmFsLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhdCBwbGF5IGhlcmUgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBaT05FX0RFVklDRWAuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3BtZGAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBwYXRjaCBpbnRlcmFjdHMgd2l0aCB0aGVzZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBgWk9ORV9ERVZJQ0VgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gT3IsIGlzIHRoaXMgZGVwZW5kZW50IG9uIGFub3RoZXIgY29uZmlnLCBuYW1lbHkgYERFVklDRV9QUklWQVRFYD8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIFRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzA4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MzcuMDU1MTE4MzE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc0OTY5MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfUFJJVkFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY2LVxcbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjozOS4zMzAwOTUyNjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNTYxNTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBvZiBERVZJQ0VfUFJJVkFURSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyB0aWVkIHRvIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW5mbHVlbmNlLiBXaGF0IGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIG90aGVyIHBpZWNlcyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IElzIGl0IGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBjb21wcmVoZW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBlYXNpbHkuIEl0J3MgdGltZSB0byBtYXAgb3V0IHRoaXMgZGVwZW5kZW5jeSBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjQyLjI0NTcxMzA5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjY3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjY3OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNjg6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNjk6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNzA6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNzE6XFx0XFxuMTI3MjpcXHRcXHRoZWxwXFxuMTI3MzpcXHRcXHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXFxuMTI3NDpcXHRcXHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcXG4xMjc1OlxcdFxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbjEyNzY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjQyLjI0NTg3NTQ1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM0OTI4NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEZXZpY2UtU3BlY2lmaWMgTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgcmVsYXRlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYSBkZXZpY2UuIEZpcnN0IHRob3VnaHQsIHllYWgsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBERVZJQ0VfUFJJVkFURWAgKmRlcGVuZHMqIG9uIGBaT05FX0RFVklDRWAuIFRoYXQncyB0aGUgYmFzZWxpbmUuIE5vdywgSSByZW1lbWJlciBzZWVpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgYmVpbmcgdXNlZCBzb21ld2hlcmUsIGFuZCBJIHN1c3BlY3QgdGhhdCdzIHRoZSBrZXkuIExldCBtZSBzZWUuLi4geWVzISBJdCB1c2VzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGlzIGxpa2VseSBnb2luZyB0byBiZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDk0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjo0NS4yODA4MDcyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTU4MjM0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXFx0XFx0XFx0XFx0cHJlc2VudCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjgyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg2LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjEtXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzYyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM5LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XFxuLS1cXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTI2Ni1cXHRcXHQgKi9cXG5tbS9obW0uYzoyNjc6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTI2OC1cXHRcXHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0yNzAtXFx0XFx0XFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcXG5tbS9obW0uYzoyNzE6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yNzItXFx0XFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0yODQtXFxubW0vaG1tLmM6Mjg1OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjg2LVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9obW0uYz0zMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmMtMzQ1LVxcbm1tL2htbS5jOjM0NjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMzQ3LVxcdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXFx1MDAzZXBnbWFwLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMzUzLVxcbm1tL2htbS5jOjM1NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTM1NS1cXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTM3Mi1cXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG5tbS9obW0uYzozNzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zNzQtXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyNy1cXHRcXHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE4Mjg6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4MjktXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMi1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE4MzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzNC1cXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTU4PXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3OS1cXHRcXHRcXHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjU4MDpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MS1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDM0PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTI3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzEyODpcXHRcXHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTMxMjktXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg4Mj1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00OTExLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDkxMjpcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy00OTEzLVxcdFxcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xcbi0tXFxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy05ODMtXFx0XFx0fVxcbm1tL21lbW9yeS5jOjk4NDpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTk4NS1cXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuLS1cXG5tbS9tZW1vcnkuYy0xMDA4LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjEwMDk6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbW9yeS5jLTEwMTAtXFx0XFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xcbi0tXFxubW0vbWVtb3J5LmM9MTcyOD1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzM3LVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL21lbW9yeS5jOjE3Mzg6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jLTE3MzktXFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz00NzQyPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc2OC1cXHRcXHRcXHRyZXQgPSByZW1vdmVfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeSh2bWYpO1xcbm1tL21lbW9yeS5jOjQ3Njk6XFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy00NzcwLVxcdFxcdFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzA6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cXHRcXHQgICAgIShtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkpIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgxLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTgyOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODMtXFx0XFx0XFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI5OS1cXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzozMDA6XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMDEtXFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzMtXFx0XFx0XFx0XFx0XFx0TUlHUkFURV9QRk5fTUlHUkFURTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjMzNDpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzM1LVxcdFxcdFxcdFxcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMzUtXFx0XFx0XFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcXG5tbS9tcHJvdGVjdC5jOjIzNjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL21wcm90ZWN0LmMtMjM3LVxcdFxcdC8qXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg0OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcyLVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzAtXFx0XFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEzMTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMi1cXHRcXHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbi0tXFxubW0vcm1hcC5jPTI0MTQ9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI2MDItXFxubW0vcm1hcC5jOjI2MDM6XFx0XFx0XFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XFxubW0vcm1hcC5jLTI2MDQtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjo0Ny42MzA0MTAxODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NjE1MDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBNYWNybyoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgaGVhZGVyIGZpbGUgYW5kIHNlZSBob3cgdGhpcyBtYWNybyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBrbm93IHRoaXMgY29kZSwgc28gSSdsbCB3YW50IHRvIGNoZWNrIGFyb3VuZCBsaW5lIDI4NyBvZiB0aGF0IGZpbGUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIGRlZmluaXRpb25zIGxpa2UgdGhpcyB3b3VsZCBzaXQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEknbSBzdXJlIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBiZWhpbmQgdGhpcyBtYWNyby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjo1MC42NzY1NjMyMzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NTpcXHQgKi9cXG4gMjc2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbiAyNzk6XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHQvKipcXG4gMjgyOlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG4gMjgzOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMjg0OlxcdCAqXFxuIDI4NTpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMjg2OlxcdCAqL1xcbiAyODc6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuIDI5MDpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbiAyOTE6XFx0XFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI5MzpcXHRcXHRkZWZhdWx0OlxcbiAyOTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTU6XFx0XFx0fVxcbiAyOTY6XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHQvKipcXG4gMjk5OlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XFxuIDMwMDpcXHQgKiBAZW50cnk6IExlYWYgZW50cnkuXFxuIDMwMTpcXHQgKlxcbiAzMDI6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMzAzOlxcdCAqL1xcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoc29mdGxlYWZfdCBlbnRyeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6NTAuNjc2NjY1MTExWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODkyMTIzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgaXMgZGVmaW5lZCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gSXQncyBhIGtleSBjb25zdGFudCwgYW5kIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNlYXJjaC4gSSdsbCB1c2UgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29sIOKAkyBwcm9iYWJseSBhIGdyZXAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFuZCBsb29rIGZvciB0aGUgZXhhY3Qgc3RyaW5nLCBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gSXMgaXQgYSBoZWFkZXIgZmlsZT8gQSBjb25maWcgb3B0aW9uPyBBIG1hY3JvIGRlZmluaXRpb24/IFdoZXJlIGlzIGl0IGJlaW5nICp1c2VkKj8gVGhlIGNvbnRleHQgd2lsbCBiZSBjcml0aWNhbC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBwcm9wYWdhdGlvbiBhbmQgYW55IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggaXQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBpbXBhY3QuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1ODUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjUzLjQ2NTg4MTIyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NzA4Mzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xOT1lbnVtIHNvZnRsZWFmX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgtXFx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRCxcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyOTpcXHRTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURSxcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMC1cXHRTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFLFxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTYwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE4Mi1cXHRjYXNlIFNXUF9ERVZJQ0VfV1JJVEU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTgzOlxcdFxcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODQtXFx0Y2FzZSBTV1BfREVWSUNFX1JFQUQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzg6XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3OS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yODc9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODktXFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI5MDpcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5MS1cXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjU1LjUxMjk3Nzc3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMwMDQ1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgU1dQX0RFVklDRV9XUklURWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNpbXBsZTogbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFdlIG5lZWQgdG8gY2hlY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGBTV1BfREVWSUNFX1dSSVRFYCBmdW5jdGlvbi4gR2l2ZW4gb3VyIGtub3dsZWRnZSwgd2UgYm90aCBrbm93IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIGNvdWxkIGJlIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGEgZmlsZSB3cml0ZSwgYSBkcml2ZXIgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbnRpcmVseSBtb3JlIGNvbXBsZXguIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eSwgaXRzIGlucHV0cyBhbmQgb3V0cHV0cywgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjU4LjU0MzAyNjg2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTg2NzgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTV1BfREVWSUNFX1dSSVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODEtI2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE4MjpcXHRjYXNlIFNXUF9ERVZJQ0VfV1JJVEU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTgzLVxcdFxcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03Mi0jZGVmaW5lIFNXUF9ERVZJQ0VfTlVNIDNcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3MzojZGVmaW5lIFNXUF9ERVZJQ0VfV1JJVEUgKE1BWF9TV0FQRklMRVMrU1dQX0hXUE9JU09OX05VTStTV1BfTUlHUkFUSU9OX05VTSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NC0jZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUytTV1BfSFdQT0lTT05fTlVNK1NXUF9NSUdSQVRJT05fTlVNKzEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xNDE9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3dyaXRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE0Mi17XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTQzOlxcdHJldHVybiBzd3BfZW50cnkoU1dQX0RFVklDRV9XUklURSwgb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNDQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMzowMC42MTQ5MDMxNDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMDA1NjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IEEgUXVpY2sgRGlhZ25vc3RpYyBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gY2hhc2luZyBkb3duIGBTV1BfREVWSUNFX1dSSVRFYC4gSXQncyBsb29raW5nIGxpa2UgaXQncyBkZWZpbmVkIGNvbmRpdGlvbmFsbHksIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBOYXR1cmFsbHksIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGV0aGVyIHRoYXQgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIGluIHRoaXMgYnVpbGQuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIEknbGwganVtcCBvdmVyIHRvIHRoYXQgZmlsZSwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMTgxLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBodW50IGFuZCBzZWUgd2hhdCdzIHdoYXQuIEhvcGVmdWxseSwgSSdsbCBmaW5kIHRoZSBkZWZpbml0aW9uLCBvciBhdCBsZWFzdCBhIGNsdWUgYWJvdXQgdGhlIGNvbmZpZyBmbGFnJ3Mgc3RhdGUsIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIzOjAzLjgzNDk2MjI3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcdFxcdHJldHVybiBTT0ZUTEVBRl9TV0FQO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRzd2l0Y2ggKHR5cGVfbnVtKSB7XFxuIDE3MzpcXHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbiAxNzQ6XFx0XFx0Y2FzZSBTV1BfTUlHUkFUSU9OX1JFQUQ6XFxuIDE3NTpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfTUlHUkFUSU9OX1JFQUQ7XFxuIDE3NjpcXHRcXHRjYXNlIFNXUF9NSUdSQVRJT05fUkVBRF9FWENMVVNJVkU6XFxuIDE3NzpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfTUlHUkFUSU9OX1JFQURfRVhDTFVTSVZFO1xcbiAxNzg6XFx0XFx0Y2FzZSBTV1BfTUlHUkFUSU9OX1dSSVRFOlxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuIFNPRlRMRUFGX01JR1JBVElPTl9XUklURTtcXG4gMTgwOlxcdCNlbmRpZlxcbiAxODE6XFx0I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbiAxODI6XFx0XFx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxcbiAxODM6XFx0XFx0XFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbiAxODQ6XFx0XFx0Y2FzZSBTV1BfREVWSUNFX1JFQUQ6XFxuIDE4NTpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDtcXG4gMTg2OlxcdFxcdGNhc2UgU1dQX0RFVklDRV9FWENMVVNJVkU6XFxuIDE4NzpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX0VYQ0xVU0lWRTtcXG4gMTg4OlxcdCNlbmRpZlxcbiAxODk6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbiAxOTA6XFx0XFx0Y2FzZSBTV1BfSFdQT0lTT046XFxuIDE5MTpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfSFdQT0lTT047XFxuIDE5MjpcXHQjZW5kaWZcXG4gMTkzOlxcdFxcdGNhc2UgU1dQX1BURV9NQVJLRVI6XFxuIDE5NDpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfTUFSS0VSO1xcbiAxOTU6XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHQvKiBVbmtub3duIGVudHJ5IHR5cGUuICovXFxuIDE5ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoMSk7XFxuIDE5OTpcXHRcXHRyZXR1cm4gU09GVExFQUZfTk9ORTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjM6MDMuODM1MDc0MTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzM3MTgzMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBEZXZpY2UgUHJpdmF0ZSBQYWdlcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHdoYXQgSSdtIHNlZWluZy4gVG8gZ2V0IHRoZSBiZWhhdmlvciBJIG5lZWQsIHNwZWNpZmljYWxseSBhbGxvd2luZyBgc29mdGxlYWZfdHlwZWAgdG8gcmV0dXJuIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgb3IgYFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQURgLCBJIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBlbmFibGVkLiBJZiBpdCdzIG5vdCwgdGhvc2UgdmFsdWVzIGFyZW4ndCBldmVuIGF2YWlsYWJsZSwgYW5kIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiBTbywgdGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50OiBgQ09ORklHX0RFVklDRV9QUklWQVRFYC5cblxuTm93LCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpdHNlbGYgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1pPTkVfREVWSUNFYC4gIEFsc28sIHRoZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBmdW5jdGlvbiBpcyBvbmx5IGRlZmluZWQgdG8gY2hlY2sgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBpZiBib3RoIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCBhcmUgc2V0LiBUaGVyZWZvcmUsIHRoaXMgYmVjb21lcyBhIGhpZXJhcmNoeSBvZiBkZXBlbmRlbmNpZXMuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZSByZXF1aXJlZCBjb25maWdzIGFzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBaT05FX0RFVklDRWAsIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBIb3dldmVyLCBzaW5jZSBgREVWSUNFX1BSSVZBVEVgICpkZXBlbmRzKiBvbiBgWk9ORV9ERVZJQ0VgLCB0aGF0IG1lYW5zIGBERVZJQ0VfUFJJVkFURWAgZWZmZWN0aXZlbHkgc3Vic3VtZXMgYFpPTkVfREVWSUNFYC4gU28gSSBjYW4gZWxpbWluYXRlIGBaT05FX0RFVklDRWAgYXMgYSBkaXJlY3QgbmVlZC4gRnVydGhlcm1vcmUsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgbmVlZGVkIGZvciBgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcy5cblxuU28sIGxldCdzIHNpbXBsaWZ5LiAgSXMgYERFVklDRV9QUklWQVRFYCBzdWZmaWNpZW50IGluIGFsbCBjYXNlcz8gWWVzLCBpdCBhcHBlYXJzIHRoYXQgYERFVklDRV9QUklWQVRFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgdGhlIG9ubHkgY29uZmlncyB0aGF0IEkgbmVlZC5cblxuRnVuY3Rpb25hbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgY2hhbmdlczpcbi0gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGBcbi0gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWBcbi0gYHF1ZXVlX2ZvbGlvc19wbWRgXG5cblRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgd2hpY2ggc3VnZ2VzdHMgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgZm9jdXMgb24gZnV6emluZy4gV29ydGhGdXp6aW5nIHdpbGwgYmUgc2V0IHRvIHRydWUuXG5cbkp1c3QgdG8gcmVjYXAgYW5kIGVuc3VyZSBJJ20gY2xlYXIsIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHZlcmlmeSBhcmU6XG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBERVZJQ0VfUFJJVkFURWBcblxuQW5kIHRoZSBrZXkgc3ltYm9scyB0byBiZSBhd2FyZSBvZiBpbmNsdWRlOlxuKiAgIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgXG4qICAgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWBcbiogICBgcXVldWVfZm9saW9zX3BtZGBcblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGFyZSByZWxhdGVkLlxuXG5gWk9ORV9ERVZJQ0VgIGlzIHNlbGVjdGVkIGJ5IGBERVZJQ0VfUFJJVkFURWAsIGJ1dCBpdCdzICpkZXBlbmRlZCogb24gYnkgYERFVklDRV9QUklWQVRFYCwgc28gSSBuZWVkIHRvIGxpc3QgYm90aCBgWk9ORV9ERVZJQ0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLlxuXG5DaGVja2luZyBgREVWSUNFX1BSSVZBVEVgIGFnYWluOiBJIGFtIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjQ6MTguMTcyMjYwMzg0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjc6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI2ODpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI2OTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI3MDpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdGhlbHBcXG4xMjczOlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjc0OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNzU6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI3NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjQ6MTguMTcyMzkzMzY0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDQyNzAxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIFJlbGV2YW50IENvZGUqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0J3MgZGVwZW5kZW5jeSBoaW5nZXMgb24gYFpPTkVfREVWSUNFYC4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJbW1lZGlhdGVseSwgSSBuZWVkIHRvIGxpc3QgYFpPTkVfREVWSUNFYCBhbmQsIGdpdmVuIHRoZSBjb250ZXh0LCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYERFVklDRV9QUklWQVRFYC4gSSdtIGFsc28gZmFpcmx5IGNlcnRhaW4gdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZXMgd2lsbCBiZSBpbXBvcnRhbnQgaGVyZSwgc28gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBuZWVkcyB0byBiZSBpbiB0aGUgbGlzdC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiBhYm91dCBpdHMgc2NvcGUuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBpdCdzIHN0YXRpYy4gWWVzLCB0aGVyZSBpdCBpcywgdHVja2VkIGF3YXkgYXMgc3RhdGljIGluIGBtbS9tYWR2aXNlLmNgLiBHb29kLCB0aGF0J3MgaW1wb3J0YW50IGZvciB0aGUgY29udGV4dC4gSSdsbCBuZWVkIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFzIHdlbGw7IGl0J3MgbGlrZWx5IHJlbGV2YW50IGdpdmVuIHRoZSBmb2N1cyBvbiBodWdlIHBhZ2VzLCBhbmQgdGhhdCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gRmluYWxseSwgSSdsbCBjaGVjayBvbiBgcXVldWVfZm9saW9zX3BtZGAsIHdoaWNoIHdpbGwgYmUgcmVsZXZhbnQgYXMgd2VsbCBhbmQgaXMgc3RhdGljIGluIGBtbS9tZW1wb2xpY3kuY2AuXG5cblJpZ2h0LCBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB3aGF0IEkgbmVlZCB0byBwcm92aWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc4NiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyNDoyMi44NzY2NjY0MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY5OTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 23:05:28 +0000 UTC FinishedAt: 2026-07-07 23:24:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE" ], "series_id": "36933561-6c0f-41f5-9b54-8542fd66184f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_free_huge_pmd", "madvise_cold_or_pageout_pte_range", "queue_folios_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTlkMDNhYWY3NzdjYzJiZjVlMzY5ZGFkMTY1YzY0Mzg0M2Y2YzRiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjM6MjE6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi4wMTc4M2QwMTVhZmI0OSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMjk2LDYgJiM0MzsyMjk2LDkgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpZiAoaXNfaHVnZV96ZXJvX3BtZChvcmlnX3BtZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4gXHRcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggOTI5MmY2MGIxOWFhN2MuLjg3MGJlMzk4YzZmMzc0IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0zODQsNiAmIzQzOzM4NCw5IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdG9yaWdfcG1kID0gKnBtZDtcbiYjNDM7XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuJiM0MztcbiBcdFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKVxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggOTE0ZjgxODYzZGI1YTYuLmVkYTgxNzUzOWM3N2VhIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtNjU5LDYgJiM0Mzs2NTksOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkpXG4mIzQzO1x0XHRyZXR1cm47XG4gXHRmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTtcbiBcdGlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKSB7XG4gXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX0NPTlRJTlVFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxOWQwM2FhZjc3N2NjMmJmNWUzNjlkYWQxNjVjNjQzODQzZjZjNGI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMzoyMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi4wMTc4M2QwMTVhZmI0OSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yMjk2LDYgJiM0MzsyMjk2LDkgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkgewogCQlWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSAmYW1wOyZhbXA7CiAJCQkJICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpOwpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IDkyOTJmNjBiMTlhYTdjLi44NzBiZTM5OGM2ZjM3NCAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtMzg0LDYgJiM0MzszODQsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCQkJcmV0dXJuIDA7CiAKIAkJb3JpZ19wbWQgPSAqcG1kOwomIzQzOwkJaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpCiYjNDM7CQkJZ290byBodWdlX3VubG9jazsKJiM0MzsKIAkJaWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKQogCQkJZ290byBodWdlX3VubG9jazsKIApkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA5MTRmODE4NjNkYjVhNi4uZWRhODE3NTM5Yzc3ZWEgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jCkBAIC02NTksNiAmIzQzOzY1OSw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiAJCXFwLSZndDtucl9mYWlsZWQmIzQzOyYjNDM7OwogCQlyZXR1cm47CiAJfQomIzQzOwlpZiAodW5saWtlbHkocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSkKJiM0MzsJCXJldHVybjsKIAlmb2xpbyA9IHBtZF9mb2xpbygqcG1kKTsKIAlpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkgewogCQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZGRpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpYCBjaGVja3MsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgY2hlY2tzIGhhdmUgYmVlbiBhZGRlZCBpbiB0aHJlZSBrZXkgYXJlYXM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaW4gYG1tL21hZHZpc2UuY2AsIGFuZCBgcXVldWVfZm9saW9zX3BtZGAgd2l0aGluIGBtbS9tZW1wb2xpY3kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4KCkZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiAqd2hhdCogaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpYD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIGRlZmluaXRpb24gb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgaXQmIzM5O3MgZW5hYmxlZC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byB0ZWxsIHVzLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHJlbGV2YW50IENPTkZJRyBvcHRpb25zIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQgb24gaXRzIHZhbGlkaXR5IGFuZCBpbXBhY3QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkyLS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk0LSAqIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEwLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjExOnN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyODA9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMjk4LVxubW0vaHVnZV9tZW1vcnkuYzoyMjk5Olx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXG5tbS9odWdlX21lbW9yeS5jLTIzMDAtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzAzND1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxMTYtXHRcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MzExNzpcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTMxMTgtXHRcdHNvZnRsZWFmX3QgZW50cnk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMjU3LVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjMyNTg6XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvbGRfcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMjU5LVx0XHRwdGVfdCBlbnRyeTtcbi0tXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTM4Ni1cdFx0b3JpZ19wbWQgPSAqcG1kO1xubW0vbWFkdmlzZS5jOjM4NzpcdFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXG5tbS9tYWR2aXNlLmMtMzg4LVx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4tLVxubW0vbWVtb3J5LmM9NjM5Nz1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy02NDcwLVx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudCh2bWYub3JpZ19wbWQpKSkge1xubW0vbWVtb3J5LmM6NjQ3MTpcdFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSh2bWYub3JpZ19wbWQpKVxubW0vbWVtb3J5LmMtNjQ3Mi1cdFx0XHRyZXR1cm4gZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoXHUwMDI2dm1mKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz02NTM9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9tZW1wb2xpY3kuYy02NjEtXHR9XG5tbS9tZW1wb2xpY3kuYzo2NjI6XHRpZiAodW5saWtlbHkocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSlcbm1tL21lbXBvbGljeS5jLTY2My1cdFx0cmV0dXJuO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nj1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXHRcdCAgICAocG1kX3RyYW5zX2h1Z2UocG1kZSkgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKSB8fFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjU0Olx0XHQgICAgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU1LVx0XHRcdHB2bXctXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXHUwMDNlcG1kKTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjUtXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI2NjpcdFx0XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY3LVx0XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGFjdGl2ZS4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBJIGNhbiYjMzk7dCBxdWl0ZSByZWNhbGwgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGVuYWJsZSBpdC4gVG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHksIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBwcmVwcm9jZXNzb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaXRzIGVuYWJsaW5nIGNvbmRpdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjb25maWcgb3B0aW9ucyAob3IsIGF0IGxlYXN0LCB0aGUgaW5jbHVkZS9kZXBlbmRlbmN5IHN0cnVjdHVyZSksIHRoYXQgZ292ZXJuIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIGZpbGUgd2lsbCBoYXZlIHRoZSBhbnN3ZXIsIG9yIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpXG4gNTkxOlx0XG4gNTkyOlx0LyoqXG4gNTkzOlx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG4gNTk0Olx0ICogZW50cnkuXG4gNTk1Olx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cbiA1OTY6XHQgKlxuIDU5NzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUE1EIGNvbnRhaW5zIGEgc3dhcCBlbnRyeSB0aGF0IHJlcHJlc2VudHMgYSBkZXZpY2UgcHJpdmF0ZVxuIDU5ODpcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXG4gNTk5Olx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxuIDYwMDpcdCAqIG9wZXJhdGlvbnMuXG4gNjAxOlx0ICpcbiA2MDI6XHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiA2MDU6XHR7XG4gNjA2Olx0XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gNjA3Olx0fVxuIDYwODpcdFxuIDYwOTpcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUyAqL1xuIDYxMDpcdFxuIDYxMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDYxMjpcdHtcbiA2MTM6XHRcdHJldHVybiBmYWxzZTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXG4gNjE3Olx0XG4gNjE4Olx0LyoqXG4gNjE5Olx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgZGVwZW5kcyBvbiBib3RoIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYC4gTm93LCBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyB1c3VhbGx5IHByZXR0eSBzdHJhaWdodGZvcndhcmQsIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBCdXQsIGBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgLi4uIHRoYXQgb25lIHJpbmdzIGEgYmVsbCBhcyBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyB1c2VyLWNvbmZpZ3VyYWJsZSwgb3IgaWYgaXQmIzM5O3Mgc29tZXRoaW5nIGJha2VkIGluIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgaG93IEkgYXBwcm9hY2ggdGhpcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLiBJcyBpdCBhIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIHRoYXQmIzM5O3MgYXV0b21hdGljYWxseSBzZXQgYmFzZWQgb24gdGhlIGBBUkNIYCBzZXR0aW5nPyBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgbW92aW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzAzPWNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwNS1cbm1tL0tjb25maWc6NzA2OmNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xubW0vS2NvbmZpZy03MDctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGEgQm9vbGVhbiBGbGFnKioKCk9rYXksIHNvIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gYSBoaWRkZW4gYm9vbGVhbiB2YXJpYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgcmVhZGluZyBvciB3cml0aW5nIHRvIHRoaXMgZmxhZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB0aGVuIHNlZSB3aGF0JiMzOTtzIGFmZmVjdGluZyBpdHMgdmFsdWUuIEZpbmRpbmcgdGhlIHBvaW50cyB3aGVyZSB0aGUgYm9vbGVhbiBpcyBhY3R1YWxseSBzZWxlY3RlZCAob3Igc2V0KSBpcyB0aGUgbmV4dCB2aXRhbCBwaWVjZSBvZiB0aGlzIHB1enpsZTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQmIzM5O3MgZHJpdmluZyBpdHMgc3RhdGUgdHJhbnNpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTktXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9hcm02NC9LY29uZmlnOjIwOlx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjEtXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1Olx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE2LVx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTEwOT1jb25maWcgUFBDX1RIUFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNC0gICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlOjExNTogICAgICAgc2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTYtXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0yNC1cdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyXG5hcmNoL3Jpc2N2L0tjb25maWc6MjU6XHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODQtXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9zMzkwL0tjb25maWc6ODU6XHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvczM5MC9LY29uZmlnLTg2LVx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy03Mi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbmFyY2gveDg2L0tjb25maWc6NzM6XHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC94ODYvS2NvbmZpZy03NC1cdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcdGlmIEFDUElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgYSBrZXJuZWwgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBNRCBTb2Z0bGVhdmVzIG9uIHg4Nl82NCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBBUkNIX0hBU19QTURfU09GVExFQVZFU2AgaW50ZXJhY3RzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb24geDg2XzY0LiBJdCBsb29rcyBsaWtlIHRoZSBrZXJuZWwgc2V0cyBpdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBkZXBlbmRlbmN5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBaT05FX0RFVklDRWAgaGVyZS4gSSByZWNhbGwgaXQgaXMgbmVlZGVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBgWk9ORV9ERVZJQ0VgIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IHpvbmUgYWN0dWFsbHkgKmRvZXMqIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRGV2aWNlIFByaXZhdGUgUE1EIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYFpPTkVfREVWSUNFYCB0aGluZyBpcyBhIHVzZXItY29uZmlndXJhYmxlIG9wdGlvbi4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIGBxdWV1ZV9mb2xpb3NfcG1kYC4gQWxsIG9mIHRoZXNlIGFyZSBlbnRyeSBwb2ludHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYG1hZHZpc2VgLCBgbWJpbmRgLCBgc2V0X21lbXBvbGljeWAsIGFuZCBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgaW50ZW5kZWQgdXNlIGNhc2UgaGVyZT8KClRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhZGRpbmcgYSBjaGVjayBmb3IgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIFRoaXMgdGVsbHMgbWUgdGhlIGdvYWwgaXMgdG8gc2tpcCBhbnkgcHJvY2Vzc2luZyB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW50cmllcyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgbWFya2VkIGFzICYjMzQ7ZGV2aWNlIHByaXZhdGUmIzM0Oy4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJiMzOTt0IHdhbnQgdGhlc2UgZnVuY3Rpb25zLCB3aGljaCBwcmVzdW1hYmx5IGhhbmRsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltLCBpbnRlcmZlcmluZyB3aXRoIG1lbW9yeSB0aGF0JiMzOTtzIGRlZGljYXRlZCB0byBkZXZpY2UgYWNjZXNzLiBXZSYjMzk7cmUga2VlcGluZyBvdXIgaGFuZHMgb2ZmIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGBaT05FX0RFVklDRWAsIGFuZCBsZWF2aW5nIHRoZSBkZXZpY2UgaW4gY29udHJvbCBvZiBpdHMgZGF0YS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgY2hlY2sgaW50ZWdyYXRlcyBpbnRvIGl0cyBleGlzdGluZyBsb2dpYyBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzk7ZnJlZWluZyYjMzk7IG1lYW5zIGluIHRoaXMgY29udGV4dCB3aGVuIGl0IGlzIHNraXBwaW5nIHRoZSBwcm9jZXNzaW5nIGZvciBkZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgaXMgc29tZSBmb3JtIG9mIG9wdGltaXphdGlvbiwgb3IgYXZvaWRpbmcgYW4gZXJyb3IgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHRib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjIyODE6XHRcdFx0cG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpXG4yMjgyOlx0e1xuMjI4MzpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuMjI4NDpcdFx0cG1kX3Qgb3JpZ19wbWQ7XG4yMjg1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMjI4NjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0bGItXHUwMDNlbW07XG4yMjg3Olx0XHRib29sIHJldCA9IGZhbHNlO1xuMjI4ODpcdFxuMjI4OTpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XG4yMjkwOlx0XG4yMjkxOlx0XHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcbjIyOTI6XHRcdGlmICghcHRsKVxuMjI5MzpcdFx0XHRnb3RvIG91dF91bmxvY2tlZDtcbjIyOTQ6XHRcbjIyOTU6XHRcdG9yaWdfcG1kID0gKnBtZDtcbjIyOTY6XHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbjIyOTc6XHRcdFx0Z290byBvdXQ7XG4yMjk4Olx0XG4yMjk5Olx0XHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcbjIzMDA6XHRcdFx0Z290byBvdXQ7XG4yMzAxOlx0XG4yMzAyOlx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbjIzMDM6XHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4yMzA0Olx0XHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG4yMzA1Olx0XHRcdGdvdG8gb3V0O1xuMjMwNjpcdFx0fVxuMjMwNzpcdFxuMjMwODpcdFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xuMjMwOTpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9tYWR2aXNlLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBhZ2UgdGFibGUgZW50cmllcyB3aGVuIGBNQURWX0NPTERgIG9yIHBvdGVudGlhbGx5IGBNQURWX1BBR0VPVVRgIGlzIGludm9sdmVkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBmaW5lciBwb2ludHM6IHdoYXQmIzM5O3MgdGhlIGV4YWN0IGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgY2FjaGUsIGhvdyBhcmUgZGlydHkgcGFnZXMgaGFuZGxlZCwgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0aGlzIHByb2Nlc3M/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGp1bXAgb3V0IGZyb20gYSBxdWljayByZXZpZXc/IEkgd2FudCB0byB0aGluayB0aHJvdWdoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgb3B0aW1pemF0aW9ucyBJIHNob3VsZCBrZWVwIGluIG1pbmQgZm9yIHJlbGF0ZWQgY29kZS4gTXkgZ29hbCBpcyB0byBnYWluIGNsYXJpdHkgb24gdGhlIGludGVuZGVkIG9wZXJhdGlvbiBzbyBJIGNhbiBjb25zaWRlciBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBsaW1pdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIDM3MTpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDM3MjpcdFxuIDM3MzpcdFx0cGFnZW91dF9hbm9uX29ubHlfZmlsdGVyID0gcGFnZW91dCBcdTAwMjZcdTAwMjYgIXZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjZcbiAzNzQ6XHRcdFx0XHRcdFx0IWNhbl9kb19maWxlX3BhZ2VvdXQodm1hKTtcbiAzNzU6XHRcbiAzNzY6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gMzc3Olx0XHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbiAzNzg6XHRcdFx0cG1kX3Qgb3JpZ19wbWQ7XG4gMzc5Olx0XHRcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIDM4MDpcdFxuIDM4MTpcdFx0XHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcbiAzODI6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4gMzgzOlx0XHRcdGlmICghcHRsKVxuIDM4NDpcdFx0XHRcdHJldHVybiAwO1xuIDM4NTpcdFxuIDM4NjpcdFx0XHRvcmlnX3BtZCA9ICpwbWQ7XG4gMzg3Olx0XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuIDM4ODpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gMzg5Olx0XG4gMzkwOlx0XHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiAzOTE6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDM5MjpcdFxuIDM5MzpcdFx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiAzOTQ6XHRcdFx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbiAzOTU6XHRcdFx0XHRcdFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbiAzOTY6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDM5NzpcdFx0XHR9XG4gMzk4Olx0XG4gMzk5Olx0XHRcdGZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGBxdWV1ZV9mb2xpb3NfcG1kYCBpbiBgbW0vbWVtcG9saWN5LmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZm9saW8gcXVldWluZyB3b3JrcywgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gdGhlIGBwbWRgIGxldmVsLiBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSYjMzk7cyBhIHJlYXNvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgYmVpbmcgZmxhZ2dlZC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGluIGBtbS9tZW1wb2xpY3kuY2AsIEkmIzM5O20gZ29pbmcgdG8gYXNzdW1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gbWVtb3J5IHBvbGljaWVzLCB3aGljaCBtZWFucyBJIHNob3VsZCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIE5VTUEsIG1pZ3JhdGlvbiwgYW5kIGFsbG9jYXRpb24gZmxhZ3MgYXQgdGhpcyBwb2ludC4gSSBuZWVkIHRvIGRldGVybWluZTogV2hhdCYjMzk7cyB0aGUgc3BlY2lmaWMgcm9sZSBvZiBgcXVldWVfZm9saW9zX3BtZGAgaW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgcG9saWNpZXM/IElzIHRoaXMgZnVuY3Rpb24gaW52b2x2ZWQgaW4gdGhlIGFjdHVhbCBxdWV1aW5nIG9mIGZvbGlvcyBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgYmFzZWQgb24gdGhlIHNldCBwb2xpY3k/IE9yIGlzIGl0IG1vcmUgb2YgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBlbHNld2hlcmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGludHJvZHVjZSwgcGFydGljdWxhcmx5IHdpdGhpbiBhIG11bHRpLXRocmVhZGVkIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGNvbnRleHQ/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIHRoZW4gdHJhY2UgaXRzIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJldHVybiBub2RlX2lzc2V0KG5pZCwgKnFwLVx1MDAzZW5tYXNrKSA9PSAhKGZsYWdzIFx1MDAyNiBNUE9MX01GX0lOVkVSVCk7XG4gNjUxOlx0fVxuIDY1MjpcdFxuIDY1MzpcdHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNjU0Olx0e1xuIDY1NTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA2NTY6XHRcdHN0cnVjdCBxdWV1ZV9wYWdlcyAqcXAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gNjU3Olx0XG4gNjU4Olx0XHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbiA2NTk6XHRcdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbiA2NjA6XHRcdFx0cmV0dXJuO1xuIDY2MTpcdFx0fVxuIDY2MjpcdFx0aWYgKHVubGlrZWx5KHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkpXG4gNjYzOlx0XHRcdHJldHVybjtcbiA2NjQ6XHRcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuIDY2NTpcdFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiA2NjY6XHRcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4gNjY3Olx0XHRcdHJldHVybjtcbiA2Njg6XHRcdH1cbiA2Njk6XHRcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiA2NzA6XHRcdFx0cmV0dXJuO1xuIDY3MTpcdFx0aWYgKCEocXAtXHUwMDNlZmxhZ3MgXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcbiA2NzI6XHRcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cdTAwM2V2bWEpIHx8XG4gNjczOlx0XHQgICAgIW1pZ3JhdGVfZm9saW9fYWRkKGZvbGlvLCBxcC1cdTAwM2VwYWdlbGlzdCwgcXAtXHUwMDNlZmxhZ3MpKVxuIDY3NDpcdFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQmIzQzOyYjNDM7O1xuIDY3NTpcdH1cbiA2NzY6XHRcbiA2Nzc6XHQvKlxuIDY3ODpcdCAqIFNjYW4gdGhyb3VnaCBmb2xpb3MsIGNoZWNraW5nIGlmIHRoZXkgc2F0aXNmeSB0aGUgcmVxdWlyZWQgY29uZGl0aW9ucyxcbiA2Nzk6XHQgKiBtb3ZpbmcgdGhlbSBmcm9tIExSVSB0byBsb2NhbCBwYWdlbGlzdCBmb3IgbWlncmF0aW9uIGlmIHRoZXkgZG8gKG9yIG5vdCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBNRCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyBob3cgYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBvcGVyYXRpb25zIGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcy4gVGhpcyBpcyBnb29kOyBza2lwcGluZyB0aGVzZSBlbnRyaWVzIGluIGNlcnRhaW4gc2l0dWF0aW9ucyBpcyBkZWZpbml0ZWx5IGEgcHJhY3RpY2FsLCByZWFjaGFibGUgb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gYmUgZnVuY3Rpb25hbC4gVGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgYXQgcGxheSBoZXJlIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgWk9ORV9ERVZJQ0VgLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIGBxdWV1ZV9mb2xpb3NfcG1kYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHBhdGNoIGludGVyYWN0cyB3aXRoIHRoZXNlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0LgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBgWk9ORV9ERVZJQ0VgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gT3IsIGlzIHRoaXMgZGVwZW5kZW50IG9uIGFub3RoZXIgY29uZmlnLCBuYW1lbHkgYERFVklDRV9QUklWQVRFYD8gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI2ND1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjY2LVxubW0vS2NvbmZpZzoxMjY3OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjY4LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBvZiBERVZJQ0VfUFJJVkFURSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIHRpZWQgdG8gYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyBpbmZsdWVuY2UuIFdoYXQgY29tcG9uZW50cywgbW9kdWxlcywgb3Igb3RoZXIgcGllY2VzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdD8gSXMgaXQgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGNvbXByZWhlbmRpbmcgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBlYXNpbHkuIEl0JiMzOTtzIHRpbWUgdG8gbWFwIG91dCB0aGlzIGRlcGVuZGVuY3kgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRGV2aWNlLVNwZWNpZmljIE1lbW9yeSBNYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgcmVsYXRlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYSBkZXZpY2UuIEZpcnN0IHRob3VnaHQsIHllYWgsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBERVZJQ0VfUFJJVkFURWAgKmRlcGVuZHMqIG9uIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgcmVtZW1iZXIgc2VlaW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIHVzZWQgc29tZXdoZXJlLCBhbmQgSSBzdXNwZWN0IHRoYXQmIzM5O3MgdGhlIGtleS4gTGV0IG1lIHNlZS4uLiB5ZXMhIEl0IHVzZXMgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYC4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGlzIGxpa2VseSBnb2luZyB0byBiZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXHRcdFx0XHRwcmVzZW50ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3MC0gKiB3cml0YWJsZSBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4MS0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4OC17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDY6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM3LVx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzOS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yNjYtXHRcdCAqL1xubW0vaG1tLmM6MjY3Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMjY4LVx0XHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0yNzAtXHRcdFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcbm1tL2htbS5jOjI3MTpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMjcyLVx0XHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMjg0LVxubW0vaG1tLmM6Mjg1Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMjg2LVx0XHRcdGdvdG8gZmF1bHQ7XG4tLVxubW0vaG1tLmM9MzM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYy0zNDUtXG5tbS9obW0uYzozNDY6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMzQ3LVx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTM1My1cbm1tL2htbS5jOjM1NDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTM1NS1cdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0zNzItXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbm1tL2htbS5jOjM3MzpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTM3NC1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MjctXHRcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxODI4Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyOS1cdFx0Lypcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MzItXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxODMzOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4MzQtXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1NTg9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU3OS1cdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNTgwOlx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MS1cdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwMzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTI3LVxubW0vaHVnZV9tZW1vcnkuYzozMTI4Olx0XHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzEyOS1cdFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4ODI9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5MTEtXG5tbS9odWdlX21lbW9yeS5jOjQ5MTI6XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDkxMy1cdFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XG4tLVxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtOTgzLVx0XHR9XG5tbS9tZW1vcnkuYzo5ODQ6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtOTg1LVx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmMtMTAwOC1cdFx0ICovXG5tbS9tZW1vcnkuYzoxMDA5Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vbWVtb3J5LmMtMTAxMC1cdFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xuLS1cbm1tL21lbW9yeS5jPTE3Mjg9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3MzctXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcbm1tL21lbW9yeS5jOjE3Mzg6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9tZW1vcnkuYy0xNzM5LVx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4tLVxubW0vbWVtb3J5LmM9NDc0Mj12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NzY4LVx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG5tbS9tZW1vcnkuYzo0NzY5Olx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtNDc3MC1cdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTY5LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzA6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cdFx0ICAgICEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxODI6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTE4My1cdFx0XHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTktXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzozMDA6XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMS1cdFx0XHRcdGdvdG8gbmV4dDtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTMzMy1cdFx0XHRcdFx0TUlHUkFURV9QRk5fTUlHUkFURTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzM0Olx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTMzNS1cdFx0XHRcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTIzNS1cdFx0XHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xubW0vbXByb3RlY3QuYzoyMzY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vbXByb3RlY3QuYy0yMzctXHRcdC8qXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxODQ6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIHx8XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03Mi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMwLVx0XHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMyLVx0XHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxuLS1cbm1tL3JtYXAuYz0yNDE0PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYwMi1cbm1tL3JtYXAuYzoyNjAzOlx0XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vcm1hcC5jLTI2MDQtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgIE1hY3JvKioKClJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgaGVhZGVyIGZpbGUgYW5kIHNlZSBob3cgdGhpcyBtYWNybyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBrbm93IHRoaXMgY29kZSwgc28gSSYjMzk7bGwgd2FudCB0byBjaGVjayBhcm91bmQgbGluZSAyODcgb2YgdGhhdCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgZGVmaW5pdGlvbnMgbGlrZSB0aGlzIHdvdWxkIHNpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIHN1cmUgdGhlcmUmIzM5O3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBiZWhpbmQgdGhpcyBtYWNyby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc1Olx0ICovXG4gMjc2Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjc3Olx0e1xuIDI3ODpcdFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xuIDI3OTpcdH1cbiAyODA6XHRcbiAyODE6XHQvKipcbiAyODI6XHQgKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG4gMjgzOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDI4NDpcdCAqXG4gMjg1Olx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXG4gMjg2Olx0ICovXG4gMjg3Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuIDI5MDpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbiAyOTE6XHRcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiAyOTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjkzOlx0XHRkZWZhdWx0OlxuIDI5NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjk1Olx0XHR9XG4gMjk2Olx0fVxuIDI5NzpcdFxuIDI5ODpcdC8qKlxuIDI5OTpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XG4gMzAwOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDMwMTpcdCAqXG4gMzAyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAzMDM6XHQgKi9cbiAzMDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU4NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEVgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJdCYjMzk7cyBhIGtleSBjb25zdGFudCwgYW5kIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2guIEkmIzM5O2xsIHVzZSBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2wg4oCTIHByb2JhYmx5IGEgZ3JlcCBvciBzb21ldGhpbmcgc2ltaWxhciDigJMgYW5kIGxvb2sgZm9yIHRoZSBleGFjdCBzdHJpbmcsIHBheWluZyBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBJcyBpdCBhIGhlYWRlciBmaWxlPyBBIGNvbmZpZyBvcHRpb24/IEEgbWFjcm8gZGVmaW5pdGlvbj8gV2hlcmUgaXMgaXQgYmVpbmcgKnVzZWQqPyBUaGUgY29udGV4dCB3aWxsIGJlIGNyaXRpY2FsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBwcm9wYWdhdGlvbiBhbmQgYW55IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggaXQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBpbXBhY3QuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTk9ZW51bSBzb2Z0bGVhZl90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yOC1cdFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQsXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyOTpcdFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFLFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAtXHRTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFLFxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTgyLVx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTgzOlx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODQtXHRjYXNlIFNXUF9ERVZJQ0VfUkVBRDpcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc4Olx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yODc9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg5LVx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjkwOlx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5MS1cdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYFNXUF9ERVZJQ0VfV1JJVEVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgc2ltcGxlOiBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFdlIG5lZWQgdG8gY2hlY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGBTV1BfREVWSUNFX1dSSVRFYCBmdW5jdGlvbi4gR2l2ZW4gb3VyIGtub3dsZWRnZSwgd2UgYm90aCBrbm93IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIGNvdWxkIGJlIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGEgZmlsZSB3cml0ZSwgYSBkcml2ZXIgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbnRpcmVseSBtb3JlIGNvbXBsZXguIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eSwgaXRzIGlucHV0cyBhbmQgb3V0cHV0cywgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NXUF9ERVZJQ0VfV1JJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTYwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODEtI2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTgyOlx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTgzLVx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mjk9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03Mi0jZGVmaW5lIFNXUF9ERVZJQ0VfTlVNIDNcbmluY2x1ZGUvbGludXgvc3dhcC5oOjczOiNkZWZpbmUgU1dQX0RFVklDRV9XUklURSAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0pXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NC0jZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzEpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQxPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV93cml0YWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE0Mi17XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNDM6XHRyZXR1cm4gc3dwX2VudHJ5KFNXUF9ERVZJQ0VfV1JJVEUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNDQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIFF1aWNrIERpYWdub3N0aWMgQ2hlY2sqKgoKUmlnaHQsIHNvIEkmIzM5O20gY2hhc2luZyBkb3duIGBTV1BfREVWSUNFX1dSSVRFYC4gSXQmIzM5O3MgbG9va2luZyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgY29uZGl0aW9uYWxseSwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIE5hdHVyYWxseSwgdGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhhdCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhpcyBidWlsZC4gTW9yZSBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gSSYjMzk7bGwganVtcCBvdmVyIHRvIHRoYXQgZmlsZSwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMTgxLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBodW50IGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBIb3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgY2x1ZSBhYm91dCB0aGUgY29uZmlnIGZsYWcmIzM5O3Mgc3RhdGUsIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX1NXQVA7XG4gMTcxOlx0XG4gMTcyOlx0XHRzd2l0Y2ggKHR5cGVfbnVtKSB7XG4gMTczOlx0I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbiAxNzQ6XHRcdGNhc2UgU1dQX01JR1JBVElPTl9SRUFEOlxuIDE3NTpcdFx0XHRyZXR1cm4gU09GVExFQUZfTUlHUkFUSU9OX1JFQUQ7XG4gMTc2Olx0XHRjYXNlIFNXUF9NSUdSQVRJT05fUkVBRF9FWENMVVNJVkU6XG4gMTc3Olx0XHRcdHJldHVybiBTT0ZUTEVBRl9NSUdSQVRJT05fUkVBRF9FWENMVVNJVkU7XG4gMTc4Olx0XHRjYXNlIFNXUF9NSUdSQVRJT05fV1JJVEU6XG4gMTc5Olx0XHRcdHJldHVybiBTT0ZUTEVBRl9NSUdSQVRJT05fV1JJVEU7XG4gMTgwOlx0I2VuZGlmXG4gMTgxOlx0I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuIDE4MjpcdFx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuIDE4MzpcdFx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG4gMTg0Olx0XHRjYXNlIFNXUF9ERVZJQ0VfUkVBRDpcbiAxODU6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ7XG4gMTg2Olx0XHRjYXNlIFNXUF9ERVZJQ0VfRVhDTFVTSVZFOlxuIDE4NzpcdFx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX0VYQ0xVU0lWRTtcbiAxODg6XHQjZW5kaWZcbiAxODk6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4gMTkwOlx0XHRjYXNlIFNXUF9IV1BPSVNPTjpcbiAxOTE6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX0hXUE9JU09OO1xuIDE5MjpcdCNlbmRpZlxuIDE5MzpcdFx0Y2FzZSBTV1BfUFRFX01BUktFUjpcbiAxOTQ6XHRcdFx0cmV0dXJuIFNPRlRMRUFGX01BUktFUjtcbiAxOTU6XHRcdH1cbiAxOTY6XHRcbiAxOTc6XHRcdC8qIFVua25vd24gZW50cnkgdHlwZS4gKi9cbiAxOTg6XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiAxOTk6XHRcdHJldHVybiBTT0ZUTEVBRl9OT05FO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgRGV2aWNlIFByaXZhdGUgUGFnZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJiMzOTttIHNlZWluZy4gVG8gZ2V0IHRoZSBiZWhhdmlvciBJIG5lZWQsIHNwZWNpZmljYWxseSBhbGxvd2luZyBgc29mdGxlYWZfdHlwZWAgdG8gcmV0dXJuIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgb3IgYFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQURgLCBJIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBlbmFibGVkLiBJZiBpdCYjMzk7cyBub3QsIHRob3NlIHZhbHVlcyBhcmVuJiMzOTt0IGV2ZW4gYXZhaWxhYmxlLCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuIFNvLCB0aGF0JiMzOTtzIHRoZSBjb3JlIHJlcXVpcmVtZW50OiBgQ09ORklHX0RFVklDRV9QUklWQVRFYC4KCk5vdywgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXRzZWxmIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19aT05FX0RFVklDRWAuICBBbHNvLCB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgZnVuY3Rpb24gaXMgb25seSBkZWZpbmVkIHRvIGNoZWNrIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaWYgYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCBhbmQgYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AgYXJlIHNldC4gVGhlcmVmb3JlLCB0aGlzIGJlY29tZXMgYSBoaWVyYXJjaHkgb2YgZGVwZW5kZW5jaWVzLgoKSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEhvd2V2ZXIsIHNpbmNlIGBERVZJQ0VfUFJJVkFURWAgKmRlcGVuZHMqIG9uIGBaT05FX0RFVklDRWAsIHRoYXQgbWVhbnMgYERFVklDRV9QUklWQVRFYCBlZmZlY3RpdmVseSBzdWJzdW1lcyBgWk9ORV9ERVZJQ0VgLiBTbyBJIGNhbiBlbGltaW5hdGUgYFpPTkVfREVWSUNFYCBhcyBhIGRpcmVjdCBuZWVkLiBGdXJ0aGVybW9yZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBuZWVkZWQgZm9yIGBBUkNIX0hBU19QTURfU09GVExFQVZFU2Agb24gbW9zdCBhcmNoaXRlY3R1cmVzLgoKU28sIGxldCYjMzk7cyBzaW1wbGlmeS4gIElzIGBERVZJQ0VfUFJJVkFURWAgc3VmZmljaWVudCBpbiBhbGwgY2FzZXM/IFllcywgaXQgYXBwZWFycyB0aGF0IGBERVZJQ0VfUFJJVkFURWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHRoZSBvbmx5IGNvbmZpZ3MgdGhhdCBJIG5lZWQuCgpGdW5jdGlvbmFsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBjaGFuZ2VzOgotIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgCi0gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAKLSBgcXVldWVfZm9saW9zX3BtZGAKClRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgd2hpY2ggc3VnZ2VzdHMgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgZm9jdXMgb24gZnV6emluZy4gV29ydGhGdXp6aW5nIHdpbGwgYmUgc2V0IHRvIHRydWUuCgpKdXN0IHRvIHJlY2FwIGFuZCBlbnN1cmUgSSYjMzk7bSBjbGVhciwgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdmVyaWZ5IGFyZToKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBERVZJQ0VfUFJJVkFURWAKCkFuZCB0aGUga2V5IHN5bWJvbHMgdG8gYmUgYXdhcmUgb2YgaW5jbHVkZToKKiAgIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgCiogICBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYAoqICAgYHF1ZXVlX2ZvbGlvc19wbWRgCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGFyZSByZWxhdGVkLgoKYFpPTkVfREVWSUNFYCBpcyBzZWxlY3RlZCBieSBgREVWSUNFX1BSSVZBVEVgLCBidXQgaXQmIzM5O3MgKmRlcGVuZGVkKiBvbiBieSBgREVWSUNFX1BSSVZBVEVgLCBzbyBJIG5lZWQgdG8gbGlzdCBib3RoIGBaT05FX0RFVklDRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuCgpDaGVja2luZyBgREVWSUNFX1BSSVZBVEVgIGFnYWluOiBJIGFtIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzg2CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgUmVsZXZhbnQgQ29kZSoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0JiMzOTtzIGRlcGVuZGVuY3kgaGluZ2VzIG9uIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEltbWVkaWF0ZWx5LCBJIG5lZWQgdG8gbGlzdCBgWk9ORV9ERVZJQ0VgIGFuZCwgZ2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgREVWSUNFX1BSSVZBVEVgLiBJJiMzOTttIGFsc28gZmFpcmx5IGNlcnRhaW4gdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZXMgd2lsbCBiZSBpbXBvcnRhbnQgaGVyZSwgc28gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBuZWVkcyB0byBiZSBpbiB0aGUgbGlzdC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIGFib3V0IGl0cyBzY29wZS4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIGl0JiMzOTtzIHN0YXRpYy4gWWVzLCB0aGVyZSBpdCBpcywgdHVja2VkIGF3YXkgYXMgc3RhdGljIGluIGBtbS9tYWR2aXNlLmNgLiBHb29kLCB0aGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYXMgd2VsbDsgaXQmIzM5O3MgbGlrZWx5IHJlbGV2YW50IGdpdmVuIHRoZSBmb2N1cyBvbiBodWdlIHBhZ2VzLCBhbmQgdGhhdCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gRmluYWxseSwgSSYjMzk7bGwgY2hlY2sgb24gYHF1ZXVlX2ZvbGlvc19wbWRgLCB3aGljaCB3aWxsIGJlIHJlbGV2YW50IGFzIHdlbGwgYW5kIGlzIHN0YXRpYyBpbiBgbW0vbWVtcG9saWN5LmNgLgoKUmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB3aGF0IEkgbmVlZCB0byBwcm92aWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3F1ZXVlX2ZvbGlvc19wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtxdWV1ZV9mb2xpb3NfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjE6NTUuMzMzOTAyNjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2Mzk0ODUzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIxOjU1LjMzMzkxMjc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE3MjQ2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxOWQwM2FhZjc3N2NjMmJmNWUzNjlkYWQxNjVjNjQzODQzZjZjNGI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjM6MjE6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uMDE3ODNkMDE1YWZiNDkgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMjI5Niw2ICsyMjk2LDkgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4gXFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uODcwYmUzOThjNmYzNzQgMTAwNjQ0XFxuLS0tIGEvbW0vbWFkdmlzZS5jXFxuKysrIGIvbW0vbWFkdmlzZS5jXFxuQEAgLTM4NCw2ICszODQsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdG9yaWdfcG1kID0gKnBtZDtcXG4rXFx0XFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuK1xcbiBcXHRcXHRpZiAoaXNfaHVnZV96ZXJvX3BtZChvcmlnX3BtZCkpXFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXFxuaW5kZXggOTE0ZjgxODYzZGI1YTYuLmVkYTgxNzUzOWM3N2VhIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvbGljeS5jXFxuKysrIGIvbW0vbWVtcG9saWN5LmNcXG5AQCAtNjU5LDYgKzY1OSw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIFxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcdGlmICh1bmxpa2VseShwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xcbiBcXHRpZiAoaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSkge1xcbiBcXHRcXHR3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIxOjU2LjAwNzIyNjEyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ2OTY2MTQ4NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICAgIFwicXVldWVfZm9saW9zX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25hbCBjaGVja3MgdG8gc2tpcCBkZXZpY2UgcHJpdmF0ZSBQTUQgZW50cmllcyBpbiBtYWR2aXNlIGFuZCBtZW1wb2xpY3kgb3BlcmF0aW9ucy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSBhbmQgbWJpbmQvc2V0X21lbXBvbGljeS9taWdyYXRlX3BhZ2VzIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE5ZDAzYWFmNzc3Y2MyYmY1ZTM2OWRhZDE2NWM2NDM4NDNmNmM0YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIzOjIxOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi4wMTc4M2QwMTVhZmI0OSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMjk2LDYgKzIyOTYsOSBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiBcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA5MjkyZjYwYjE5YWE3Yy4uODcwYmUzOThjNmYzNzQgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTM4NCw2ICszODQsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRvcmlnX3BtZCA9ICpwbWQ7XG4rXHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkob3JpZ19wbWQpKVxuK1x0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4rXG4gXHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiBcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDkxNGY4MTg2M2RiNWE2Li5lZGE4MTc1MzljNzdlYSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY1OSw2ICs2NTksOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIFx0XHRxcC1cdTAwM2Vucl9mYWlsZWQrKztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1x0aWYgKHVubGlrZWx5KHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgqcG1kKSkpXG4rXHRcdHJldHVybjtcbiBcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xuIFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcbiBcdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fQ09OVElOVUU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMTo1Ni4wMDcyMzA0NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ0OTUyNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFkZGluZyBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KClgIGNoZWNrcywgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmU/IExldCdzIGJyZWFrIGl0IGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrcyBoYXZlIGJlZW4gYWRkZWQgaW4gdGhyZWUga2V5IGFyZWFzOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGluIGBtbS9tYWR2aXNlLmNgLCBhbmQgYHF1ZXVlX2ZvbGlvc19wbWRgIHdpdGhpbiBgbW0vbWVtcG9saWN5LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiAqd2hhdCogaXMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpYD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIGRlZmluaXRpb24gb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbnMgaXQncyBlbmFibGVkLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gdGVsbCB1cy4gVW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHJlbGV2YW50IENPTkZJRyBvcHRpb25zIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQgb24gaXRzIHZhbGlkaXR5IGFuZCBpbXBhY3QuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIxOjU5Ljk1MjE4NzAzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzUyMDUzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTItLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkzOiAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5NC0gKiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTE6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjEyLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI5OC1cXG5tbS9odWdlX21lbW9yeS5jOjIyOTk6XFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpXFxubW0vaHVnZV9tZW1vcnkuYy0yMzAwLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDM0PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTE2LVxcdFxcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMTc6XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMxMTgtXFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzI1Ny1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzozMjU4OlxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9sZF9wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjU5LVxcdFxcdHB0ZV90IGVudHJ5O1xcbi0tXFxubW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTM4Ni1cXHRcXHRvcmlnX3BtZCA9ICpwbWQ7XFxubW0vbWFkdmlzZS5jOjM4NzpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG5tbS9tYWR2aXNlLmMtMzg4LVxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz02Mzk3PXN0YXRpYyB2bV9mYXVsdF90IF9faGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtNjQ3MC1cXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KHZtZi5vcmlnX3BtZCkpKSB7XFxubW0vbWVtb3J5LmM6NjQ3MTpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHZtZi5vcmlnX3BtZCkpXFxubW0vbWVtb3J5LmMtNjQ3Mi1cXHRcXHRcXHRyZXR1cm4gZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoXFx1MDAyNnZtZik7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz02NTM9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY2MS1cXHR9XFxubW0vbWVtcG9saWN5LmM6NjYyOlxcdGlmICh1bmxpa2VseShwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpKVxcbm1tL21lbXBvbGljeS5jLTY2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODY9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXFx0XFx0ICAgIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpIHx8XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjU0OlxcdFxcdCAgICBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU1LVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY1LVxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI2NjpcXHRcXHRcXHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ny1cXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjowMi43MDQyNzU0ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkyOTkwMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgJ3MgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGFjdGl2ZS4gSXQncyBhIGtleSBmdW5jdGlvbiwgYnV0IEkgY2FuJ3QgcXVpdGUgcmVjYWxsIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24ga25vYnMgdGhhdCBlbmFibGUgaXQuIFRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LCBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgaXRzIGRlZmluaXRpb24gb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHJlbGV2YW50IHByZXByb2Nlc3NvciBtYWNyb3MgcmVsYXRlZCB0byBpdHMgZW5hYmxpbmcgY29uZGl0aW9ucy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZyBvcHRpb25zIChvciwgYXQgbGVhc3QsIHRoZSBpbmNsdWRlL2RlcGVuZGVuY3kgc3RydWN0dXJlKSwgdGhhdCBnb3Zlcm4gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCB1c2VkLiBIb3BlZnVsbHksIHRoaXMgZmlsZSB3aWxsIGhhdmUgdGhlIGFuc3dlciwgb3IgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjA1LjY5NzI2ODgxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUylcXG4gNTkxOlxcdFxcbiA1OTI6XFx0LyoqXFxuIDU5MzpcXHQgKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcXG4gNTk0OlxcdCAqIGVudHJ5LlxcbiA1OTU6XFx0ICogQHBtZDogVGhlIFBNRCB0byBjaGVjay5cXG4gNTk2OlxcdCAqXFxuIDU5NzpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBNRCBjb250YWlucyBhIHN3YXAgZW50cnkgdGhhdCByZXByZXNlbnRzIGEgZGV2aWNlIHByaXZhdGVcXG4gNTk4OlxcdCAqIHBhZ2UgbWFwcGluZy4gVGhpcyBpcyB1c2VkIGZvciB6b25lIGRldmljZSBwcml2YXRlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuXFxuIDU5OTpcXHQgKiBzd2FwcGVkIG91dCBidXQgc3RpbGwgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGR1cmluZyB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50XFxuIDYwMDpcXHQgKiBvcGVyYXRpb25zLlxcbiA2MDE6XFx0ICpcXG4gNjAyOlxcdCAqIFJldHVybjogdHJ1ZSBpZiBQTUQgY29udGFpbnMgZGV2aWNlIHByaXZhdGUgZW50cnksIGZhbHNlIG90aGVyd2lzZVxcbiA2MDM6XFx0ICovXFxuIDYwNDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG4gNjA1OlxcdHtcXG4gNjA2OlxcdFxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG4gNjA3OlxcdH1cXG4gNjA4OlxcdFxcbiA2MDk6XFx0I2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgKi9cXG4gNjEwOlxcdFxcbiA2MTE6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDYxMjpcXHR7XFxuIDYxMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdCNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTICovXFxuIDYxNzpcXHRcXG4gNjE4OlxcdC8qKlxcbiA2MTk6XFx0ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjA1LjY5NzM4MDc2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTcxMzg3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBkZXBlbmRzIG9uIGJvdGggYENPTkZJR19aT05FX0RFVklDRWAgYW5kIGBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgLiBOb3csIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIHVzdWFsbHkgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEJ1dCwgYENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU2AuLi4gdGhhdCBvbmUgcmluZ3MgYSBiZWxsIGFzIHBvdGVudGlhbGx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgdXNlci1jb25maWd1cmFibGUsIG9yIGlmIGl0J3Mgc29tZXRoaW5nIGJha2VkIGluIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgaG93IEkgYXBwcm9hY2ggdGhpcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHNlZSBob3cgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZXMuIElzIGl0IGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgdGhhdCdzIGF1dG9tYXRpY2FsbHkgc2V0IGJhc2VkIG9uIHRoZSBgQVJDSGAgc2V0dGluZz8gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjowOC43MTQ1MjIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NDI2NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcwMz1jb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwNS1cXG5tbS9LY29uZmlnOjcwNjpjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5tbS9LY29uZmlnLTcwNy1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjExLjAzMjk2NzE2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzM0NDMwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgQm9vbGVhbiBGbGFnKipcblxuT2theSwgc28gSSd2ZSBzdHVtYmxlZCB1cG9uIGEgaGlkZGVuIGJvb2xlYW4gdmFyaWFibGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgYmVoYXZpb3IuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byB0aGlzIGZsYWcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB0aGVuIHNlZSB3aGF0J3MgYWZmZWN0aW5nIGl0cyB2YWx1ZS4gRmluZGluZyB0aGUgcG9pbnRzIHdoZXJlIHRoZSBib29sZWFuIGlzIGFjdHVhbGx5IHNlbGVjdGVkIChvciBzZXQpIGlzIHRoZSBuZXh0IHZpdGFsIHBpZWNlIG9mIHRoaXMgcHV6emxlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCdzIGRyaXZpbmcgaXRzIHN0YXRlIHRyYW5zaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MTMuNTY2NDEyNjkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQwNzM5ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOS1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL2FybTY0L0tjb25maWc6MjA6XFx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU6XFx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNi1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9MTA5PWNvbmZpZyBQUENfVEhQXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTQtICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6MTE1OiAgICAgICBzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTYtXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMjQtXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC9yaXNjdi9LY29uZmlnOjI1OlxcdHNlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFUyBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NC1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3MzOTAvS2NvbmZpZzo4NTpcXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL3MzOTAvS2NvbmZpZy04Ni1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTktcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03Mi1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiAoUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyKSBcXHUwMDI2XFx1MDAyNiAoWDg2XzY0IHx8IFg4Nl9QQUUpXFxuYXJjaC94ODYvS2NvbmZpZzo3MzpcXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC94ODYvS2NvbmZpZy03NC1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjoxNS45MDcxNjIwNDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2MzE0NDMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgYSBrZXJuZWwgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUE1EIFNvZnRsZWF2ZXMgb24geDg2XzY0KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBBUkNIX0hBU19QTURfU09GVExFQVZFU2AgaW50ZXJhY3RzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb24geDg2XzY0LiBJdCBsb29rcyBsaWtlIHRoZSBrZXJuZWwgc2V0cyBpdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIGRlcGVuZGVuY3kuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYFpPTkVfREVWSUNFYCBoZXJlLiBJIHJlY2FsbCBpdCBpcyBuZWVkZWQuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgYFpPTkVfREVWSUNFYCBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCB6b25lIGFjdHVhbGx5ICpkb2VzKiBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODMwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MTguODcwMzEwMTcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMzNjkwMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjIwLjkwNDAwOTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzI3MjgwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERldmljZSBQcml2YXRlIFBNRCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYFpPTkVfREVWSUNFYCB0aGluZyBpcyBhIHVzZXItY29uZmlndXJhYmxlIG9wdGlvbi4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYW5kIGBxdWV1ZV9mb2xpb3NfcG1kYC4gQWxsIG9mIHRoZXNlIGFyZSBlbnRyeSBwb2ludHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYG1hZHZpc2VgLCBgbWJpbmRgLCBgc2V0X21lbXBvbGljeWAsIGFuZCBgbWlncmF0ZV9wYWdlc2Agc3lzdGVtIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBoZXJlP1xuXG5UaGUgY3J1eCBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGEgY2hlY2sgZm9yIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGlzIHRlbGxzIG1lIHRoZSBnb2FsIGlzIHRvIHNraXAgYW55IHByb2Nlc3Npbmcgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggZW50cmllcyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgbWFya2VkIGFzIFwiZGV2aWNlIHByaXZhdGVcIi4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIHByZXN1bWFibHkgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHJlY2xhaW0sIGludGVyZmVyaW5nIHdpdGggbWVtb3J5IHRoYXQncyBkZWRpY2F0ZWQgdG8gZGV2aWNlIGFjY2Vzcy4gV2UncmUga2VlcGluZyBvdXIgaGFuZHMgb2ZmIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGBaT05FX0RFVklDRWAsIGFuZCBsZWF2aW5nIHRoZSBkZXZpY2UgaW4gY29udHJvbCBvZiBpdHMgZGF0YS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgZnVuY3Rpb24gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNoZWNrIGludGVncmF0ZXMgaW50byBpdHMgZXhpc3RpbmcgbG9naWMgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAnZnJlZWluZycgbWVhbnMgaW4gdGhpcyBjb250ZXh0IHdoZW4gaXQgaXMgc2tpcHBpbmcgdGhlIHByb2Nlc3NpbmcgZm9yIGRldmljZS1wcml2YXRlIGVudHJpZXMuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBpcyBzb21lIGZvcm0gb2Ygb3B0aW1pemF0aW9uLCBvciBhdm9pZGluZyBhbiBlcnJvciBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MjUuMjM2NzQwNzY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODA6XFx0Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjI4MTpcXHRcXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4yMjgyOlxcdHtcXG4yMjgzOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4yMjg0OlxcdFxcdHBtZF90IG9yaWdfcG1kO1xcbjIyODU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yMjg2OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdGxiLVxcdTAwM2VtbTtcXG4yMjg3OlxcdFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuMjI4ODpcXHRcXG4yMjg5OlxcdFxcdHRsYl9jaGFuZ2VfcGFnZV9zaXplKHRsYiwgSFBBR0VfUE1EX1NJWkUpO1xcbjIyOTA6XFx0XFxuMjI5MTpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4yMjkyOlxcdFxcdGlmICghcHRsKVxcbjIyOTM6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrZWQ7XFxuMjI5NDpcXHRcXG4yMjk1OlxcdFxcdG9yaWdfcG1kID0gKnBtZDtcXG4yMjk2OlxcdFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4yMjk3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyOTg6XFx0XFxuMjI5OTpcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG4yMzAwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIzMDE6XFx0XFxuMjMwMjpcXHRcXHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcXG4yMzAzOlxcdFxcdFxcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxuMjMwNDpcXHRcXHRcXHRcXHRcXHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XFxuMjMwNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzA2OlxcdFxcdH1cXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xcbjIzMDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MjUuMjM3MDI1NTU3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjczMTM0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgbW0vbWFkdmlzZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwYWdlIHRhYmxlIGVudHJpZXMgd2hlbiBgTUFEVl9DT0xEYCBvciBwb3RlbnRpYWxseSBgTUFEVl9QQUdFT1VUYCBpcyBpbnZvbHZlZC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBmaW5lciBwb2ludHM6IHdoYXQncyB0aGUgZXhhY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGFnZSBjYWNoZSwgaG93IGFyZSBkaXJ0eSBwYWdlcyBoYW5kbGVkLCBhbmQgd2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoaXMgcHJvY2Vzcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQganVtcCBvdXQgZnJvbSBhIHF1aWNrIHJldmlldz8gSSB3YW50IHRvIHRoaW5rIHRocm91Z2ggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBvcHRpbWl6YXRpb25zIEkgc2hvdWxkIGtlZXAgaW4gbWluZCBmb3IgcmVsYXRlZCBjb2RlLiBNeSBnb2FsIGlzIHRvIGdhaW4gY2xhcml0eSBvbiB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uIHNvIEkgY2FuIGNvbnNpZGVyIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGxpbWl0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjoyOS42NjQzNDE1MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNzA6XFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbiAzNzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0cGFnZW91dF9hbm9uX29ubHlfZmlsdGVyID0gcGFnZW91dCBcXHUwMDI2XFx1MDAyNiAhdm1hX2lzX2Fub255bW91cyh2bWEpIFxcdTAwMjZcXHUwMDI2XFxuIDM3NDpcXHRcXHRcXHRcXHRcXHRcXHQhY2FuX2RvX2ZpbGVfcGFnZW91dCh2bWEpO1xcbiAzNzU6XFx0XFxuIDM3NjpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDM3NzpcXHRcXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcXG4gMzc4OlxcdFxcdFxcdHBtZF90IG9yaWdfcG1kO1xcbiAzNzk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdFxcdHRsYl9jaGFuZ2VfcGFnZV9zaXplKHRsYiwgSFBBR0VfUE1EX1NJWkUpO1xcbiAzODI6XFx0XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuIDM4MzpcXHRcXHRcXHRpZiAoIXB0bClcXG4gMzg0OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRcXHRvcmlnX3BtZCA9ICpwbWQ7XFxuIDM4NzpcXHRcXHRcXHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSlcXG4gMzg4OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4gMzkxOlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdFxcdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xcbiAzOTQ6XFx0XFx0XFx0XFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjZcXG4gMzk1OlxcdFxcdFxcdFxcdFxcdFxcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XFxuIDM5NjpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiAzOTc6XFx0XFx0XFx0fVxcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjI5LjY2NDUwOTczNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5NDE1NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgcXVldWVfZm9saW9zX3BtZGAgaW4gYG1tL21lbXBvbGljeS5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZm9saW8gcXVldWluZyB3b3JrcywgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gdGhlIGBwbWRgIGxldmVsLiBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSdzIGEgcmVhc29uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBiZWluZyBmbGFnZ2VkLiBHaXZlbiB0aGF0IHRoaXMgaXMgaW4gYG1tL21lbXBvbGljeS5jYCwgSSdtIGdvaW5nIHRvIGFzc3VtZSBpdCdzIHJlbGF0ZWQgdG8gbWVtb3J5IHBvbGljaWVzLCB3aGljaCBtZWFucyBJIHNob3VsZCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIE5VTUEsIG1pZ3JhdGlvbiwgYW5kIGFsbG9jYXRpb24gZmxhZ3MgYXQgdGhpcyBwb2ludC4gSSBuZWVkIHRvIGRldGVybWluZTogV2hhdCdzIHRoZSBzcGVjaWZpYyByb2xlIG9mIGBxdWV1ZV9mb2xpb3NfcG1kYCBpbiB0aGUgY29udGV4dCBvZiB0aGVzZSBwb2xpY2llcz8gSXMgdGhpcyBmdW5jdGlvbiBpbnZvbHZlZCBpbiB0aGUgYWN0dWFsIHF1ZXVpbmcgb2YgZm9saW9zIGZvciBtZW1vcnkgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgc2V0IHBvbGljeT8gT3IgaXMgaXQgbW9yZSBvZiBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGVsc2V3aGVyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgcmFjZSBjb25kaXRpb25zIHRoaXMgZnVuY3Rpb24gY291bGQgaW50cm9kdWNlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgbXVsdGktdGhyZWFkZWQgb3IgY29uY3VycmVudCBhY2Nlc3MgY29udGV4dD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBmdW5jdGlvbidzIGRlZmluaXRpb24sIHRoZW4gdHJhY2UgaXRzIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjozMy4wOTM5Mjc1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdFxcdHJldHVybiBub2RlX2lzc2V0KG5pZCwgKnFwLVxcdTAwM2VubWFzaykgPT0gIShmbGFncyBcXHUwMDI2IE1QT0xfTUZfSU5WRVJUKTtcXG4gNjUxOlxcdH1cXG4gNjUyOlxcdFxcbiA2NTM6XFx0c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gNjU0OlxcdHtcXG4gNjU1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY1NjpcXHRcXHRzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpKSB7XFxuIDY1OTpcXHRcXHRcXHRxcC1cXHUwMDNlbnJfZmFpbGVkKys7XFxuIDY2MDpcXHRcXHRcXHRyZXR1cm47XFxuIDY2MTpcXHRcXHR9XFxuIDY2MjpcXHRcXHRpZiAodW5saWtlbHkocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCpwbWQpKSlcXG4gNjYzOlxcdFxcdFxcdHJldHVybjtcXG4gNjY0OlxcdFxcdGZvbGlvID0gcG1kX2ZvbGlvKCpwbWQpO1xcbiA2NjU6XFx0XFx0aWYgKGlzX2h1Z2VfemVyb19mb2xpbyhmb2xpbykpIHtcXG4gNjY2OlxcdFxcdFxcdHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9DT05USU5VRTtcXG4gNjY3OlxcdFxcdFxcdHJldHVybjtcXG4gNjY4OlxcdFxcdH1cXG4gNjY5OlxcdFxcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcXG4gNjcwOlxcdFxcdFxcdHJldHVybjtcXG4gNjcxOlxcdFxcdGlmICghKHFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcXG4gNjcyOlxcdFxcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cXHUwMDNldm1hKSB8fFxcbiA2NzM6XFx0XFx0ICAgICFtaWdyYXRlX2ZvbGlvX2FkZChmb2xpbywgcXAtXFx1MDAzZXBhZ2VsaXN0LCBxcC1cXHUwMDNlZmxhZ3MpKVxcbiA2NzQ6XFx0XFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcbiA2NzU6XFx0fVxcbiA2NzY6XFx0XFxuIDY3NzpcXHQvKlxcbiA2Nzg6XFx0ICogU2NhbiB0aHJvdWdoIGZvbGlvcywgY2hlY2tpbmcgaWYgdGhleSBzYXRpc2Z5IHRoZSByZXF1aXJlZCBjb25kaXRpb25zLFxcbiA2Nzk6XFx0ICogbW92aW5nIHRoZW0gZnJvbSBMUlUgdG8gbG9jYWwgcGFnZWxpc3QgZm9yIG1pZ3JhdGlvbiBpZiB0aGV5IGRvIChvciBub3QpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjozMy4wOTQxNTgzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYwOTU2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQTUQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyBob3cgYG1hZHZpc2VgIGFuZCBgbWVtcG9saWN5YCBvcGVyYXRpb25zIGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcy4gVGhpcyBpcyBnb29kOyBza2lwcGluZyB0aGVzZSBlbnRyaWVzIGluIGNlcnRhaW4gc2l0dWF0aW9ucyBpcyBkZWZpbml0ZWx5IGEgcHJhY3RpY2FsLCByZWFjaGFibGUgb3B0aW1pemF0aW9uLiBJdCdzIGxpa2VseSBnb2luZyB0byBiZSBmdW5jdGlvbmFsLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhdCBwbGF5IGhlcmUgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBaT05FX0RFVklDRWAuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGFuZCBgcXVldWVfZm9saW9zX3BtZGAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBwYXRjaCBpbnRlcmFjdHMgd2l0aCB0aGVzZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBgWk9ORV9ERVZJQ0VgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gT3IsIGlzIHRoaXMgZGVwZW5kZW50IG9uIGFub3RoZXIgY29uZmlnLCBuYW1lbHkgYERFVklDRV9QUklWQVRFYD8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIFRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzA4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6MzcuMDU1MTE4MzE3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc0OTY5MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfUFJJVkFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY2LVxcbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjozOS4zMzAwOTUyNjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNTYxNTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBvZiBERVZJQ0VfUFJJVkFURSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyB0aWVkIHRvIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW5mbHVlbmNlLiBXaGF0IGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIG90aGVyIHBpZWNlcyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IElzIGl0IGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBjb21wcmVoZW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBlYXNpbHkuIEl0J3MgdGltZSB0byBtYXAgb3V0IHRoaXMgZGVwZW5kZW5jeSBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjQyLjI0NTcxMzA5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjY3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjY3OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNjg6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNjk6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNzA6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNzE6XFx0XFxuMTI3MjpcXHRcXHRoZWxwXFxuMTI3MzpcXHRcXHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXFxuMTI3NDpcXHRcXHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcXG4xMjc1OlxcdFxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbjEyNzY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjQyLjI0NTg3NTQ1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM0OTI4NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEZXZpY2UtU3BlY2lmaWMgTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgcmVsYXRlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYSBkZXZpY2UuIEZpcnN0IHRob3VnaHQsIHllYWgsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBERVZJQ0VfUFJJVkFURWAgKmRlcGVuZHMqIG9uIGBaT05FX0RFVklDRWAuIFRoYXQncyB0aGUgYmFzZWxpbmUuIE5vdywgSSByZW1lbWJlciBzZWVpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgYmVpbmcgdXNlZCBzb21ld2hlcmUsIGFuZCBJIHN1c3BlY3QgdGhhdCdzIHRoZSBrZXkuIExldCBtZSBzZWUuLi4geWVzISBJdCB1c2VzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGlzIGxpa2VseSBnb2luZyB0byBiZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1bmN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDk0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjo0NS4yODA4MDcyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTU4MjM0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXFx0XFx0XFx0XFx0cHJlc2VudCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjgyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg2LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjEtXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzYyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM5LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XFxuLS1cXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTI2Ni1cXHRcXHQgKi9cXG5tbS9obW0uYzoyNjc6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTI2OC1cXHRcXHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0yNzAtXFx0XFx0XFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcXG5tbS9obW0uYzoyNzE6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yNzItXFx0XFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0yODQtXFxubW0vaG1tLmM6Mjg1OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjg2LVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9obW0uYz0zMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmMtMzQ1LVxcbm1tL2htbS5jOjM0NjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMzQ3LVxcdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXFx1MDAzZXBnbWFwLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMzUzLVxcbm1tL2htbS5jOjM1NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTM1NS1cXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTM3Mi1cXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG5tbS9obW0uYzozNzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zNzQtXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyNy1cXHRcXHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE4Mjg6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4MjktXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMi1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE4MzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzNC1cXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTU4PXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3OS1cXHRcXHRcXHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjU4MDpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MS1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDM0PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTI3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzEyODpcXHRcXHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTMxMjktXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg4Mj1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00OTExLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDkxMjpcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy00OTEzLVxcdFxcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xcbi0tXFxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy05ODMtXFx0XFx0fVxcbm1tL21lbW9yeS5jOjk4NDpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTk4NS1cXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuLS1cXG5tbS9tZW1vcnkuYy0xMDA4LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjEwMDk6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbW9yeS5jLTEwMTAtXFx0XFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xcbi0tXFxubW0vbWVtb3J5LmM9MTcyOD1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzM3LVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL21lbW9yeS5jOjE3Mzg6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jLTE3MzktXFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz00NzQyPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc2OC1cXHRcXHRcXHRyZXQgPSByZW1vdmVfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeSh2bWYpO1xcbm1tL21lbW9yeS5jOjQ3Njk6XFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy00NzcwLVxcdFxcdFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzA6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cXHRcXHQgICAgIShtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkpIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgxLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTgyOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODMtXFx0XFx0XFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQ1PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI5OS1cXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzozMDA6XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMDEtXFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzMtXFx0XFx0XFx0XFx0XFx0TUlHUkFURV9QRk5fTUlHUkFURTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjMzNDpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzM1LVxcdFxcdFxcdFxcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMzUtXFx0XFx0XFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcXG5tbS9tcHJvdGVjdC5jOjIzNjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL21wcm90ZWN0LmMtMjM3LVxcdFxcdC8qXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg0OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcyLVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzAtXFx0XFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEzMTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMi1cXHRcXHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbi0tXFxubW0vcm1hcC5jPTI0MTQ9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI2MDItXFxubW0vcm1hcC5jOjI2MDM6XFx0XFx0XFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XFxubW0vcm1hcC5jLTI2MDQtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjo0Ny42MzA0MTAxODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NjE1MDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBNYWNybyoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgaGVhZGVyIGZpbGUgYW5kIHNlZSBob3cgdGhpcyBtYWNybyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBrbm93IHRoaXMgY29kZSwgc28gSSdsbCB3YW50IHRvIGNoZWNrIGFyb3VuZCBsaW5lIDI4NyBvZiB0aGF0IGZpbGUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIGRlZmluaXRpb25zIGxpa2UgdGhpcyB3b3VsZCBzaXQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEknbSBzdXJlIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBiZWhpbmQgdGhpcyBtYWNyby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMjo1MC42NzY1NjMyMzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NTpcXHQgKi9cXG4gMjc2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbiAyNzk6XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHQvKipcXG4gMjgyOlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG4gMjgzOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMjg0OlxcdCAqXFxuIDI4NTpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMjg2OlxcdCAqL1xcbiAyODc6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuIDI5MDpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbiAyOTE6XFx0XFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxcbiAyOTI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI5MzpcXHRcXHRkZWZhdWx0OlxcbiAyOTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTU6XFx0XFx0fVxcbiAyOTY6XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHQvKipcXG4gMjk5OlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XFxuIDMwMDpcXHQgKiBAZW50cnk6IExlYWYgZW50cnkuXFxuIDMwMTpcXHQgKlxcbiAzMDI6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMzAzOlxcdCAqL1xcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoc29mdGxlYWZfdCBlbnRyeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjI6NTAuNjc2NjY1MTExWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODkyMTIzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgaXMgZGVmaW5lZCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gSXQncyBhIGtleSBjb25zdGFudCwgYW5kIEkgbmVlZCB0aGUgY29udGV4dC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNlYXJjaC4gSSdsbCB1c2UgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29sIOKAkyBwcm9iYWJseSBhIGdyZXAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFuZCBsb29rIGZvciB0aGUgZXhhY3Qgc3RyaW5nLCBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gSXMgaXQgYSBoZWFkZXIgZmlsZT8gQSBjb25maWcgb3B0aW9uPyBBIG1hY3JvIGRlZmluaXRpb24/IFdoZXJlIGlzIGl0IGJlaW5nICp1c2VkKj8gVGhlIGNvbnRleHQgd2lsbCBiZSBjcml0aWNhbC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBwcm9wYWdhdGlvbiBhbmQgYW55IHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggaXQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBpbXBhY3QuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1ODUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjUzLjQ2NTg4MTIyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NzA4Mzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xOT1lbnVtIHNvZnRsZWFmX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgtXFx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRCxcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyOTpcXHRTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURSxcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMC1cXHRTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFLFxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTYwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE4Mi1cXHRjYXNlIFNXUF9ERVZJQ0VfV1JJVEU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTgzOlxcdFxcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODQtXFx0Y2FzZSBTV1BfREVWSUNFX1JFQUQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzg6XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3OS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yODc9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODktXFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI5MDpcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5MS1cXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjU1LjUxMjk3Nzc3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMwMDQ1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgU1dQX0RFVklDRV9XUklURWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNpbXBsZTogbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFdlIG5lZWQgdG8gY2hlY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGBTV1BfREVWSUNFX1dSSVRFYCBmdW5jdGlvbi4gR2l2ZW4gb3VyIGtub3dsZWRnZSwgd2UgYm90aCBrbm93IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzIGNvdWxkIGJlIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGEgZmlsZSB3cml0ZSwgYSBkcml2ZXIgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbnRpcmVseSBtb3JlIGNvbXBsZXguIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eSwgaXRzIGlucHV0cyBhbmQgb3V0cHV0cywgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIyOjU4LjU0MzAyNjg2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTg2NzgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTV1BfREVWSUNFX1dSSVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODEtI2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE4MjpcXHRjYXNlIFNXUF9ERVZJQ0VfV1JJVEU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTgzLVxcdFxcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03Mi0jZGVmaW5lIFNXUF9ERVZJQ0VfTlVNIDNcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3MzojZGVmaW5lIFNXUF9ERVZJQ0VfV1JJVEUgKE1BWF9TV0FQRklMRVMrU1dQX0hXUE9JU09OX05VTStTV1BfTUlHUkFUSU9OX05VTSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NC0jZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUytTV1BfSFdQT0lTT05fTlVNK1NXUF9NSUdSQVRJT05fTlVNKzEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xNDE9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3dyaXRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE0Mi17XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTQzOlxcdHJldHVybiBzd3BfZW50cnkoU1dQX0RFVklDRV9XUklURSwgb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNDQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyMzowMC42MTQ5MDMxNDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMDA1NjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IEEgUXVpY2sgRGlhZ25vc3RpYyBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gY2hhc2luZyBkb3duIGBTV1BfREVWSUNFX1dSSVRFYC4gSXQncyBsb29raW5nIGxpa2UgaXQncyBkZWZpbmVkIGNvbmRpdGlvbmFsbHksIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBOYXR1cmFsbHksIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGV0aGVyIHRoYXQgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIGluIHRoaXMgYnVpbGQuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIEknbGwganVtcCBvdmVyIHRvIHRoYXQgZmlsZSwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMTgxLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBodW50IGFuZCBzZWUgd2hhdCdzIHdoYXQuIEhvcGVmdWxseSwgSSdsbCBmaW5kIHRoZSBkZWZpbml0aW9uLCBvciBhdCBsZWFzdCBhIGNsdWUgYWJvdXQgdGhlIGNvbmZpZyBmbGFnJ3Mgc3RhdGUsIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjIzOjAzLjgzNDk2MjI3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcdFxcdHJldHVybiBTT0ZUTEVBRl9TV0FQO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRzd2l0Y2ggKHR5cGVfbnVtKSB7XFxuIDE3MzpcXHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbiAxNzQ6XFx0XFx0Y2FzZSBTV1BfTUlHUkFUSU9OX1JFQUQ6XFxuIDE3NTpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfTUlHUkFUSU9OX1JFQUQ7XFxuIDE3NjpcXHRcXHRjYXNlIFNXUF9NSUdSQVRJT05fUkVBRF9FWENMVVNJVkU6XFxuIDE3NzpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfTUlHUkFUSU9OX1JFQURfRVhDTFVTSVZFO1xcbiAxNzg6XFx0XFx0Y2FzZSBTV1BfTUlHUkFUSU9OX1dSSVRFOlxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuIFNPRlRMRUFGX01JR1JBVElPTl9XUklURTtcXG4gMTgwOlxcdCNlbmRpZlxcbiAxODE6XFx0I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbiAxODI6XFx0XFx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxcbiAxODM6XFx0XFx0XFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xcbiAxODQ6XFx0XFx0Y2FzZSBTV1BfREVWSUNFX1JFQUQ6XFxuIDE4NTpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDtcXG4gMTg2OlxcdFxcdGNhc2UgU1dQX0RFVklDRV9FWENMVVNJVkU6XFxuIDE4NzpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX0VYQ0xVU0lWRTtcXG4gMTg4OlxcdCNlbmRpZlxcbiAxODk6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbiAxOTA6XFx0XFx0Y2FzZSBTV1BfSFdQT0lTT046XFxuIDE5MTpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfSFdQT0lTT047XFxuIDE5MjpcXHQjZW5kaWZcXG4gMTkzOlxcdFxcdGNhc2UgU1dQX1BURV9NQVJLRVI6XFxuIDE5NDpcXHRcXHRcXHRyZXR1cm4gU09GVExFQUZfTUFSS0VSO1xcbiAxOTU6XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHQvKiBVbmtub3duIGVudHJ5IHR5cGUuICovXFxuIDE5ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoMSk7XFxuIDE5OTpcXHRcXHRyZXR1cm4gU09GVExFQUZfTk9ORTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjM6MDMuODM1MDc0MTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzM3MTgzMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBEZXZpY2UgUHJpdmF0ZSBQYWdlcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHdoYXQgSSdtIHNlZWluZy4gVG8gZ2V0IHRoZSBiZWhhdmlvciBJIG5lZWQsIHNwZWNpZmljYWxseSBhbGxvd2luZyBgc29mdGxlYWZfdHlwZWAgdG8gcmV0dXJuIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgb3IgYFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQURgLCBJIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBlbmFibGVkLiBJZiBpdCdzIG5vdCwgdGhvc2UgdmFsdWVzIGFyZW4ndCBldmVuIGF2YWlsYWJsZSwgYW5kIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiBTbywgdGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50OiBgQ09ORklHX0RFVklDRV9QUklWQVRFYC5cblxuTm93LCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpdHNlbGYgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1pPTkVfREVWSUNFYC4gIEFsc28sIHRoZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBmdW5jdGlvbiBpcyBvbmx5IGRlZmluZWQgdG8gY2hlY2sgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBpZiBib3RoIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTYCBhcmUgc2V0LiBUaGVyZWZvcmUsIHRoaXMgYmVjb21lcyBhIGhpZXJhcmNoeSBvZiBkZXBlbmRlbmNpZXMuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZSByZXF1aXJlZCBjb25maWdzIGFzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBaT05FX0RFVklDRWAsIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBIb3dldmVyLCBzaW5jZSBgREVWSUNFX1BSSVZBVEVgICpkZXBlbmRzKiBvbiBgWk9ORV9ERVZJQ0VgLCB0aGF0IG1lYW5zIGBERVZJQ0VfUFJJVkFURWAgZWZmZWN0aXZlbHkgc3Vic3VtZXMgYFpPTkVfREVWSUNFYC4gU28gSSBjYW4gZWxpbWluYXRlIGBaT05FX0RFVklDRWAgYXMgYSBkaXJlY3QgbmVlZC4gRnVydGhlcm1vcmUsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgbmVlZGVkIGZvciBgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNgIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcy5cblxuU28sIGxldCdzIHNpbXBsaWZ5LiAgSXMgYERFVklDRV9QUklWQVRFYCBzdWZmaWNpZW50IGluIGFsbCBjYXNlcz8gWWVzLCBpdCBhcHBlYXJzIHRoYXQgYERFVklDRV9QUklWQVRFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgdGhlIG9ubHkgY29uZmlncyB0aGF0IEkgbmVlZC5cblxuRnVuY3Rpb25hbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgY2hhbmdlczpcbi0gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGBcbi0gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWBcbi0gYHF1ZXVlX2ZvbGlvc19wbWRgXG5cblRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgd2hpY2ggc3VnZ2VzdHMgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgZm9jdXMgb24gZnV6emluZy4gV29ydGhGdXp6aW5nIHdpbGwgYmUgc2V0IHRvIHRydWUuXG5cbkp1c3QgdG8gcmVjYXAgYW5kIGVuc3VyZSBJJ20gY2xlYXIsIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHZlcmlmeSBhcmU6XG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBERVZJQ0VfUFJJVkFURWBcblxuQW5kIHRoZSBrZXkgc3ltYm9scyB0byBiZSBhd2FyZSBvZiBpbmNsdWRlOlxuKiAgIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgXG4qICAgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWBcbiogICBgcXVldWVfZm9saW9zX3BtZGBcblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGFyZSByZWxhdGVkLlxuXG5gWk9ORV9ERVZJQ0VgIGlzIHNlbGVjdGVkIGJ5IGBERVZJQ0VfUFJJVkFURWAsIGJ1dCBpdCdzICpkZXBlbmRlZCogb24gYnkgYERFVklDRV9QUklWQVRFYCwgc28gSSBuZWVkIHRvIGxpc3QgYm90aCBgWk9ORV9ERVZJQ0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLlxuXG5DaGVja2luZyBgREVWSUNFX1BSSVZBVEVgIGFnYWluOiBJIGFtIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjQ6MTguMTcyMjYwMzg0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjc6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI2ODpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI2OTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI3MDpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI3MTpcXHRcXG4xMjcyOlxcdFxcdGhlbHBcXG4xMjczOlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjc0OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNzU6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI3NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6MjQ6MTguMTcyMzkzMzY0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDQyNzAxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIFJlbGV2YW50IENvZGUqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0J3MgZGVwZW5kZW5jeSBoaW5nZXMgb24gYFpPTkVfREVWSUNFYC4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJbW1lZGlhdGVseSwgSSBuZWVkIHRvIGxpc3QgYFpPTkVfREVWSUNFYCBhbmQsIGdpdmVuIHRoZSBjb250ZXh0LCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYERFVklDRV9QUklWQVRFYC4gSSdtIGFsc28gZmFpcmx5IGNlcnRhaW4gdGhhdCB0cmFuc3BhcmVudCBodWdlcGFnZXMgd2lsbCBiZSBpbXBvcnRhbnQgaGVyZSwgc28gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBuZWVkcyB0byBiZSBpbiB0aGUgbGlzdC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiBhYm91dCBpdHMgc2NvcGUuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBpdCdzIHN0YXRpYy4gWWVzLCB0aGVyZSBpdCBpcywgdHVja2VkIGF3YXkgYXMgc3RhdGljIGluIGBtbS9tYWR2aXNlLmNgLiBHb29kLCB0aGF0J3MgaW1wb3J0YW50IGZvciB0aGUgY29udGV4dC4gSSdsbCBuZWVkIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFzIHdlbGw7IGl0J3MgbGlrZWx5IHJlbGV2YW50IGdpdmVuIHRoZSBmb2N1cyBvbiBodWdlIHBhZ2VzLCBhbmQgdGhhdCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gRmluYWxseSwgSSdsbCBjaGVjayBvbiBgcXVldWVfZm9saW9zX3BtZGAsIHdoaWNoIHdpbGwgYmUgcmVsZXZhbnQgYXMgd2VsbCBhbmQgaXMgc3RhdGljIGluIGBtbS9tZW1wb2xpY3kuY2AuXG5cblJpZ2h0LCBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB3aGF0IEkgbmVlZCB0byBwcm92aWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc4NiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzoyNDoyMi44NzY2NjY0MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY5OTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJxdWV1ZV9mb2xpb3NfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsIGNoZWNrcyB0byBza2lwIGRldmljZSBwcml2YXRlIFBNRCBlbnRyaWVzIGluIG1hZHZpc2UgYW5kIG1lbXBvbGljeSBvcGVyYXRpb25zLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlIGFuZCBtYmluZC9zZXRfbWVtcG9saWN5L21pZ3JhdGVfcGFnZXMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[1] Phase: Succeeded StartedAt: 2026-07-07 23:24:50 +0000 UTC FinishedAt: 2026-07-07 23:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 23:24:50 +0000 UTC FinishedAt: 2026-07-07 23:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2] Phase: Succeeded StartedAt: 2026-07-07 23:24:50 +0000 UTC FinishedAt: 2026-07-08 03:32:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 23:24:50 +0000 UTC FinishedAt: 2026-07-08 03:32:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 23:24:50 +0000 UTC FinishedAt: 2026-07-07 23:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 23:24:50 +0000 UTC FinishedAt: 2026-07-07 23:24:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2290678625/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 23:25:11 +0000 UTC FinishedAt: 2026-07-07 23:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 23:25:11 +0000 UTC FinishedAt: 2026-07-07 23:51:56 +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:*57eed14e-688a-42ca-97b7-14366e6c532f,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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2290678625/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": "7480fcc2-dea2-4e01-9ee6-71082d9179cd", "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-workflowkkh8m/series-workflowkkh8m-build-action-3376990351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 23:25:11 +0000 UTC FinishedAt: 2026-07-07 23:51:45 +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:*57eed14e-688a-42ca-97b7-14366e6c532f,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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2290678625/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": "7480fcc2-dea2-4e01-9ee6-71082d9179cd", "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-workflowkkh8m/series-workflowkkh8m-build-action-3376990351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 23:51:56 +0000 UTC FinishedAt: 2026-07-07 23:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 23:51:56 +0000 UTC FinishedAt: 2026-07-07 23:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 23:51:56 +0000 UTC FinishedAt: 2026-07-07 23:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 23:51:56 +0000 UTC FinishedAt: 2026-07-07 23:52:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2911358132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 23:52:17 +0000 UTC FinishedAt: 2026-07-07 23:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 23:52:17 +0000 UTC FinishedAt: 2026-07-07 23:54:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7480fcc2-dea2-4e01-9ee6-71082d9179cd,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-workflowkkh8m/series-workflowkkh8m-build-action-3376990351/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-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 23:54:31 +0000 UTC FinishedAt: 2026-07-07 23:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 23:54:31 +0000 UTC FinishedAt: 2026-07-07 23:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 23:54:31 +0000 UTC FinishedAt: 2026-07-08 00:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 23:54:31 +0000 UTC FinishedAt: 2026-07-08 00:22:54 +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:*57eed14e-688a-42ca-97b7-14366e6c532f,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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2911358132/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": "3d2aad4c-7f79-49ee-b996-5ce3628ca3b2", "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-workflowkkh8m/series-workflowkkh8m-build-action-500313728/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 23:54:31 +0000 UTC FinishedAt: 2026-07-08 00:19:39 +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:*57eed14e-688a-42ca-97b7-14366e6c532f,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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2911358132/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": "3d2aad4c-7f79-49ee-b996-5ce3628ca3b2", "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-workflowkkh8m/series-workflowkkh8m-build-action-500313728/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 00:22:54 +0000 UTC FinishedAt: 2026-07-08 00:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 00:22:54 +0000 UTC FinishedAt: 2026-07-08 00:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 00:22:54 +0000 UTC FinishedAt: 2026-07-08 00:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 00:22:54 +0000 UTC FinishedAt: 2026-07-08 00:24:46 +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:*3d2aad4c-7f79-49ee-b996-5ce3628ca3b2,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-workflowkkh8m/series-workflowkkh8m-build-action-500313728/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-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 03:32:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 03:32:06 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},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:*7480fcc2-dea2-4e01-9ee6-71082d9179cd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d2aad4c-7f79-49ee-b996-5ce3628ca3b2,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-workflowkkh8m/series-workflowkkh8m-build-action-3376990351/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-workflowkkh8m/series-workflowkkh8m-build-action-500313728/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 00:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 00:25:03 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2363618781/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 00:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 00:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 00:24:56 +0000 UTC FinishedAt: 2026-07-08 00:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 00:25:07 +0000 UTC FinishedAt: 2026-07-08 03:32:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkkh8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_free_huge_pmd","madvise_cold_or_pageout_pte_range","queue_folios_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE"],"series_id":"36933561-6c0f-41f5-9b54-8542fd66184f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 00:25:07 +0000 UTC FinishedAt: 2026-07-08 03:31:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7480fcc2-dea2-4e01-9ee6-71082d9179cd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d2aad4c-7f79-49ee-b996-5ce3628ca3b2,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-workflowkkh8m/series-workflowkkh8m-build-action-3376990351/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-workflowkkh8m/series-workflowkkh8m-build-action-500313728/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-workflowkkh8m/series-workflowkkh8m-convert-artifact-2363618781/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,}