Name: series-workflowjj9cf Phase: Succeeded StartedAt: 2026-08-24 17:46:02 +0000 UTC FinishedAt: 2026-08-24 22:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[0] Phase: Succeeded StartedAt: 2026-08-24 17:46:02 +0000 UTC FinishedAt: 2026-08-24 18:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 17:46:02 +0000 UTC FinishedAt: 2026-08-24 18:47:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "900e9a22-d62a-41cf-a145-d0e01d7cebbf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pktgen_thread_write", "pktgen_device_event" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfUEtUR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93cml0ZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5fZGV2aWNlX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gYnkgZXhwYW5kaW5nIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIHRvIGNvdmVyIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCBhbmQgYHQtXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDMxMDUwMjUzYjZkNmVkNjUwNTg0NmUxZmIzM2M1YzkzYTdiZThkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjE3OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDdmODFhZWQ0NjY3MjMuLjRmYjE4NTM1ODliMzEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDMyLDE0ICYjNDM7MjAzMiwxNyBAQCBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxuIFx0Ym9vbCBleGFjdCA9IChyZW1vdmUgPT0gRklORCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIFx1MDAyNnBuLVx1MDAzZXBrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XG4gXHRcdGlmIChwa3RfZGV2KSB7XG4gXHRcdFx0aWYgKHJlbW92ZSkge1xuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmsgPSAxO1xuIFx0XHRcdFx0dC1cdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO1xuIFx0XHRcdH1cbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAocGt0X2RldilcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG5AQCAtMzc3Niw3ICYjNDM7Mzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuIFx0c3RydWN0IHBrdGdlbl9kZXYgKnAsICpwa3RfZGV2ID0gTlVMTDtcbiBcdHNpemVfdCBsZW4gPSBzdHJsZW4oaWZuYW1lKTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNnQtXHUwMDNlaWZfbGlzdCwgbGlzdClcbiBcdFx0aWYgKHN0cm5jbXAocC1cdTAwM2VvZGV2bmFtZSwgaWZuYW1lLCBsZW4pID09IDApIHtcbiBcdFx0XHRpZiAocC1cdTAwM2VvZGV2bmFtZVtsZW5dKSB7XG5AQCAtMzc4Nyw3ICYjNDM7Mzc4OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHByX2RlYnVnKFwmIzM0O2ZpbmRfZGV2KCVzKSByZXR1cm5pbmcgJXBcXG5cJiMzNDssIGlmbmFtZSwgcGt0X2Rldik7XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfUEtUR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93cml0ZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5fZGV2aWNlX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmtgIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBieSBleHRlbmRpbmcgdGhlIFJDVSByZWFkIGxvY2sgdG8gY292ZXIgdGhlIGFjY2Vzcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHByb2NmcyB3cml0ZXMgdG8gcGt0Z2VuIHRocmVhZCBmaWxlcyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uIGV2ZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggN2Y4MWFlZDQ2NjcyMy4uNGZiMTg1MzU4OWIzMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTIwMzIsMTQgJiM0MzsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sCiAJYm9vbCBleGFjdCA9IChyZW1vdmUgPT0gRklORCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZhbXA7cG4tJmd0O3BrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiAJCXBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7CiAJCWlmIChwa3RfZGV2KSB7CiAJCQlpZiAocmVtb3ZlKSB7CiAJCQkJcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrID0gMTsKIAkJCQl0LSZndDtjb250cm9sIHw9IFRfUkVNREVWOwogCQkJfQotCQkJYnJlYWs7CiAJCX0KJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaWYgKHBrdF9kZXYpCiYjNDM7CQkJYnJlYWs7CiAJfQogCXJldHVybiBwa3RfZGV2OwogfQpAQCAtMzc3Niw3ICYjNDM7Mzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCXN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7CiAJc2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsICZhbXA7dC0mZ3Q7aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHN0cm5jbXAocC0mZ3Q7b2Rldm5hbWUsIGlmbmFtZSwgbGVuKSA9PSAwKSB7CiAJCQlpZiAocC0mZ3Q7b2Rldm5hbWVbbGVuXSkgewpAQCAtMzc4Nyw3ICYjNDM7Mzc4OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCQkJYnJlYWs7CiAJCX0KIAotCXJjdV9yZWFkX3VubG9jaygpOwogCXByX2RlYnVnKCYjMzQ7ZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxuJiMzNDssIGlmbmFtZSwgcGt0X2Rldik7CiAJcmV0dXJuIHBrdF9kZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIENvcmUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9wa3RnZW4uY2AuIEl0JiMzOTtzIG1vdmluZyB0aGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgY2FsbHMgb3V0IG9mIGBwa3RnZW5fZmluZF9kZXYoKWAgYW5kIGludG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24gYF9fcGt0Z2VuX05OX3RocmVhZHMoKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgKm1pZ2h0KiBiZSBjbGVhbmVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLgoKV2FpdCBhIHNlY29uZC4uLiBkb2VzbiYjMzk7dCBgcGt0Z2VuX2ZpbmRfZGV2KClgIGdldCBjYWxsZWQgZnJvbSAqb3RoZXIqIHBsYWNlcyBiZXNpZGVzIGp1c3QgYF9fcGt0Z2VuX05OX3RocmVhZHMoKWA/IFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIGxvY2sgc2VtYW50aWNzLiBJZiB0aGUgUkNVIGNhbGxzIHdlcmUgbW92ZWQgb3V0IG9mIGBwa3RnZW5fZmluZF9kZXYoKWAgYW5kIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gKm90aGVyKiB0aHJlYWRzIHdoaWNoIGhhdmVuJiMzOTt0IGluY29ycG9yYXRlZCB0aGUgY2FsbHMsIHdlIG1heSBoYXZlIGludHJvZHVjZWQgYSByYWNlIGNvbmRpdGlvbi4gSSBuZWVkIHRvIGtub3cgd2hlcmUgYWxsIGBwa3RnZW5fZmluZF9kZXYoKWAgaXMgdXNlZC4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwIGNvbW1hbmQgYW5kIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9maW5kX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQ4ND1zdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxubmV0L2NvcmUvcGt0Z2VuLmMtNDg2LVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MjAyNz1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMzUtXHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjIwMzY6XHRcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XG5uZXQvY29yZS9wa3RnZW4uYy0yMDM3LVx0XHRpZiAocGt0X2Rldikge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM3MDY9c3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzc3NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjM3NzY6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBpbnRvIHRoZSBgcGt0Z2VuX2ZpbmRfZGV2YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBwa3RnZW5fZmluZF9kZXZgIGlzIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBlbHNlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaC4uLiBIbW0sIGludGVyZXN0aW5nLiBMb29rcyBsaWtlIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBpcyB0aGUgKm9ubHkqIGNhbGxlci4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgb3IgYXQgbGVhc3QgbmFycm93cyB0aGUgc2NvcGUuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9wa3RnZW4uY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBrdGdlbl9maW5kX2RldmAgaXMgZG9pbmcgd2l0aGluIHRoZSB0aHJlYWQgaW5pdGlhbGl6YXRpb24gY29udGV4dCBhbmQgd2h5IGl0JiMzOTtzIHN0cnVjdHVyZWQgdGhpcyB3YXkuIE15IGV4cGVydCBrbm93bGVkZ2UgdGVsbHMgbWUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYXJlIG1lbW9yeSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgcmF0aW9uYWxlIGZvciBoYXZpbmcgYSBkZWRpY2F0ZWQgdGhyZWFkIGludGVyYWN0aW9uIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9maW5kX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz00ODQ9c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4NTpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICppZm5hbWUsIGJvb2wgZXhhY3QpO1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMjc9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpfX3BrdGdlbl9OTl90aHJlYWRzKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMDM1LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9wa3RnZW4uYzoyMDM2Olx0XHRwa3RfZGV2ID0gcGt0Z2VuX2ZpbmRfZGV2KHQsIGlmbmFtZSwgZXhhY3QpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjAzNy1cdFx0aWYgKHBrdF9kZXYpIHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zNzA2PXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXG5uZXQvY29yZS9wa3RnZW4uYzozNzc2OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxubmV0L2NvcmUvcGt0Z2VuLmMtMzc3Ny1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICppZm5hbWUsIGJvb2wgZXhhY3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBQYWNrZXQgR2VuZXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNlZWluZyBgcGt0Z2VuX2ZpbmRfZGV2YCBiZWluZyBjYWxsZWQsIGFuZCBzb21ldGhpbmcmIzM5O3MgcGluZ2luZyB0aGF0IGl0JiMzOTtzIG9ubHkgaW52b2tlZCBmcm9tIHdpdGhpbiB0aG9zZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgZnVuY3Rpb25zLiBUaGF0IHNlZW1zLi4uc3BlY2lmaWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gSWYgdHJ1ZSwgdGhhdCByZWFsbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsIGdyYXBoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlc2UgYF9fcGt0Z2VuX05OX3RocmVhZHNgIGZ1bmN0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlaXIgb3JpZ2lucyBpcyBlc3NlbnRpYWwgZm9yIHJlYWxseSBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBob3cgdGhpcyBgcGt0Z2VuX2ZpbmRfZGV2YCBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGUgcGFja2V0cyBhcmUgYmVpbmcgZ2VuZXJhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGt0Z2VuX05OX3RocmVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3RocmVhZF9wcm9jX29wcyA9IHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMDI2LS8qIFRoaW5rIGZpbmQgb3IgcmVtb3ZlIGZvciBOTiAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MjAyNzpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAyOC1cdFx0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqaWZuYW1lLCBpbnQgcmVtb3ZlKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwNTM9c3RhdGljIHZvaWQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgY29uc3QgY2hhciAqaWZuYW1lKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwNjMtXG5uZXQvY29yZS9wa3RnZW4uYzoyMDY0Olx0XHRwa3RfZGV2ID0gX19wa3RnZW5fTk5fdGhyZWFkcyhwbiwgaWZuYW1lLCBSRU1PVkUpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjA2NS1cdFx0aWYgKHBrdF9kZXYgPT0gTlVMTClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zODMxPXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zODM4LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzgzOTpcdHBrdF9kZXYgPSBfX3BrdGdlbl9OTl90aHJlYWRzKHQtXHUwMDNlbmV0LCBpZm5hbWUsIEZJTkQpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzg0MC1cdGlmIChwa3RfZGV2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBSQ1UgUmVhZCBMb2NrIFBsYWNlbWVudCBpbiBwa3RnZW4qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAgY2FsbCBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgbW92ZW1lbnQgb2YgYHJjdV9yZWFkX2xvY2soKWAgZnJvbSBpbnNpZGUgYHBrdGdlbl9maW5kX2RldmAgdG8gd2l0aGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYC4KClNwZWNpZmljYWxseSwgdGhlIGNvZGUgc25pcHBldCBmcm9tIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBncmFiYmVkIG15IGF0dGVudGlvbi4gUHJldmlvdXNseSwgYHBrdGdlbl9maW5kX2RldmAgd2FzIHJlc3BvbnNpYmxlIGZvciBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGUgUkNVIHJlYWQgbG9jay4gIE5vdywgdGhlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgdGhlIGNhbGwgdG8gYHBrdGdlbl9maW5kX2RldmAgKmFuZCogdGhlIHN1YnNlcXVlbnQgY2hlY2sgYW5kIG1vZGlmaWNhdGlvbiBvZiBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYC4KCkkgcmVhbGl6ZWQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHNoaWZ0IGltbWVkaWF0ZWx5LiBgcGt0Z2VuX2ZpbmRfZGV2YCByZXR1cm5zIGEgcG9pbnRlciAoYHBrdF9kZXZgKSB0byBhIHN0cnVjdHVyZSBwcm90ZWN0ZWQgYnkgUkNVLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IGJlZm9yZSB0aGUgcGF0Y2gsIHRoZSByZWFkIGxvY2sgd2FzIHJlbGVhc2VkICpiZWZvcmUqIHJldHVybmluZyBgcGt0X2RldmAgZnJvbSBgcGt0Z2VuX2ZpbmRfZGV2YC4gIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29kZSBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2Agd2FzIGFjY2Vzc2luZyBgcGt0X2RldmAgYWZ0ZXIgdGhlIFJDVSByZWFkIGxvY2sgd2FzIGRyb3BwZWQsIHdoaWNoIGlzIGRhbmdlcm91cywgYXMgdGhlIG9iamVjdCBjb3VsZCBoYXZlIGJlZW4gZnJlZWQgY29uY3VycmVudGx5LiBUaGUgc3Vic2VxdWVudCBsaW5lLCBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrID0gMTtgIHdhcyBhIGNsZWFyIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIG9yIGF0IGxlYXN0IGEgZGF0YSByYWNlIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4KCldpdGggdGhlIHBhdGNoLCB0aGUgYHJjdV9yZWFkX2xvY2soKWAgaXMgaGVsZCAqdGhyb3VnaCogdGhlIGFjY2VzcyB0byBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYCwgc2FmZWd1YXJkaW5nIHRoZSBhY2Nlc3MuIFRoaXMgaXMgdGhlIGZpeC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGJlY29tZXM6IGRvZXMgdGhpcyBoYXZlIGFueSBmdW5jdGlvbmFsIGltcGFjdCBiZXlvbmQgdGhlIGZpeCBpdHNlbGY/IEkgY2hlY2tlZCB0aGUgY2FsbGVycyBvZiBgX19wa3RnZW5fTk5fdGhyZWFkc2A6IGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBCb3RoIGp1c3QgY2hlY2sgZm9yIGEgbm9uLU5VTEwgcmV0dXJuIGZyb20gYF9fcGt0Z2VuX05OX3RocmVhZHNgLiBUaGV5IGRvIG5vdCBkZXJlZmVyZW5jZSBgcGt0X2RldmAgYWZ0ZXIgdGhlIGNhbGwuIFRodXMsIHRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGUgaW50ZXJuYWwgbG9naWMgb2YgYF9fcGt0Z2VuX05OX3RocmVhZHNgLiBJdOKAmXMgb25seSB0aGUgaW50ZXJuYWwgYWNjZXNzIHRvIGBwa3RfZGV2LSZndDtyZW1vdmFsX21hcmtgIHRoYXQgaXMgbm93IGNvcnJlY3RseSBSQ1UtcHJvdGVjdGVkLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSBidWcgZml4LCBlbGltaW5hdGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IGdlbmVyYXRpb24gY29kZS4gQmVjYXVzZSBgcGt0Z2VuYCBpcyBrZXJuZWwgY29kZSAoYW5kIGxpa2VseSBlbmFibGVkIGluIGZ1enppbmcpLCBpdCYjMzk7cyBhIGJ1ZyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IGEgbm8tb3AsIGJ1dCBpdCBmaXhlcyBhIHNpZ25pZmljYW50IGRhdGEgcmFjZS4gSSB3aWxsIGNoZWNrIGZvciB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTG9jYXRpbmcgdGhlIENvbXBpbGF0aW9uIFBvaW50IG9mIGBwa3RnZW4uY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBwa3RnZW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIHdpdGhpbiB0aGUgcHJvamVjdC4gSXQmIzM5O3MgYSBrZXkgY29tcG9uZW50LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBidWlsZCBwcm9jZXNzIGlzIGNyaXRpY2FsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBhbmFseXNpcyBJJiMzOTttIGRvaW5nLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbXBpbGF0aW9uLCB3aGljaCBtZWFucyBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBmb3IgYSBNYWtlZmlsZSwgQ01ha2VMaXN0cy50eHQsIG9yIGFueSBvdGhlciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBpbiB0aGUgcHJvamVjdCYjMzk7cyByb290IG9yIHJlbGV2YW50IHN1YmRpcmVjdG9yaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkaXJlY3RpdmVzIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIGBwa3RnZW4uY2Agb3IsIG1vcmUgYnJvYWRseSwgbW9kdWxlcyByZWxhdGVkIHRvIHBhY2tldCBnZW5lcmF0aW9uLiBLbm93aW5nIGl0cyBjb21waWxhdGlvbiBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpbmNsdWRlIHBhdGhzLCBsaW5rZWQgbGlicmFyaWVzLCBhbmQgYW55IGJ1aWxkIGZsYWdzIHVzZWQsIGFsbCBvZiB3aGljaCBhcmUgdml0YWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgb3ZlcmFsbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBuZXQtcHJvY2ZzLm9cbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSAmIzQzOz0gcGt0Z2VuLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQYWNrZXQgR2VuZXJhdG9yIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyBgQ09ORklHX05FVF9QS1RHRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBJIGNhbiBmaW5kIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBlaXRoZXIgYG5ldC9jb3JlL0tjb25maWdgIG9yLCBwZXJoYXBzIG1vcmUgYnJvYWRseSwgYG5ldC9LY29uZmlnYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHJlZmVyZW5jZSB0byBgTkVUX1BLVEdFTmAgd2l0aGluIG9uZSBvZiB0aG9zZSBmaWxlcy4gVGhhdCB3aWxsIHBvaW50IG1lIHRvd2FyZHMgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBsaWtlbHkgYW55IHJlbGV2YW50IGRlZmF1bHRzIGZvciB0aGlzIGZlYXR1cmUuIFRpbWUgdG8gdHJhY2sgaXQgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1BLVEdFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBwa3RnZW5gIFRocmVhZCBJbnRlcmFjdGlvbiB3aXRoIFByb2NmcyoqCgpSaWdodCwgc28gYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAg4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IHByb2Nmcy1kcml2ZW4gY2FsbHMuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhvc2UgZnVuY3Rpb25zIGFjdHVhbGx5IHdvcmtzLiBUaGUgcHJvY2ZzIGludGVyZmFjZSAqaGFzKiB0byBiZSB0aGUgdHJpZ2dlci4KCk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIHNoaWZ0cyB0byB0aGUgd3JpdGUgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBmdW5jdGlvbnMgbGlrZSBgcGt0Z2VuX3RocmVhZF93cml0ZWAgb3Igd2hhdGV2ZXIgc2ltaWxhciBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgdG8gaGFuZGxlIHdyaXRpbmcgdG8gdGhvc2UgcHJvY2ZzIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGNvbW1hbmRzIGdldCBpbnRlcnByZXRlZCBhbmQgdWx0aW1hdGVseSwgd2hlcmUgdGhvc2UgZGV2aWNlLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHRocmVhZCBpbnRlcmFjdGlvbiBoZXJlIGlzIGNydWNpYWwgdG8gc2VlIGhvdyBkZXZpY2VzIGFyZSBhY3R1YWxseSBhZGRlZCBhbmQgbWFya2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVzaWRlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa3RnZW5fYWRkX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQ4Mz1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBzdHJ1Y3QgcGt0Z2VuX2RldiAqaSk7XG5uZXQvY29yZS9wa3RnZW4uYzo0ODQ6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4NS1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0xOTE2PXN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMTk4MS1cdFx0bXV0ZXhfbG9jayhcdTAwMjZwa3RnZW5fdGhyZWFkX2xvY2spO1xubmV0L2NvcmUvcGt0Z2VuLmM6MTk4MjpcdFx0cmV0ID0gcGt0Z2VuX2FkZF9kZXZpY2UodCwgZik7XG5uZXQvY29yZS9wa3RnZW4uYy0xOTgzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cGt0Z2VuX3RocmVhZF9sb2NrKTtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zODAwPXN0YXRpYyBpbnQgYWRkX2Rldl90b190aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM4MzE6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcGt0Z2VuX3RocmVhZF93cml0ZWAqKgoKT2theSwgc28gYHBrdGdlbl90aHJlYWRfd3JpdGVgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGxvb2sgYXQuIFJpZ2h0LCBsZXQmIzM5O3MgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGF0LiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGp1bXAgaW50byBgbmV0L2NvcmUvcGt0Z2VuLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgZW50cnkgcG9pbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IGxpZXMsIHNvIGdldHRpbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nLCBvciBqdXN0IGdlbmVyYWxseSB0cnlpbmcgdG8gZ3JvayBoZXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoaXMgZnVuZGFtZW50YWwgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl90aHJlYWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0xODg2PXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXG5uZXQvY29yZS9wa3RnZW4uYzoxOTE2OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjEtXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoyMDIyOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzA2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCB1c2luZyBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIFBhY2tldCBHZW5lcmF0aW9uIGFuZCBEZXZpY2UgTWFya2luZyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWNrZXQgZ2VuZXJhdGlvbiwgYW5kIG5hdHVyYWxseSwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIHdvbmRlcmluZywgd2hhdCBhYm91dCBgcGt0Z2VuX21hcmtfZGV2aWNlYD8gVGhhdCBmdW5jdGlvbiwgdGhlIGltcGxpY2F0aW9ucyBvZiAqdGhhdCosIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgbmV4dC4gSXMgdGhlcmUgc29tZSBzcGVjaWZpYyBkZXZpY2Ugb3IgY29uZmlndXJhdGlvbiBiZWluZyBwb2ludGVkIHRvd2FyZHMsIG9yIHNvbWUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gYmUgbW9yZSBhd2FyZSBvZj8gV2hhdCBzb3J0IG9mIG9wdGltaXphdGlvbnMgYXJlIGhhcHBlbmluZz8gSSYjMzk7bSBhbHJlYWR5IGltYWdpbmluZyB0aGUgdXNlIGNhc2VzIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaW4gbXkgaGVhZC4gTGV0JiMzOTtzIGRlbHZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa3RnZW5fbWFya19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjA1Mi0gKi9cbm5ldC9jb3JlL3BrdGdlbi5jOjIwNTM6c3RhdGljIHZvaWQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgY29uc3QgY2hhciAqaWZuYW1lKVxubmV0L2NvcmUvcGt0Z2VuLmMtMjA1NC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MjExNT1zdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjEzMy1cdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG5uZXQvY29yZS9wa3RnZW4uYzoyMTM0Olx0XHRwa3RnZW5fbWFya19kZXZpY2UocG4sIGRldi1cdTAwM2VuYW1lKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTIxMzUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpZWQ6IGBwa3RnZW5fbWFya19kZXZpY2VgKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHBrdGdlbl9tYXJrX2RldmljZWAgZ2V0cyB0cmlnZ2VyZWQgZHVyaW5nIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIOKAkyBhIGNsZWFyIHBhdGggb2YgZXhlY3V0aW9uIHRoYXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZS4gTm93LCB0aGUgYnVnIHJlcG9ydCBzcGVjaWZpZXMgYSBkYXRhIHJhY2UsIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYC4gSW50ZXJlc3RpbmcuIFNvLCB0aGUgZml4IGludm9sdmVzIGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBwcm90ZWN0IGFjY2VzcyB0byBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYC4gTWFrZXMgc2Vuc2UsIHByb3RlY3RpbmcgdGhlIHJlYWQgd2l0aCBhIHJlYWQgbG9jayBpcyBhIGxvZ2ljYWwgc29sdXRpb24gdG8gcmVzb2x2ZSB0aGUgcmFjZSBjb25kaXRpb24uCgpXYWl0IGEgc2Vjb25k4oCmIGBwa3RfZGV2YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgYW5kIGZyZWVkIHdpdGggYGtmcmVlX3JjdWA/IFRoYXQmIzM5O3Mgd2hhdCB0aGUgZml4IHN1Z2dlc3RzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGxpZmVjeWNsZSBpbW1lZGlhdGVseSB0byBjb25maXJtIG15IG1lbnRhbCBtb2RlbCBtYXRjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBhbGxvY2F0aW9uIGNvZGUgYW5kIHRyYWNlIHRoZSBmcmVlaW5nIHBhdGggYXMgc29vbiBhcyBJJiMzOTttIGRvbmUgc3VtbWFyaXppbmcuIFRoYXQmIzM5O3Mga2V5IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlLipwa3RfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9MzM4OT1zdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMzk5LVx0cGt0X2Rldi1cdTAwM2VydW5uaW5nID0gMDtcbm5ldC9jb3JlL3BrdGdlbi5jOjM0MDA6XHRrZnJlZV9za2IocGt0X2Rldi1cdTAwM2Vza2IpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzQwMS1cdHBrdF9kZXYtXHUwMDNlc2tiID0gTlVMTDtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zNTE3PXN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTQtXHRcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MzU1NTpcdFx0a2ZyZWVfc2tiKHBrdF9kZXYtXHUwMDNlc2tiKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTYtXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MzgzMT1zdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzg1My1cdGlmIChwa3RfZGV2LVx1MDAzZWZsb3dzID09IE5VTEwpIHtcbm5ldC9jb3JlL3BrdGdlbi5jOjM4NTQ6XHRcdGtmcmVlKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzg1NS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzkxNC1cdHZmcmVlKHBrdF9kZXYtXHUwMDNlZmxvd3MpO1xubmV0L2NvcmUvcGt0Z2VuLmM6MzkxNTpcdGtmcmVlKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzkxNi1cdHJldHVybiBlcnI7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9Mzk4OD1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTQwMTYtXHRcdHB1dF9wYWdlKHBrdF9kZXYtXHUwMDNlcGFnZSk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MDE3Olx0a2ZyZWVfcmN1KHBrdF9kZXYsIHJjdSk7XG5uZXQvY29yZS9wa3RnZW4uYy00MDE4LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBga2ZyZWVfcmN1YCBGaXggaW4gYHBrdGdlbl9yZW1vdmVfZGV2aWNlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBrZnJlZV9yY3UocGt0X2RldiwgcmN1KWAgaXMgaW5kZWVkIHV0aWxpemVkIHdpdGhpbiB0aGUgYHBrdGdlbl9yZW1vdmVfZGV2aWNlYCBmdW5jdGlvbi4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlIHByb3Bvc2VkIGZpeCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBjb3JyZWN0bHkgdGFja2xlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IG9mIHRoZSBgcGt0X2RldmAgc3RydWN0dXJlIHdpdGhpbiB0aGUgYF9fcGt0Z2VuX05OX3RocmVhZHNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgYHJlbW92ZWAgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gVGhlIGNydXggb2YgdGhlIHNvbHV0aW9uIGlzIHRvIG1haW50YWluIHRoZSBgcmN1X3JlYWRfbG9jaygpYCB0aHJvdWdob3V0IHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtJmd0O3JlbW92YWxfbWFya2AuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBtZW1vcnkgaXNuJiMzOTt0IGZyZWVkIHByZW1hdHVyZWx5IHdoaWxlIGl0JiMzOTtzIHN0aWxsIHBvdGVudGlhbGx5IGJlaW5nIGFjY2Vzc2VkLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgZGlzdGluY3QgY2hhbmdlLCBhIGRlbGliZXJhdGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIGFpbWVkIGF0IGltcHJvdmluZyBpdHMgcm9idXN0bmVzcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTkVUX1BLVEdFTmAgbm93LCB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyB3aXRoIGV4aXN0aW5nIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9QS1RHRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zODQ9bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbm5ldC9LY29uZmlnLTM4NS1cbm5ldC9LY29uZmlnOjM4Njpjb25maWcgTkVUX1BLVEdFTlxubmV0L0tjb25maWctMzg3LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IGBjb25maWcgTkVUX1BLVEdFTmAgaW4gYG5ldC9LY29uZmlnYDoKCioqQW5hbHl6aW5nIE5FVF9QS1RHRU4gQ29uZmlndXJhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG5ldC9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSBgY29uZmlnIE5FVF9QS1RHRU5gIHNldHRpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHBhY2tldCBnZW5lcmF0b3IgZmVhdHVyZS4gVGhpcyBtZWFucyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgYW55IGhlbHAgdGV4dCB0aGF0IGNsYXJpZmllcyBpdHMgcHVycG9zZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIGF2YWlsYWJsZT8gSXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyBvbiBvdGhlciBuZXR3b3JrIHN1YnN5c3RlbXMgb3IgbGlicmFyaWVzPyBLbm93aW5nIHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoaXMgaXMgdHlwaWNhbGx5IGVuYWJsZWQgb3IgZGlzYWJsZWQsIGhlbHBpbmcgbWUgYXNzZXNzIHRoZSBsaWtlbHkgdXNhZ2UgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGUgZmVhdHVyZS4gQW5kIG9mIGNvdXJzZSwgdGhlICYjMzQ7aGVscCYjMzQ7IHRleHQgaXMgY3J1Y2lhbC4gVGhhdCYjMzk7cyB3aGVyZSBJ4oCZbGwgZmluZCB0aGUgY29uY2lzZSBkZWZpbml0aW9uLCB1c2UgY2FzZXMsIGFuZCBhbnkgd2FybmluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gYWJzb3JiIHRoaXMgaW5mb3JtYXRpb24gcXVpY2tseSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmb3IgdGhlIHJlc3Qgb2YgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9QS1RHRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zODQ9bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbm5ldC9LY29uZmlnLTM4NS1cbm5ldC9LY29uZmlnOjM4Njpjb25maWcgTkVUX1BLVEdFTlxubmV0L0tjb25maWctMzg3LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgbmV0L0tjb25maWcgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsb2dpYyBiZXR0ZXIuIExldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDM4NiDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgbmV0d29yay1yZWxhdGVkIGZlYXR1cmVzLCBwZXJoYXBzIG9wdGlvbnMgZm9yIHByb3RvY29sIHN1cHBvcnQsIGhhcmR3YXJlIHNlbGVjdGlvbiwgb3IgbWF5YmUgc29tZSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQgcmVsYXRlcyB0byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgZG93biB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHQgIG1haW50YWluIGNhcGFjaXR5IGZvciB0aGUgb3RoZXIgZmxvd3MuIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBzZXJ2ZXJzXG4gMzgxOlx0XHQgIHdpdGggbWFueSBjbGllbnRzIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IERvUyBieSBhIHNpbmdsZSAoc3Bvb2ZlZClcbiAzODI6XHRcdCAgZmxvdyB0aGF0IGdyZWF0bHkgZXhjZWVkcyBhdmVyYWdlIHdvcmtsb2FkLlxuIDM4MzpcdFxuIDM4NDpcdG1lbnUgXCYjMzQ7TmV0d29yayB0ZXN0aW5nXCYjMzQ7XG4gMzg1Olx0XG4gMzg2Olx0Y29uZmlnIE5FVF9QS1RHRU5cbiAzODc6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXCYjMzQ7XG4gMzg4Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFBST0NfRlNcbiAzODk6XHRcdGhlbHBcbiAzOTA6XHRcdCAgVGhpcyBtb2R1bGUgd2lsbCBpbmplY3QgcHJlY29uZmlndXJlZCBwYWNrZXRzLCBhdCBhIGNvbmZpZ3VyYWJsZVxuIDM5MTpcdFx0ICByYXRlLCBvdXQgb2YgYSBnaXZlbiBpbnRlcmZhY2UuICBJdCBpcyB1c2VkIGZvciBuZXR3b3JrIGludGVyZmFjZVxuIDM5MjpcdFx0ICBzdHJlc3MgdGVzdGluZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuICBJZiB5b3UgZG9uJiMzOTt0IHVuZGVyc3RhbmRcbiAzOTM6XHRcdCAgd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJiMzOTt0IG5lZWQgaXQ6IHNheSBOLlxuIDM5NDpcdFxuIDM5NTpcdFx0ICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIHBhY2tldCBnZW5lcmF0b3IgY2FuIGJlIGZvdW5kXG4gMzk2Olx0XHQgIGF0IFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi5yc3RcdTAwM2UuXG4gMzk3Olx0XG4gMzk4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAzOTk6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBrdGdlbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBORVRfUEtUR0VOYCBDb25maWd1cmF0aW9uIGFuZCBBc3NvY2lhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYE5FVF9QS1RHRU5gIGlzc3VlLiBGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyB0aGUgYmFzaWNzIHJpZ2h0LiBJdCYjMzk7cyBjbGVhciB0aGF0IGBORVRfUEtUR0VOYCByZWxpZXMgb24gYm90aCBgSU5FVGAgYW5kIGBQUk9DX0ZTYCwgc28gd2UmIzM5O2xsIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYE5FVF9QS1RHRU5gIHRvIGBFbmFibGVDb25maWdzYCB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBidWlsZCBpc3N1ZXMuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBhY3R1YWwgcHJvYmxlbT8gVGhlIGxvZyBwb2ludHMgdG8gYF9fcGt0Z2VuX05OX3RocmVhZHNgLCB3aGljaCBpcyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIGNhbGxlcnMgb2YgdGhpcyBhcmUgYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAuIEdvdCBpdC4gTGV0JiMzOTtzIHRyYWNlIHRob3NlIGNhbGxzLiBgcGt0Z2VuX2FkZF9kZXZpY2VgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYGFkZF9kZXZfdG9fdGhyZWFkYC4gYHBrdGdlbl9tYXJrX2RldmljZWAgZ2V0cyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBTbywgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLgoKSGFuZyBvbiwgYHBrdGdlbl9kZXZpY2VfZXZlbnRgIGlzIGEgbm90aWZpZXIgY2FsbGJhY2suIEludGVyZXN0aW5nLiBOb3csIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpcyBhIHByb2NmcyB3cml0ZSBjYWxsYmFjay4gT2theSwgbGV0JiMzOTtzIHNlZSwgaXMgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5pdCYjMzk7cyBzdGF0aWMgKmFuZCogaXQmIzM5O3MgYXNzaWduZWQgdG8gYHByb2Nfb3BzYC4gUmlnaHQsIHRoYXQmIzM5O3Mgbm90IHNvbWV0aGluZyB5b3Ugc2VlIGV2ZXJ5IGRheS4gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhlIHNpZ25hdHVyZSBvZiBgcGt0Z2VuX3RocmVhZF93cml0ZWAgaW1tZWRpYXRlbHkgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE1LVxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubmV0L2NvcmUvcGt0Z2VuLmMtMTkxNy1cdFx0XHRcdCAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTcKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIGFwcHJvYWNoOgoKKipFeHBsb3JpbmcgdGhlIER5bmFtaWNzIG9mIEZ1bmN0aW9uIEJlaGF2aW9yKioKCkhtbSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWM/IFRoYXQmIzM5O3MgYW4gaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQuIEl0IGZvcmNlcyBtZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mICYjMzQ7c3RhdGljJiMzNDsgaW4gdGhpcyBjb250ZXh0LiBBbSBJIHRoaW5raW5nIGFib3V0IHN0YXRpYyBpbiB0aGUgY29udGV4dCBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBnZW5lcmFsIGNvbmNlcHQgYXQgcGxheSBoZXJlPwoKSWYgd2UmIzM5O3JlIHRhbGtpbmcgY29kZSwgdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NvcGUuIFN0YXRpYyBmdW5jdGlvbnMsIGFzIEkgdW5kZXJzdGFuZCB0aGVtLCBhcmUgdXN1YWxseSBkZWZpbmVkIHdpdGhpbiBhIGNsYXNzIG9yIG5hbWVzcGFjZSwgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzLiBUaGV5IGxpdmUgYXQgdGhlIGNsYXNzIGxldmVsLiBTbywgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgYW55IGZ1bmN0aW9uICpub3QqIHN0YXRpYyBtdXN0IGJlIHRpZWQgdG8gYW4gaW5zdGFuY2Ugb3Igc29tZXRoaW5nIGVsc2UgdGhhdCBoYXMgc3RhdGUuCgpUaGlzIGxlYWRzIG1lIHRvIGNvbnNpZGVyIGZ1bmN0aW9uIHNpZGUgZWZmZWN0cy4gSWYgYSBmdW5jdGlvbiBjYW4gYWx0ZXIgdGhlIHN0YXRlIG9mIHNvbWV0aGluZywgdGhlbiBpdCBjYW4mIzM5O3QgYmUgc3RhdGljLCByaWdodD8gVGhlIHZlcnkgbmF0dXJlIG9mIGEgc3RhdGljIGZ1bmN0aW9uIGltcGxpZXMgaXQmIzM5O3MgZGV0ZXJtaW5pc3RpYyBiYXNlZCBzb2xlbHkgb24gaXRzIGlucHV0cy4gSWYgdGhlIHN0YXRlIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uIGlzIGNoYW5nZWQsIHRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLCBhbmQgdGhpcyBpcyB3aHkgYSBzdGF0aWMgZnVuY3Rpb24gbmVlZHMgdG8gY2hhbmdlLgoKSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBpZiB3ZSYjMzk7cmUgZXZlbiBsaW1pdGVkIHRvIHByb2dyYW1taW5nIGhlcmUuIFdoYXQgYWJvdXQgaW4gYSBtb3JlIGFic3RyYWN0IG1hdGhlbWF0aWNhbCBzZW5zZT8gQXJlIHRoZXJlIGZ1bmN0aW9ucyB3aGVyZSB0aGVpciBiZWhhdmlvciBpc24mIzM5O3QgZml4ZWQsIGlzbiYjMzk7dCBpbW11dGFibGU/IENhbiBhIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNlIGJlIGR5bmFtaWMsIGNoYW5naW5nIHdpdGggdGltZSBvciBzb21lIG90aGVyIGV4dGVybmFsIGZhY3Rvcj8gVGhpcyBtaWdodCBiZSB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IHRoaW5raW5nIGFib3V0IGZ1bmN0aW9ucyB3aXRoaW4gc3lzdGVtcyB3aXRoIGZlZWRiYWNrIGxvb3BzLgoKVWx0aW1hdGVseSwgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBkb21haW4uIEJ1dCB0aGUgcXVlc3Rpb24gaXMgYSB1c2VmdWwgb25lLiBJdCBmb3JjZXMgbWUgdG8gbG9vayBhdCB0aGUgYm91bmRhcmllcyBiZXR3ZWVuIHRoZSBzdGF0aWMgYW5kIHRoZSBkeW5hbWljLCB0aGUgZGV0ZXJtaW5pc3RpYyBhbmQgdGhlIG5vbi1kZXRlcm1pbmlzdGljLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGluIGhvdyB3ZSBtb2RlbCBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgd29ybGQgYXJvdW5kIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKFthLXpBLVowLTlfXSYjNDM7ICkmIzQzO1xcKj9wa3RnZW5fW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz00ODA9c3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID1cbi0tXG5uZXQvY29yZS9wa3RnZW4uYy00ODItXG5uZXQvY29yZS9wa3RnZW4uYzo0ODM6c3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgc3RydWN0IHBrdGdlbl9kZXYgKmkpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDg0OnN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XG5uZXQvY29yZS9wa3RnZW4uYzo0ODU6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy00ODYtXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4NzpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7XG5uZXQvY29yZS9wa3RnZW4uYzo0ODg6c3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDg5OnN0YXRpYyB2b2lkIHBrdGdlbl9yZXNldF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDkwOnN0YXRpYyB2b2lkIHBrdGdlbl9zdG9wX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbik7XG5uZXQvY29yZS9wa3RnZW4uYy00OTEtXG5uZXQvY29yZS9wa3RnZW4uYzo0OTI6c3RhdGljIHZvaWQgcGt0Z2VuX3N0b3Aoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDkzOnN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy00OTQtc3RhdGljIHZvaWQgZmlsbF9pbWl4X2Rpc3RyaWJ1dGlvbihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTU2NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjU2NjpzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvcGt0Z2VuLmMtNTY3LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz05MTM9c3RhdGljIHNzaXplX3QgZ2V0X2xhYmVscyhjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTk1NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjk1NjpzdGF0aWMgX191MzIgcGt0Z2VuX3JlYWRfZmxhZyhjb25zdCBjaGFyICpmLCBib29sICpkaXNhYmxlKVxubmV0L2NvcmUvcGt0Z2VuLmMtOTU3LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy05ODQtXG5uZXQvY29yZS9wa3RnZW4uYzo5ODU6c3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubmV0L2NvcmUvcGt0Z2VuLmMtOTg2LVx0XHRcdCAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xODcyLVxubmV0L2NvcmUvcGt0Z2VuLmM6MTg3MzpzdGF0aWMgaW50IHBrdGdlbl9pZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubmV0L2NvcmUvcGt0Z2VuLmMtMTg3NC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xODg1LVxubmV0L2NvcmUvcGt0Z2VuLmM6MTg4NjpzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODcte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXG5uZXQvY29yZS9wa3RnZW4uYzoxOTE2OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMTItXG5uZXQvY29yZS9wa3RnZW4uYzoyMDEzOnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubmV0L2NvcmUvcGt0Z2VuLmMtMjAxNC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MjAyNz1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwNTItICovXG5uZXQvY29yZS9wa3RnZW4uYzoyMDUzOnN0YXRpYyB2b2lkIHBrdGdlbl9tYXJrX2RldmljZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIGNvbnN0IGNoYXIgKmlmbmFtZSlcbm5ldC9jb3JlL3BrdGdlbi5jLTIwNTQte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwODQtXG5uZXQvY29yZS9wa3RnZW4uYzoyMDg1OnN0YXRpYyB2b2lkIHBrdGdlbl9jaGFuZ2VfbmFtZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0yMDg2LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE0LVxubmV0L2NvcmUvcGt0Z2VuLmM6MjExNTpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE2LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjE0MC1cbm5ldC9jb3JlL3BrdGdlbi5jOjIxNDE6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwa3RnZW5fZGV2X2dldF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcbm5ldC9jb3JlL3BrdGdlbi5jLTIxNDItXHRcdFx0XHRcdFx0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIxNjEtXG5uZXQvY29yZS9wa3RnZW4uYzoyMTYyOnN0YXRpYyBpbnQgcGt0Z2VuX3NldHVwX2Rldihjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXG5uZXQvY29yZS9wa3RnZW4uYy0yMTYzLVx0XHRcdCAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgY29uc3QgY2hhciAqaWZuYW1lKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIxOTgtICovXG5uZXQvY29yZS9wa3RnZW4uYzoyMTk5OnN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0yMjAwLXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0yNzAwPXN0YXRpYyB1MzIgcGt0Z2VuX2RzdF9tZXRyaWNzW1JUQVhfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI3MDQtXG5uZXQvY29yZS9wa3RnZW4uYzoyNzA1OnN0YXRpYyBpbnQgcGt0Z2VuX291dHB1dF9pcHNlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTI3MDYte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTI4MjA9c3RhdGljIGlubGluZSBfX2JlMTYgYnVpbGRfdGNpKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IGNmaSxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yODI1LVxubmV0L2NvcmUvcGt0Z2VuLmM6MjgyNjpzdGF0aWMgdm9pZCBwa3RnZW5fZmluYWxpemVfc2tiKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcGt0Z2VuLmMtMjgyNy1cdFx0XHRcdGludCBkYXRhbGVuKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI5MDUtXG5uZXQvY29yZS9wa3RnZW4uYzoyOTA2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvcGt0Z2VuLmMtMjkwNy1cdFx0XHRcdFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MzE5MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTktXG5uZXQvY29yZS9wa3RnZW4uYzozMjAwOnN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTMyMDEte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMyMTAtXG5uZXQvY29yZS9wa3RnZW4uYzozMjExOnN0YXRpYyB2b2lkIHBrdGdlbl9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXG5uZXQvY29yZS9wa3RnZW4uYy0zMjEyLXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMjQzLVxubmV0L2NvcmUvcGt0Z2VuLmM6MzI0NDpzdGF0aWMgdm9pZCBwa3RnZW5faGFuZGxlX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgdTMyIGZsYWdzKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzI0NS17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzI1NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjMyNTY6c3RhdGljIHZvaWQgcGt0Z2VuX3N0b3BfYWxsX3RocmVhZHMoc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzI1Ny17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MzI2Mz1zdGF0aWMgaW50IHRocmVhZF9pc19ydW5uaW5nKGNvbnN0IHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMyNzYtXG5uZXQvY29yZS9wa3RnZW4uYzozMjc3OnN0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfdGhyZWFkX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcbm5ldC9jb3JlL3BrdGdlbi5jLTMyNzgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMyOTYtXG5uZXQvY29yZS9wa3RnZW4uYzozMjk3OnN0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfYWxsX3RocmVhZHNfcnVuKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcbm5ldC9jb3JlL3BrdGdlbi5jLTMyOTgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMzMjItXG5uZXQvY29yZS9wa3RnZW4uYzozMzIzOnN0YXRpYyB2b2lkIHBrdGdlbl9ydW5fYWxsX3RocmVhZHMoc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzMyNC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzMzNC1cbm5ldC9jb3JlL3BrdGdlbi5jOjMzMzU6c3RhdGljIHZvaWQgcGt0Z2VuX3Jlc2V0X2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMzYte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTMzNDc9c3RhdGljIHZvaWQgc2hvd19yZXN1bHRzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgbnJfZnJhZ3MpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzM4OC0vKiBTZXQgc3RvcHBlZC1hdCB0aW1lciwgcmVtb3ZlIGZyb20gcnVubmluZyBsaXN0LCBkbyBjb3VudGVycyBcdTAwMjYgc3RhdGlzdGljcyAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MzM4OTpzdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTMzOTAte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM0MDk9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpuZXh0X3RvX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNDI2LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzQyNzpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcbm5ldC9jb3JlL3BrdGdlbi5jLTM0Mjgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM0NDUtICovXG5uZXQvY29yZS9wa3RnZW4uYzozNDQ2OnN0YXRpYyB2b2lkIHBrdGdlbl9yZW1fb25lX2lmKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ0Ny17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ2Ny1cbm5ldC9jb3JlL3BrdGdlbi5jOjM0Njg6c3RhdGljIHZvaWQgcGt0Z2VuX3JlbV9hbGxfaWZzKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ2OS17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ4Ni1cbm5ldC9jb3JlL3BrdGdlbi5jOjM0ODc6c3RhdGljIHZvaWQgcGt0Z2VuX3JlbV90aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXG5uZXQvY29yZS9wa3RnZW4uYy0zNDg4LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNDkyLVxubmV0L2NvcmUvcGt0Z2VuLmM6MzQ5MzpzdGF0aWMgdm9pZCBwa3RnZW5fcmVzY2hlZChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTM0OTQte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM1MDAtXG5uZXQvY29yZS9wa3RnZW4uYzozNTAxOnN0YXRpYyB2b2lkIHBrdGdlbl93YWl0X2Zvcl9za2Ioc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0zNTAyLXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNTE2LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzUxNzpzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTM1MTgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM3MDUtXG5uZXQvY29yZS9wa3RnZW4uYzozNzA2OnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzcwNy17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzc3NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjM3NzY6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zODAwPXN0YXRpYyBpbnQgYWRkX2Rldl90b190aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM4MzE6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMi17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzkxOC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM5MTk6c3RhdGljIGludCBfX25ldF9pbml0IHBrdGdlbl9jcmVhdGVfdGhyZWFkKGludCBjcHUsIHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MjAte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM5NzI9c3RhdGljIHZvaWQgX3JlbV9kZXZfZnJvbV9pZl9saXN0KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM5ODctXG5uZXQvY29yZS9wa3RnZW4uYzozOTg4OnN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy0zOTg5LVx0XHRcdFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDE2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVnJiMzOTtzIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyB0aGUgYnVnJiMzOTtzIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGhpdCB0aGlzIGNvZGUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBUaG9zZSBpbiB0dXJuIGFyZSBjYWxsZWQgYnkgYHBrdGdlbl9hZGRfZGV2aWNlYCB2aWEgYHBrdGdlbl90aHJlYWRfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYHByb2Nfd3JpdGVgIGZvciBgcGt0Z2VuX3RocmVhZF9wcm9jX29wc2AsIGFuZCBhbHNvIHZpYSBgYWRkX2Rldl90b190aHJlYWRgLiBgcGt0Z2VuX21hcmtfZGV2aWNlYCBpcyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLCB3aGljaCBpcyBhIG5vdGlmaWVyLiBTbywgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBraWNrIG9mZiB0aGlzIHdob2xlIHNlcXVlbmNlLCBhcmUgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAuCgpOb3csIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIHdhbnQgdG8ga2VlcCBpbiBtaW5kLCBidXQgaXQgKmlzKiBhbiBBUEkgZW50cnkgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBoYW5kbGluZyBwcm9jZnMgd3JpdGVzLiBUaGF0IG1ha2VzIGl0IGEgZGVjZW50IGNhbmRpZGF0ZSBmb3IgbXkgYEZvY3VzU3ltYm9sc2AgaWYgSSB3YW50IHRvIHNwZWNpZmljYWxseSB0ZXN0IHRoZSBwcm9jZnMgd3JpdGUgcGF0aC4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBpbmxpbmVkLiBOb3BlLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIHN0cnVjdC4gT2theSwgc2FtZSBxdWVzdGlvbiBmb3IgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBJdCYjMzk7cyBhbHNvIGFzc2lnbmVkIHRvIGEgc3RydWN0LCBzbyBpdCYjMzk7cyBub3QgaW5saW5lZCBlaXRoZXIuIEkgd2lsbCBpbmNsdWRlIHRoZXNlIGluIG15IEZvY3VzU3ltYm9scy4KCldoYXQgYWJvdXQgdGhvc2UgaGVscGVyIGZ1bmN0aW9ucz8gSSBzaG91bGQgY2hlY2sgaWYgYHBrdGdlbl9hZGRfZGV2aWNlYCBpcyBpbmxpbmVkLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgaGVmdHksIHNvIHByb2JhYmx5IG5vdC4gQWN0dWFsbHksIEkgd2lsbCBnbyBhaGVhZCBhbmQgaW5jbHVkZSBgcGt0Z2VuX2FkZF9kZXZpY2VgIGFuZCBgcGt0Z2VuX21hcmtfZGV2aWNlYCBhcyB3ZWxsLiBPaCwgd2FpdCwgYHBrdGdlbl9hZGRfZGV2aWNlYCBpcyBzdGF0aWMgdG9vLgoKU28gdG8gcmVjYXA6IEkmIzM5O2xsIGZvY3VzIG9uIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGd1aWRhbmNlIGhlcmUuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBwcmVmZXIgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEFsdGhvdWdoIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgICphcmUqIHN0YXRpYywgdGhleSBhcmUgQVBJIGVudHJ5cG9pbnRzIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgKmFyZSogZXhwbGljaXRseSB1c2VkIHZpYSB0aGVpciBhZGRyZXNzZXMsIG1lYW5pbmcgdGhlIGNvbXBpbGVyICpjYW5ub3QqIGlubGluZSB0aGVtLiBTaW5jZSB0aGUgcHJvbXB0IGRvZXMgbm90IGRpc3F1YWxpZnkgc3RhdGljIEFQSSBlbnRyeSBwb2ludHMsIEkgd2lsbCBrZWVwIHRoZW0uIE5vdywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgcGt0Z2VuLmNgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBcXCoqcGt0Z2VuX1thLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3NQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRHluYW1pYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGVyZS4gV2UgbmVlZCB0byBmb2N1cyBvbiBhc3BlY3RzIG9mIHRoZSBjb2RlIHRoYXQgYXJlIGluaGVyZW50bHkgZHluYW1pYywgdGhhdCBjaGFuZ2UgYmFzZWQgb24gaW5wdXQsIHN0YXRlLCBvciBzb21lIGV4dGVybmFsIGZhY3Rvci4gU3RhdGljIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBhcmUgcHJlZGljdGFibGUsIHRoZXkmIzM5O3JlIGRlZmluZWQgYnkgdGhlIHR5cGUuIFdlJiMzOTtyZSBsb29raW5nIGZvciB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYsIHRoZSBwbGFjZXMgd2hlcmUgYmVoYXZpb3IgaXMgdmFyaWFibGUuIFdoZXJlIGlzIHRoZSBjb3JlIG9mIHRoZSBzdGF0ZSB0cmFuc2l0aW9uPyBXaGVyZSBhcmUgdGhlIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBlZGdlIGNhc2VzLCBhbmQgYXJlYXMgdGhhdCBwcm92aWRlIGZsZXhpYmlsaXR5IGluIHRoZSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTUwMD1zdGF0aWMgaW50IGRlYnVnICBfX3JlYWRfbW9zdGx5O1xubmV0L2NvcmUvcGt0Z2VuLmMtNTAxLVxubmV0L2NvcmUvcGt0Z2VuLmM6NTAyOnN0YXRpYyBERUZJTkVfTVVURVgocGt0Z2VuX3RocmVhZF9sb2NrKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgbW9kdWxlIGRldmVsb3BtZW50IGFuZCBuZXR3b3JrIHByb2dyYW1taW5nOgoKKipNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIENsZWFudXAgLSBXaGF0IHRvIEV4cGVjdCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBrdGdlbi5jYC4uLiBJdCYjMzk7cyBhIG1vZHVsZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgbG9hZGVkIGludG8gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGF0IHRoaXMgZmlsZSBtb3N0IGxpa2VseSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgYGluaXRfbW9kdWxlYCBhbmQgYGNsZWFudXBfbW9kdWxlYCBmdW5jdGlvbnMuIFRob3VnaCwgaXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIGEgY3VzdG9tIG5hbWluZyBzY2hlbWUsIHNvIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYHBnX2luaXRgIGFuZCBgcGdfY2xlYW51cGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQsIGFzIGEgZ2VuZXJhbCBydWxlLCBhIG1vZHVsZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbmQgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cCBhZnRlciBsb2FkaW5nLiBTbywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gYW50aWNpcGF0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQxMTU9c3RhdGljIHZvaWQgX19leGl0IHBnX2NsZWFudXAodm9pZClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy00MTIxLVxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMjptb2R1bGVfaW5pdChwZ19pbml0KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjMtbW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlN0YXRpYyBGdW5jdGlvbnMgJmFtcDsgRW50cnkgUG9pbnRzOiBBIFF1aWNrIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBhcmNoaXRlY3R1cmUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBNb3N0IGZ1bmN0aW9ucyBhcmUsIGVzc2VudGlhbGx5LCBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhpbmdzLiBUaGF0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgY29udGFpbmVkIHByb2Nlc3NpbmcgZmxvdy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgZXhlY3V0aW9uICpiZWdpbiogYW5kICplbmQqLCBhbmQgd2hhdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byBhY3R1YWxseSBnZXQgdGhpbmdzIG1vdmluZz8gQ29uc2lkZXJpbmcgdGhlIHN0YXRpYyBuYXR1cmUsIGBwZ19pbml0YCBhbmQgYHBnX2NsZWFudXBgIGFyZSB0aGUgKm9idmlvdXMqIGV4Y2VwdGlvbnMgYW5kIG1heSBiZSB0aGUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHBvaW50cywgYnV0IEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHJlYWwgJiMzNDttZWF0JiMzNDsgb2YgdGhlIHByb2Nlc3MgaXMgc29tZXdoZXJlIGVsc2UuIFRoZXJlZm9yZSwgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgbG9vayBsaWtlIHRoZSBtb3N0IHByb2JhYmxlIGNhbmRpZGF0ZXMgZm9yIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgZGF0YSBwcm9jZXNzaW5nIGFuZCBleHRlcm5hbCBpbnB1dC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIC0gbGV0JiMzOTtzIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciB3cml0ZS1yZWxhdGVkIHByb2NmcyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gR290dGEgcnVsZSBvdXQgYW55IGxlc3Mgb2J2aW91cyBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX3dyaXRlLio9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTU2MS1cdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2Vlayxcbm5ldC9jb3JlL3BrdGdlbi5jOjU2MjpcdC5wcm9jX3dyaXRlXHQ9IHBnY3RybF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTU2My1cdC5wcm9jX3JlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xODgxLVx0LnByb2NfbHNlZWtcdD0gc2VxX2xzZWVrLFxubmV0L2NvcmUvcGt0Z2VuLmM6MTg4MjpcdC5wcm9jX3dyaXRlXHQ9IHBrdGdlbl9pZl93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjEtXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoyMDIyOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQaW5wb2ludGluZyB0aGUgUm9vdCBDYXVzZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gdGhpcyBidWcsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIGludGVyYWN0aW9ucyB3aXRoIHRocmVhZHMgYW5kIGRldmljZSBtYW5hZ2VtZW50LiBJJiMzOTt2ZSBuYXJyb3dlZCBpdCBkb3duIHRvIHRocmVlIGtleSBmdW5jdGlvbnM6IGBwZ2N0cmxfd3JpdGVgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIGBwa3RnZW5fdGhyZWFkX3dyaXRlYC4gVGhlIHRyaWdnZXIgc2VlbXMgdG8gYmUgd2hlbiBhIGRldmljZSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gYSB0aHJlYWQg4oCTIHNwZWNpZmljYWxseSwgdGhlIGFjdGlvbnMgYmVpbmcgZXhlY3V0ZWQgYnkgYHBrdGdlbl90aHJlYWRfd3JpdGVgLiBOb3csIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhhdCBkZXZpY2UgYWRkaXRpb24vcmVtb3ZhbC4gT24gdGhlIG90aGVyIGhhbmQsIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBoYW5kbGVkIGJ5IGBwa3RnZW5fZGV2aWNlX2V2ZW50YCB3aGljaCBhbHNvIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSB0aHJlYWQuIFNvLCBsb2dpY2FsbHksIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBUaG9zZSBhcmUgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhpcyBkZXZpY2UgbWFuYWdlbWVudCBpcyBleHBsaWNpdGx5IGhhbmRsZWQsIGFuZCB3aGVyZSBhIGJ1ZyBjb3VsZCByZWFyIGl0cyBoZWFkLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgcGt0Z2VuX3RocmVhZF93cml0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl90aHJlYWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0xODg2PXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXG5uZXQvY29yZS9wa3RnZW4uYzoxOTE2OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjEtXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoyMDIyOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHN1cHBvc2VkIHRvIHNwZWFrIGFzIGFuIGV4cGVydDoKCioqRG91YmxlLUNoZWNraW5nIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nLCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBmdW5jdGlvbi4gSXTigJlzIGZ1bmRhbWVudGFsLCB0aGUgYmVkcm9jayBvZiBob3cgd2UgaGFuZGxlIHBhY2tldCBnZW5lcmF0aW9uIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24uIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBudWFuY2VzIG9mIHRoZSByZWNlbnQgY2hhbmdlcy4gQSBxdWljaywgZm9jdXNlZCByZXZpZXcgaGVyZSBjYW4gc2F2ZSBtZSBob3VycyBkb3duIHRoZSBsaW5lLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIGtleSBhcmVhcyBkdXJpbmcgbXkgc2NhbjogZW5zdXJpbmcgY29ycmVjdCBldmVudCB0cmlnZ2VyaW5nIHVuZGVyIHZhcmlvdXMgbG9hZCBjb25kaXRpb25zLCB2ZXJpZnlpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcHJvcGVybHkgcG9wdWxhdGVkLCBhbmQgZW5zdXJpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZHJpdmVycyBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyBzcGVjaWZpZWQgaW4gdGhlIGRlc2lnbi4gQW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoZXJlLCBhbnkgc3VidGxlIGVkZ2UgY2FzZXMsIGFuZCB0aGlzIHdob2xlIHRoaW5nIGNvdWxkIHVucmF2ZWwuIFRpbWUgZm9yIGEgbWV0aWN1bG91cyBvbmNlLW92ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9kZXZpY2VfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz00ODU9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy00ODYtXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4NzpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7XG5uZXQvY29yZS9wa3RnZW4uYy00ODgtc3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTUwND1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBrdGdlbl9ub3RpZmllcl9ibG9jayA9IHtcbm5ldC9jb3JlL3BrdGdlbi5jOjUwNTpcdC5ub3RpZmllcl9jYWxsID0gcGt0Z2VuX2RldmljZV9ldmVudCxcbm5ldC9jb3JlL3BrdGdlbi5jLTUwNi19O1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwODU9c3RhdGljIHZvaWQgcGt0Z2VuX2NoYW5nZV9uYW1lKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE0LVxubmV0L2NvcmUvcGt0Z2VuLmM6MjExNTpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE2LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTk4CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBTdW1tYXJ5KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgcmVhbGx5IGp1bXAgb3V0IGFzIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCYjMzk7cyBicmVhayBpdCBkb3duIGluIG15IGhlYWQ6CgoqICAgKipGdXp6aW5nIFZhbHVlOioqIERlZmluaXRlbHkgd29ydGggcHVyc3VpbmcuCiogICAqKlRoZSBCdWc6KiogSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGF0YSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgYHBrdF9kZXYtJmd0O3JlbW92YWxfbWFya2Agd2l0aGluIHRoZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgY29kZS4gVGhlIGZpeCBleHRlbmRzIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoYXQgdmFyaWFibGUuIFRoaXMgdnVsbmVyYWJpbGl0eSBjYW4gYmUgdHJpZ2dlcmVkIHRocm91Z2ggd3JpdGVzIHRvIHRoZSBwa3RnZW4gdGhyZWFkIGZpbGVzIHZpYSBwcm9jZnMgb3IgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHVucmVnaXN0cmF0aW9uIGV2ZW50cy4KKiAgICoqRm9jdXMgQXJlYXM6KiogYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgYXJlIHRoZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBjYW4gYmUgdHJpZ2dlcmVkLgoqICAgKipDb25maWd1cmF0aW9uOioqIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBpcyBgTkVUX1BLVEdFTmAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBgTkVUX1BLVEdFTmAgaXRzZWxmIGRvZXNuJiMzOTt0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBjb21wbGljYXRlIHRoaW5ncy4gQWgsIGl0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgUFJPQ19GU2AuIFRob3NlIGFyZSBiYXNpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBlbmFibGVkLCB0aGV5JiMzOTtyZSBwcmV0dHkgdWJpcXVpdG91cy4gU28sIGBORVRfUEtUR0VOYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkFscmlnaHQsIEkgdGhpbmsgdGhhdCYjMzk7cyBhIHNvbGlkIGFzc2Vzc21lbnQuIExldCYjMzk7cyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BrdGdlbl90aHJlYWRfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2RldmljZV9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgYnkgZXh0ZW5kaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIGNvdmVyIHRoZSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwcm9jZnMgd3JpdGVzIHRvIHBrdGdlbiB0aHJlYWQgZmlsZXMgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwa3RnZW5fdGhyZWFkX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgYW5kIGB0LVx1MDAzZWNvbnRyb2xgLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3b3VsZCBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYW4gUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUgKGBwa3RnZW5fZGV2YCkgd2hpY2ggY291bGQgdGhlbiBiZSBmcmVlZCBiZWZvcmUgdGhlIGNhbGxlciBhY2Nlc3NlZCBpdC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggN2Y4MWFlZDQ2NjcyMy4uNGZiMTg1MzU4OWIzMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTIwMzIsMTQgJiM0MzsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sCiAJYm9vbCBleGFjdCA9IChyZW1vdmUgPT0gRklORCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZhbXA7cG4tJmd0O3BrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiAJCXBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7CiAJCWlmIChwa3RfZGV2KSB7CiAJCQlpZiAocmVtb3ZlKSB7CiAJCQkJcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrID0gMTsKIAkJCQl0LSZndDtjb250cm9sIHw9IFRfUkVNREVWOwogCQkJfQotCQkJYnJlYWs7CiAJCX0KJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaWYgKHBrdF9kZXYpCiYjNDM7CQkJYnJlYWs7CiAJfQogCXJldHVybiBwa3RfZGV2OwogfQpAQCAtMzc3Niw3ICYjNDM7Mzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCXN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7CiAJc2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsICZhbXA7dC0mZ3Q7aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHN0cm5jbXAocC0mZ3Q7b2Rldm5hbWUsIGlmbmFtZSwgbGVuKSA9PSAwKSB7CiAJCQlpZiAocC0mZ3Q7b2Rldm5hbWVbbGVuXSkgewpAQCAtMzc4Nyw3ICYjNDM7Mzc4OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCQkJYnJlYWs7CiAJCX0KIAotCXJjdV9yZWFkX3VubG9jaygpOwogCXByX2RlYnVnKCYjMzQ7ZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxuJiMzNDssIGlmbmFtZSwgcGt0X2Rldik7CiAJcmV0dXJuIHBrdF9kZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA4CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSQ1UgTG9ja2luZyBGaXggaW4gcGt0Z2VuLmMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2NvcmUvcGt0Z2VuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgUkNVIGxvY2tpbmcgd2l0aCBgcGt0Z2VuX2ZpbmRfZGV2YC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLiBJdCBsb29rcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgdG8gZXhwYW5kIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCgpQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3YXMgbWFuYWdpbmcgaXRzIG93biBSQ1UgbG9ja3MuIEl0IHdvdWxkIGZpbmQgYSBgcGt0Z2VuX2RldmAgKHdoaWNoLCBvZiBjb3Vyc2UsIHJlc2lkZXMgaW4gYW4gUkNVIGxpc3QpLCBhbmQgdGhlbiBkcm9wIHRoZSBsb2NrIGJlZm9yZSByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoYXQgc3RydWN0dXJlLiAgVGhpcyBzZWVtcyBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZSBjYWxsZXIgd2FzIHRoZW4gcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlIHNldHRpbmcgYHBrdF9kZXYtJmd0O3JlbW92YWxfbWFyayA9IDFgIGFuZCBtb2RpZnlpbmcgYHQtJmd0O2NvbnRyb2wgfD0gVF9SRU1ERVY7YCwgKmFmdGVyKiB0aGUgaW5pdGlhbCBgcGt0Z2VuX2ZpbmRfZGV2YCBjYWxsLiBUaGUgcHJvYmxlbSBpcywgdGhhdCBgcGt0Z2VuX2RldmAgY291bGQgYmUgZnJlZWQgYmVmb3JlIHRob3NlIG1vZGlmaWNhdGlvbnMgd2VyZSBkb25lLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIEtBU0FOIHdvdWxkIHRoYW5rZnVsbHkgY2F0Y2guCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBtb3ZpbmcgdGhlIFJDVSBsb2NraW5nIHRvIHRoZSAqY2FsbGVyKiBvZiBgcGt0Z2VuX2ZpbmRfZGV2YC4gTm93LCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBsb2NrIHdoaWxlIGFjY2Vzc2luZyB0aGUgcmV0dXJuZWQgYHBrdGdlbl9kZXZgLCBlbnN1cmluZyBpdCByZW1haW5zIHZhbGlkLiAgRXNzZW50aWFsbHksIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aG9zZSBvcGVyYXRpb25zLgoKU28sIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCwgdGhlIHBhdGNoIGFkZHMgdGhlIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHBrdGdlbl9maW5kX2RldigpYCBjYWxsLiBBbmQgd2l0aGluIGBwa3RnZW5fZmluZF9kZXZgLCB0aGUgbG9jay91bmxvY2sgY2FsbHMgYXJlIHJlbW92ZWQuCgpNeSBjb25jZXJuIG5vdyBpcywgaXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFrcyBhcyBhIHJlc3VsdD8gTm8sIHRoaXMgaXMganVzdCBSQ1UgbG9ja2luZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgdGhlIGNvcHlpbmcgb2YgYW55dGhpbmcgbmV3IHRvIHVzZXJzcGFjZS4KClRoZXJlZm9yZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgbG9ja2luZyBhZGp1c3RtZW50IGFuZCB0aGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgZGF0YSBsZWFrcywgS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIEkmIzM5O20gbWFya2luZyBpdCBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuICBUaGlzIGlzIGEgY2xlYW4gZml4IGZvciBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIG5vdGhpbmcgbW9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gYnkgZXhwYW5kaW5nIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIHRvIGNvdmVyIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCBhbmQgYHQtXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgYW5kIGB0LVx1MDAzZWNvbnRyb2xgLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3b3VsZCBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYW4gUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUgKGBwa3RnZW5fZGV2YCkgd2hpY2ggY291bGQgdGhlbiBiZSBmcmVlZCBiZWZvcmUgdGhlIGNhbGxlciBhY2Nlc3NlZCBpdC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjE3OjAyLjgyNTc1MjE2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTI4Mzc1OTk5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgICBcInBrdGdlbl9kZXZpY2VfZXZlbnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVxcdTAwM2VyZW1vdmFsX21hcmtgIGFuZCBgdC1cXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXFx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzowMi44MjU3NTg2NzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAyMzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6MTc6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IDdmODFhZWQ0NjY3MjMuLjRmYjE4NTM1ODliMzEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xcbkBAIC0yMDMyLDE0ICsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuIFxcdGJvb2wgZXhhY3QgPSAocmVtb3ZlID09IEZJTkQpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBcXHUwMDI2cG4tXFx1MDAzZXBrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0cGt0X2RldiA9IHBrdGdlbl9maW5kX2Rldih0LCBpZm5hbWUsIGV4YWN0KTtcXG4gXFx0XFx0aWYgKHBrdF9kZXYpIHtcXG4gXFx0XFx0XFx0aWYgKHJlbW92ZSkge1xcbiBcXHRcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VyZW1vdmFsX21hcmsgPSAxO1xcbiBcXHRcXHRcXHRcXHR0LVxcdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRpZiAocGt0X2RldilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHBrdF9kZXY7XFxuIH1cXG5AQCAtMzc3Niw3ICszNzc5LDYgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxuIFxcdHN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7XFxuIFxcdHNpemVfdCBsZW4gPSBzdHJsZW4oaWZuYW1lKTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXFx1MDAyNnQtXFx1MDAzZWlmX2xpc3QsIGxpc3QpXFxuIFxcdFxcdGlmIChzdHJuY21wKHAtXFx1MDAzZW9kZXZuYW1lLCBpZm5hbWUsIGxlbikgPT0gMCkge1xcbiBcXHRcXHRcXHRpZiAocC1cXHUwMDNlb2Rldm5hbWVbbGVuXSkge1xcbkBAIC0zNzg3LDcgKzM3ODksNiBAQCBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRwcl9kZWJ1ZyhcXFwiZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxcXFxuXFxcIiwgaWZuYW1lLCBwa3RfZGV2KTtcXG4gXFx0cmV0dXJuIHBrdF9kZXY7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MTc6MDMuMjk1NzYyODUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwMjUxNjAyODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX3RocmVhZF93cml0ZVwiLFxuICAgIFwicGt0Z2VuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlcmVtb3ZhbF9tYXJrYCBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgYnkgZXh0ZW5kaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIGNvdmVyIHRoZSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwcm9jZnMgd3JpdGVzIHRvIHBrdGdlbiB0aHJlYWQgZmlsZXMgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBldmVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxNzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDdmODFhZWQ0NjY3MjMuLjRmYjE4NTM1ODliMzEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDMyLDE0ICsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXG4gXHRib29sIGV4YWN0ID0gKHJlbW92ZSA9PSBGSU5EKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodCwgXHUwMDI2cG4tXHUwMDNlcGt0Z2VuX3RocmVhZHMsIHRoX2xpc3QpIHtcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRwa3RfZGV2ID0gcGt0Z2VuX2ZpbmRfZGV2KHQsIGlmbmFtZSwgZXhhY3QpO1xuIFx0XHRpZiAocGt0X2Rldikge1xuIFx0XHRcdGlmIChyZW1vdmUpIHtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrID0gMTtcbiBcdFx0XHRcdHQtXHUwMDNlY29udHJvbCB8PSBUX1JFTURFVjtcbiBcdFx0XHR9XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGlmIChwa3RfZGV2KVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFx0cmV0dXJuIHBrdF9kZXY7XG4gfVxuQEAgLTM3NzYsNyArMzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuIFx0c3RydWN0IHBrdGdlbl9kZXYgKnAsICpwa3RfZGV2ID0gTlVMTDtcbiBcdHNpemVfdCBsZW4gPSBzdHJsZW4oaWZuYW1lKTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNnQtXHUwMDNlaWZfbGlzdCwgbGlzdClcbiBcdFx0aWYgKHN0cm5jbXAocC1cdTAwM2VvZGV2bmFtZSwgaWZuYW1lLCBsZW4pID09IDApIHtcbiBcdFx0XHRpZiAocC1cdTAwM2VvZGV2bmFtZVtsZW5dKSB7XG5AQCAtMzc4Nyw3ICszNzg5LDYgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cHJfZGVidWcoXCJmaW5kX2RldiglcykgcmV0dXJuaW5nICVwXFxuXCIsIGlmbmFtZSwgcGt0X2Rldik7XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzowMy4yOTU3NjQ4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4NDAxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgQ29yZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9wa3RnZW4uY2AuIEl0J3MgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBvdXQgb2YgYHBrdGdlbl9maW5kX2RldigpYCBhbmQgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiBgX19wa3RnZW5fTk5fdGhyZWFkcygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGNsZWFuZXIsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cbldhaXQgYSBzZWNvbmQuLi4gZG9lc24ndCBgcGt0Z2VuX2ZpbmRfZGV2KClgIGdldCBjYWxsZWQgZnJvbSAqb3RoZXIqIHBsYWNlcyBiZXNpZGVzIGp1c3QgYF9fcGt0Z2VuX05OX3RocmVhZHMoKWA/IFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIGxvY2sgc2VtYW50aWNzLiBJZiB0aGUgUkNVIGNhbGxzIHdlcmUgbW92ZWQgb3V0IG9mIGBwa3RnZW5fZmluZF9kZXYoKWAgYW5kIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gKm90aGVyKiB0aHJlYWRzIHdoaWNoIGhhdmVuJ3QgaW5jb3Jwb3JhdGVkIHRoZSBjYWxscywgd2UgbWF5IGhhdmUgaW50cm9kdWNlZCBhIHJhY2UgY29uZGl0aW9uLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBhbGwgYHBrdGdlbl9maW5kX2RldigpYCBpcyB1c2VkLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAgY29tbWFuZCBhbmQgdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjE3OjA3LjE3NDE2OTE5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTQ4NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5fZmluZF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDg0PXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDM1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9wa3RnZW4uYzoyMDM2OlxcdFxcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAzNy1cXHRcXHRpZiAocGt0X2Rldikge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzcwNj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfd29ya2VyKHZvaWQgKmFyZylcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mzc3NjpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzowNy4yNjk2ODU3MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTMxNzc5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byB0aGUgYHBrdGdlbl9maW5kX2RldmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYHBrdGdlbl9maW5kX2RldmAgaXMgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/IEknbGwgZG8gYSBxdWljayBzZWFyY2guLi4gSG1tLCBpbnRlcmVzdGluZy4gTG9va3MgbGlrZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgaXMgdGhlICpvbmx5KiBjYWxsZXIuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIG9yIGF0IGxlYXN0IG5hcnJvd3MgdGhlIHNjb3BlLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLiBMZXQncyBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL3BrdGdlbi5jYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwa3RnZW5fZmluZF9kZXZgIGlzIGRvaW5nIHdpdGhpbiB0aGUgdGhyZWFkIGluaXRpYWxpemF0aW9uIGNvbnRleHQgYW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgdGhpcyB3YXkuIE15IGV4cGVydCBrbm93bGVkZ2UgdGVsbHMgbWUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYXJlIG1lbW9yeSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgcmF0aW9uYWxlIGZvciBoYXZpbmcgYSBkZWRpY2F0ZWQgdGhyZWFkIGludGVyYWN0aW9uIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MTc6MTIuODAxNDY5MTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTI2MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9maW5kX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDg0PXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDM1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9wa3RnZW4uYzoyMDM2OlxcdFxcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAzNy1cXHRcXHRpZiAocGt0X2Rldikge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzcwNj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfd29ya2VyKHZvaWQgKmFyZylcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mzc3NjpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzoxMi44Njk0MDMzNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc4MTk5NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gUGFja2V0IEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gc2VlaW5nIGBwa3RnZW5fZmluZF9kZXZgIGJlaW5nIGNhbGxlZCwgYW5kIHNvbWV0aGluZydzIHBpbmdpbmcgdGhhdCBpdCdzIG9ubHkgaW52b2tlZCBmcm9tIHdpdGhpbiB0aG9zZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgZnVuY3Rpb25zLiBUaGF0IHNlZW1zLi4uc3BlY2lmaWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gSWYgdHJ1ZSwgdGhhdCByZWFsbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0J3MgZ29pbmcgb24uXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsIGdyYXBoLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IGFsbCB0aGUgY2FsbGVycyBvZiB0aGVzZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgZnVuY3Rpb25zIGFyZS4gVW5kZXJzdGFuZGluZyB0aGVpciBvcmlnaW5zIGlzIGVzc2VudGlhbCBmb3IgcmVhbGx5IGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGhvdyB0aGlzIGBwa3RnZW5fZmluZF9kZXZgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSBwYWNrZXRzIGFyZSBiZWluZyBnZW5lcmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzoxNy41NDc2MDY4OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNDgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wa3RnZW5fTk5fdGhyZWFkc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz0yMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3RocmVhZF9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjYtLyogVGhpbmsgZmluZCBvciByZW1vdmUgZm9yIE5OICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjAyNzpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqaWZuYW1lLCBpbnQgcmVtb3ZlKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjA1Mz1zdGF0aWMgdm9pZCBwa3RnZW5fbWFya19kZXZpY2UoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLCBjb25zdCBjaGFyICppZm5hbWUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDYzLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjIwNjQ6XFx0XFx0cGt0X2RldiA9IF9fcGt0Z2VuX05OX3RocmVhZHMocG4sIGlmbmFtZSwgUkVNT1ZFKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDY1LVxcdFxcdGlmIChwa3RfZGV2ID09IE5VTEwpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zODMxPXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM4MzgtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzgzOTpcXHRwa3RfZGV2ID0gX19wa3RnZW5fTk5fdGhyZWFkcyh0LVxcdTAwM2VuZXQsIGlmbmFtZSwgRklORCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMzg0MC1cXHRpZiAocGt0X2Rldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzoxNy42Mjk3NTk4ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDc2ODcxODI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFJDVSBSZWFkIExvY2sgUGxhY2VtZW50IGluIHBrdGdlbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAgY2FsbCBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgbW92ZW1lbnQgb2YgYHJjdV9yZWFkX2xvY2soKWAgZnJvbSBpbnNpZGUgYHBrdGdlbl9maW5kX2RldmAgdG8gd2l0aGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzbmlwcGV0IGZyb20gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGdyYWJiZWQgbXkgYXR0ZW50aW9uLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3YXMgcmVzcG9uc2libGUgZm9yIGFjcXVpcmluZyBhbmQgcmVsZWFzaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLiAgTm93LCB0aGUgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgY2FsbCB0byBgcGt0Z2VuX2ZpbmRfZGV2YCAqYW5kKiB0aGUgc3Vic2VxdWVudCBjaGVjayBhbmQgbW9kaWZpY2F0aW9uIG9mIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AuXG5cbkkgcmVhbGl6ZWQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHNoaWZ0IGltbWVkaWF0ZWx5LiBgcGt0Z2VuX2ZpbmRfZGV2YCByZXR1cm5zIGEgcG9pbnRlciAoYHBrdF9kZXZgKSB0byBhIHN0cnVjdHVyZSBwcm90ZWN0ZWQgYnkgUkNVLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IGJlZm9yZSB0aGUgcGF0Y2gsIHRoZSByZWFkIGxvY2sgd2FzIHJlbGVhc2VkICpiZWZvcmUqIHJldHVybmluZyBgcGt0X2RldmAgZnJvbSBgcGt0Z2VuX2ZpbmRfZGV2YC4gIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29kZSBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2Agd2FzIGFjY2Vzc2luZyBgcGt0X2RldmAgYWZ0ZXIgdGhlIFJDVSByZWFkIGxvY2sgd2FzIGRyb3BwZWQsIHdoaWNoIGlzIGRhbmdlcm91cywgYXMgdGhlIG9iamVjdCBjb3VsZCBoYXZlIGJlZW4gZnJlZWQgY29uY3VycmVudGx5LiBUaGUgc3Vic2VxdWVudCBsaW5lLCBgcGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmsgPSAxO2Agd2FzIGEgY2xlYXIgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgb3IgYXQgbGVhc3QgYSBkYXRhIHJhY2UgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LlxuXG5XaXRoIHRoZSBwYXRjaCwgdGhlIGByY3VfcmVhZF9sb2NrKClgIGlzIGhlbGQgKnRocm91Z2gqIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCwgc2FmZWd1YXJkaW5nIHRoZSBhY2Nlc3MuIFRoaXMgaXMgdGhlIGZpeC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogZG9lcyB0aGlzIGhhdmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0IGJleW9uZCB0aGUgZml4IGl0c2VsZj8gSSBjaGVja2VkIHRoZSBjYWxsZXJzIG9mIGBfX3BrdGdlbl9OTl90aHJlYWRzYDogYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAuIEJvdGgganVzdCBjaGVjayBmb3IgYSBub24tTlVMTCByZXR1cm4gZnJvbSBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIFRoZXkgZG8gbm90IGRlcmVmZXJlbmNlIGBwa3RfZGV2YCBhZnRlciB0aGUgY2FsbC4gVGh1cywgdGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIHRoZSBpbnRlcm5hbCBsb2dpYyBvZiBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIEl04oCZcyBvbmx5IHRoZSBpbnRlcm5hbCBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCB0aGF0IGlzIG5vdyBjb3JyZWN0bHkgUkNVLXByb3RlY3RlZC5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSBidWcgZml4LCBlbGltaW5hdGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IGdlbmVyYXRpb24gY29kZS4gQmVjYXVzZSBgcGt0Z2VuYCBpcyBrZXJuZWwgY29kZSAoYW5kIGxpa2VseSBlbmFibGVkIGluIGZ1enppbmcpLCBpdCdzIGEgYnVnIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsbHkgYSBuby1vcCwgYnV0IGl0IGZpeGVzIGEgc2lnbmlmaWNhbnQgZGF0YSByYWNlLiBJIHdpbGwgY2hlY2sgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjU1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyOTo0NS4zMTY5NDcwNDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg3NTgzMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyOTo0NS44NDc4NDM3MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MjQ4NjIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkxvY2F0aW5nIHRoZSBDb21waWxhdGlvbiBQb2ludCBvZiBgcGt0Z2VuLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBwa3RnZW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIHdpdGhpbiB0aGUgcHJvamVjdC4gSXQncyBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGJ1aWxkIHByb2Nlc3MgaXMgY3JpdGljYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGFuYWx5c2lzIEknbSBkb2luZy4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjb21waWxhdGlvbiwgd2hpY2ggbWVhbnMgSSdsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBmb3IgYSBNYWtlZmlsZSwgQ01ha2VMaXN0cy50eHQsIG9yIGFueSBvdGhlciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBpbiB0aGUgcHJvamVjdCdzIHJvb3Qgb3IgcmVsZXZhbnQgc3ViZGlyZWN0b3JpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgZGlyZWN0aXZlcyBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyBgcGt0Z2VuLmNgIG9yLCBtb3JlIGJyb2FkbHksIG1vZHVsZXMgcmVsYXRlZCB0byBwYWNrZXQgZ2VuZXJhdGlvbi4gS25vd2luZyBpdHMgY29tcGlsYXRpb24gY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaW5jbHVkZSBwYXRocywgbGlua2VkIGxpYnJhcmllcywgYW5kIGFueSBidWlsZCBmbGFncyB1c2VkLCBhbGwgb2Ygd2hpY2ggYXJlIHZpdGFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIG92ZXJhbGwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5OTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyOTo0OS4yMzAzMzQ1MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjYzNjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IG5ldC1wcm9jZnMub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6Mjk6NDkuMzQyOTc2MzU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzU3ODI0ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUGFja2V0IEdlbmVyYXRvciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyBgQ09ORklHX05FVF9QS1RHRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBJIGNhbiBmaW5kIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGVpdGhlciBgbmV0L2NvcmUvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgbW9yZSBicm9hZGx5LCBgbmV0L0tjb25maWdgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSByZWZlcmVuY2UgdG8gYE5FVF9QS1RHRU5gIHdpdGhpbiBvbmUgb2YgdGhvc2UgZmlsZXMuIFRoYXQgd2lsbCBwb2ludCBtZSB0b3dhcmRzIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgbGlrZWx5IGFueSByZWxldmFudCBkZWZhdWx0cyBmb3IgdGhpcyBmZWF0dXJlLiBUaW1lIHRvIHRyYWNrIGl0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNToyMi45MjEyMjg1NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjU5Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9QS1RHRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzU6MjMuMDAyODk1MzMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODM2NDgwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBwa3RnZW5gIFRocmVhZCBJbnRlcmFjdGlvbiB3aXRoIFByb2NmcyoqXG5cblJpZ2h0LCBzbyBgcGt0Z2VuX2FkZF9kZXZpY2VgIGFuZCBgcGt0Z2VuX21hcmtfZGV2aWNlYCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgcHJvY2ZzLWRyaXZlbiBjYWxscy4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCBmaWd1cmUgb3V0IGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIGZ1bmN0aW9ucyBhY3R1YWxseSB3b3Jrcy4gVGhlIHByb2NmcyBpbnRlcmZhY2UgKmhhcyogdG8gYmUgdGhlIHRyaWdnZXIuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIHNoaWZ0cyB0byB0aGUgd3JpdGUgcGF0aC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGZ1bmN0aW9ucyBsaWtlIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBvciB3aGF0ZXZlciBzaW1pbGFyIGZ1bmN0aW9uIG5hbWUgaXMgdXNlZCB0byBoYW5kbGUgd3JpdGluZyB0byB0aG9zZSBwcm9jZnMgZmlsZXMuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIHRoZSBjb21tYW5kcyBnZXQgaW50ZXJwcmV0ZWQgYW5kIHVsdGltYXRlbHksIHdoZXJlIHRob3NlIGRldmljZS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSB0aHJlYWQgaW50ZXJhY3Rpb24gaGVyZSBpcyBjcnVjaWFsIHRvIHNlZSBob3cgZGV2aWNlcyBhcmUgYWN0dWFsbHkgYWRkZWQgYW5kIG1hcmtlZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIHJlc2lkZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM1OjI4LjA4NjU0ODg5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NDE1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9hZGRfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTQ4Mz1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBzdHJ1Y3QgcGt0Z2VuX2RldiAqaSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg0OnN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtNDg1LXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTkxNj1zdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk4MS1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwa3RnZW5fdGhyZWFkX2xvY2spO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjE5ODI6XFx0XFx0cmV0ID0gcGt0Z2VuX2FkZF9kZXZpY2UodCwgZik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk4My1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBrdGdlbl90aHJlYWRfbG9jayk7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zODAwPXN0YXRpYyBpbnQgYWRkX2Rldl90b190aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zODMwLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM4MzE6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM4MzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNToyOC43NzE5NzAyNjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NjY3MTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHBrdGdlbl90aHJlYWRfd3JpdGVgKipcblxuT2theSwgc28gYHBrdGdlbl90aHJlYWRfd3JpdGVgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGxvb2sgYXQuIFJpZ2h0LCBsZXQncyBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUgZm9yIHRoYXQuIFNwZWNpZmljYWxseSwgSSdsbCBqdW1wIGludG8gYG5ldC9jb3JlL3BrdGdlbi5jYCBhbmQgemVybyBpbiBvbiB0aGF0IGVudHJ5IHBvaW50LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBsaWVzLCBzbyBnZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nLCBvciBqdXN0IGdlbmVyYWxseSB0cnlpbmcgdG8gZ3JvayBoZXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhpcyBmdW5kYW1lbnRhbCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM1OjMyLjMzODY0NDQzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDQ0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjAxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl90aHJlYWRfcHJvY19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIxLVxcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjAyMjpcXHQucHJvY193cml0ZVxcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIzLVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNTozMi40NDU2OTYwNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTE3NzI3MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIHVzaW5nIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBQYWNrZXQgR2VuZXJhdGlvbiBhbmQgRGV2aWNlIE1hcmtpbmcqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHBhY2tldCBnZW5lcmF0aW9uLCBhbmQgbmF0dXJhbGx5LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBzcGVjaWZpY3MuIEknbSB3b25kZXJpbmcsIHdoYXQgYWJvdXQgYHBrdGdlbl9tYXJrX2RldmljZWA/IFRoYXQgZnVuY3Rpb24sIHRoZSBpbXBsaWNhdGlvbnMgb2YgKnRoYXQqLCBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgbmV4dC4gSXMgdGhlcmUgc29tZSBzcGVjaWZpYyBkZXZpY2Ugb3IgY29uZmlndXJhdGlvbiBiZWluZyBwb2ludGVkIHRvd2FyZHMsIG9yIHNvbWUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gYmUgbW9yZSBhd2FyZSBvZj8gV2hhdCBzb3J0IG9mIG9wdGltaXphdGlvbnMgYXJlIGhhcHBlbmluZz8gSSdtIGFscmVhZHkgaW1hZ2luaW5nIHRoZSB1c2UgY2FzZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkLiBMZXQncyBkZWx2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQwOjU3Ljk2MzQyNzMwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxMDY4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9tYXJrX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDUyLSAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jOjIwNTM6c3RhdGljIHZvaWQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgY29uc3QgY2hhciAqaWZuYW1lKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwNTQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjExNT1zdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTMzLVxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxubmV0L2NvcmUvcGt0Z2VuLmM6MjEzNDpcXHRcXHRwa3RnZW5fbWFya19kZXZpY2UocG4sIGRldi1cXHUwMDNlbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjEzNS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDA6NTguNjk0NTAwMTg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTQ0Mjg5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZDogYHBrdGdlbl9tYXJrX2RldmljZWAqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBwa3RnZW5fbWFya19kZXZpY2VgIGdldHMgdHJpZ2dlcmVkIGR1cmluZyBuZXRkZXYgdW5yZWdpc3RyYXRpb24uIFRoYXQncyBhIGRlZmluaXRlIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIOKAkyBhIGNsZWFyIHBhdGggb2YgZXhlY3V0aW9uIHRoYXQncyBsaWtlbHkgcmVhY2hhYmxlLiBOb3csIHRoZSBidWcgcmVwb3J0IHNwZWNpZmllcyBhIGRhdGEgcmFjZSwgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AuIEludGVyZXN0aW5nLiBTbywgdGhlIGZpeCBpbnZvbHZlcyBleHRlbmRpbmcgdGhlIFJDVSByZWFkIGxvY2sgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYC4gTWFrZXMgc2Vuc2UsIHByb3RlY3RpbmcgdGhlIHJlYWQgd2l0aCBhIHJlYWQgbG9jayBpcyBhIGxvZ2ljYWwgc29sdXRpb24gdG8gcmVzb2x2ZSB0aGUgcmFjZSBjb25kaXRpb24uXG5cbldhaXQgYSBzZWNvbmTigKYgYHBrdF9kZXZgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBhbmQgZnJlZWQgd2l0aCBga2ZyZWVfcmN1YD8gVGhhdCdzIHdoYXQgdGhlIGZpeCBzdWdnZXN0cy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBsaWZlY3ljbGUgaW1tZWRpYXRlbHkgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgbWF0Y2hlcyB0aGUgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBhbGxvY2F0aW9uIGNvZGUgYW5kIHRyYWNlIHRoZSBmcmVlaW5nIHBhdGggYXMgc29vbiBhcyBJJ20gZG9uZSBzdW1tYXJpemluZy4gVGhhdCdzIGtleSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjAzLjA0ODkzMjgyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0MzQ1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWUuKnBrdF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MzM4OT1zdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzOTktXFx0cGt0X2Rldi1cXHUwMDNlcnVubmluZyA9IDA7XFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQwMDpcXHRrZnJlZV9za2IocGt0X2Rldi1cXHUwMDNlc2tiKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zNDAxLVxcdHBrdF9kZXYtXFx1MDAzZXNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zNTE3PXN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzU1NC1cXHRcXHQvKiBidWlsZCBhIG5ldyBwa3QgKi9cXG5uZXQvY29yZS9wa3RnZW4uYzozNTU1OlxcdFxcdGtmcmVlX3NrYihwa3RfZGV2LVxcdTAwM2Vza2IpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTYtXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zODMxPXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM4NTMtXFx0aWYgKHBrdF9kZXYtXFx1MDAzZWZsb3dzID09IE5VTEwpIHtcXG5uZXQvY29yZS9wa3RnZW4uYzozODU0OlxcdFxcdGtmcmVlKHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM4NTUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zOTE0LVxcdHZmcmVlKHBrdF9kZXYtXFx1MDAzZWZsb3dzKTtcXG5uZXQvY29yZS9wa3RnZW4uYzozOTE1OlxcdGtmcmVlKHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MTYtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTM5ODg9c3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTQwMTYtXFx0XFx0cHV0X3BhZ2UocGt0X2Rldi1cXHUwMDNlcGFnZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDAxNzpcXHRrZnJlZV9yY3UocGt0X2RldiwgcmN1KTtcXG5uZXQvY29yZS9wa3RnZW4uYy00MDE4LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MTowMy4xMTAzNzIxMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MDQ5ODA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrZnJlZV9yY3VgIEZpeCBpbiBgcGt0Z2VuX3JlbW92ZV9kZXZpY2VgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga2ZyZWVfcmN1KHBrdF9kZXYsIHJjdSlgIGlzIGluZGVlZCB1dGlsaXplZCB3aXRoaW4gdGhlIGBwa3RnZW5fcmVtb3ZlX2RldmljZWAgZnVuY3Rpb24uIFRoaXMgbWFrZXMgc2Vuc2UuIFRoZSBwcm9wb3NlZCBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgY29ycmVjdGx5IHRhY2tsZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBvZiB0aGUgYHBrdF9kZXZgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGByZW1vdmVgIGZsYWcgaXMgc2V0IHRvIHRydWUuIFRoZSBjcnV4IG9mIHRoZSBzb2x1dGlvbiBpcyB0byBtYWludGFpbiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgdGhyb3VnaG91dCB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBtZW1vcnkgaXNuJ3QgZnJlZWQgcHJlbWF0dXJlbHkgd2hpbGUgaXQncyBzdGlsbCBwb3RlbnRpYWxseSBiZWluZyBhY2Nlc3NlZC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgZGlzdGluY3QgY2hhbmdlLCBhIGRlbGliZXJhdGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb2RlJ3MgYmVoYXZpb3IgYWltZWQgYXQgaW1wcm92aW5nIGl0cyByb2J1c3RuZXNzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9QS1RHRU5gIG5vdywgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdGx5IGludGVncmF0ZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyB3aXRoIGV4aXN0aW5nIHNldHVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MTowNy42OTA4NzI2NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTE2NzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zODQ9bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbm5ldC9LY29uZmlnLTM4NS1cXG5uZXQvS2NvbmZpZzozODY6Y29uZmlnIE5FVF9QS1RHRU5cXG5uZXQvS2NvbmZpZy0zODctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MTowNy44MDAwNDQ1OTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4MDU4MDQ5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IGBjb25maWcgTkVUX1BLVEdFTmAgaW4gYG5ldC9LY29uZmlnYDpcblxuKipBbmFseXppbmcgTkVUX1BLVEdFTiBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYG5ldC9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSBgY29uZmlnIE5FVF9QS1RHRU5gIHNldHRpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHBhY2tldCBnZW5lcmF0b3IgZmVhdHVyZS4gVGhpcyBtZWFucyBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBhbnkgaGVscCB0ZXh0IHRoYXQgY2xhcmlmaWVzIGl0cyBwdXJwb3NlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgYXZhaWxhYmxlPyBJcyBpdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWM/IERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIG9uIG90aGVyIG5ldHdvcmsgc3Vic3lzdGVtcyBvciBsaWJyYXJpZXM/IEtub3dpbmcgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBpcyB0eXBpY2FsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCwgaGVscGluZyBtZSBhc3Nlc3MgdGhlIGxpa2VseSB1c2FnZSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHRoZSBmZWF0dXJlLiBBbmQgb2YgY291cnNlLCB0aGUgXCJoZWxwXCIgdGV4dCBpcyBjcnVjaWFsLiBUaGF0J3Mgd2hlcmUgSeKAmWxsIGZpbmQgdGhlIGNvbmNpc2UgZGVmaW5pdGlvbiwgdXNlIGNhc2VzLCBhbmQgYW55IHdhcm5pbmdzLiBJJ2xsIG5lZWQgdG8gYWJzb3JiIHRoaXMgaW5mb3JtYXRpb24gcXVpY2tseSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmb3IgdGhlIHJlc3Qgb2YgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjI5LjYwNTg1Mjc0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0NjQxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9QS1RHRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDE6MjkuNjk1MzIxMDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUwMzc1OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIG5ldC9LY29uZmlnIGZvciBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsb2dpYyBiZXR0ZXIuIExldCdzIGRpdmUgaW50byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAzODYg4oCTIHRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZXMsIHBlcmhhcHMgb3B0aW9ucyBmb3IgcHJvdG9jb2wgc3VwcG9ydCwgaGFyZHdhcmUgc2VsZWN0aW9uLCBvciBtYXliZSBzb21lIGRlcGVuZGVuY3kgZGVjbGFyYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQgcmVsYXRlcyB0byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgZG93biB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjM5LjE5OTA4Mjg3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0ICBtYWludGFpbiBjYXBhY2l0eSBmb3IgdGhlIG90aGVyIGZsb3dzLiBUaGlzIGZlYXR1cmUgcHJvdmlkZXMgc2VydmVyc1xcbiAzODE6XFx0XFx0ICB3aXRoIG1hbnkgY2xpZW50cyBzb21lIHByb3RlY3Rpb24gYWdhaW5zdCBEb1MgYnkgYSBzaW5nbGUgKHNwb29mZWQpXFxuIDM4MjpcXHRcXHQgIGZsb3cgdGhhdCBncmVhdGx5IGV4Y2VlZHMgYXZlcmFnZSB3b3JrbG9hZC5cXG4gMzgzOlxcdFxcbiAzODQ6XFx0bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbiAzODU6XFx0XFxuIDM4NjpcXHRjb25maWcgTkVUX1BLVEdFTlxcbiAzODc6XFx0XFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcbiAzODg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG4gMzg5OlxcdFxcdGhlbHBcXG4gMzkwOlxcdFxcdCAgVGhpcyBtb2R1bGUgd2lsbCBpbmplY3QgcHJlY29uZmlndXJlZCBwYWNrZXRzLCBhdCBhIGNvbmZpZ3VyYWJsZVxcbiAzOTE6XFx0XFx0ICByYXRlLCBvdXQgb2YgYSBnaXZlbiBpbnRlcmZhY2UuICBJdCBpcyB1c2VkIGZvciBuZXR3b3JrIGludGVyZmFjZVxcbiAzOTI6XFx0XFx0ICBzdHJlc3MgdGVzdGluZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuICBJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZFxcbiAzOTM6XFx0XFx0ICB3aGF0IHdhcyBqdXN0IHNhaWQsIHlvdSBkb24ndCBuZWVkIGl0OiBzYXkgTi5cXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0ICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIHBhY2tldCBnZW5lcmF0b3IgY2FuIGJlIGZvdW5kXFxuIDM5NjpcXHRcXHQgIGF0IFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4ucnN0XFx1MDAzZS5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDM5OTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwa3RnZW4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjM5LjE5OTE1MDk5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzE2NTM2NDc4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBORVRfUEtUR0VOYCBDb25maWd1cmF0aW9uIGFuZCBBc3NvY2lhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBORVRfUEtUR0VOYCBpc3N1ZS4gRmlyc3QsIGxldCdzIG1ha2Ugc3VyZSB3ZSdyZSBnZXR0aW5nIHRoZSBiYXNpY3MgcmlnaHQuIEl0J3MgY2xlYXIgdGhhdCBgTkVUX1BLVEdFTmAgcmVsaWVzIG9uIGJvdGggYElORVRgIGFuZCBgUFJPQ19GU2AsIHNvIHdlJ2xsIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYE5FVF9QS1RHRU5gIHRvIGBFbmFibGVDb25maWdzYCB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBidWlsZCBpc3N1ZXMuXG5cbk5vdywgd2hlcmUncyB0aGUgYWN0dWFsIHByb2JsZW0/IFRoZSBsb2cgcG9pbnRzIHRvIGBfX3BrdGdlbl9OTl90aHJlYWRzYCwgd2hpY2ggaXMgYSBzdGF0aWMgdmFyaWFibGUuIFRoZSBjYWxsZXJzIG9mIHRoaXMgYXJlIGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBHb3QgaXQuIExldCdzIHRyYWNlIHRob3NlIGNhbGxzLiBgcGt0Z2VuX2FkZF9kZXZpY2VgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYGFkZF9kZXZfdG9fdGhyZWFkYC4gYHBrdGdlbl9tYXJrX2RldmljZWAgZ2V0cyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBTbywgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAuXG5cbkhhbmcgb24sIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBpcyBhIG5vdGlmaWVyIGNhbGxiYWNrLiBJbnRlcmVzdGluZy4gTm93LCBgcGt0Z2VuX3RocmVhZF93cml0ZWAgaXMgYSBwcm9jZnMgd3JpdGUgY2FsbGJhY2suIE9rYXksIGxldCdzIHNlZSwgaXMgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5pdCdzIHN0YXRpYyAqYW5kKiBpdCdzIGFzc2lnbmVkIHRvIGBwcm9jX29wc2AuIFJpZ2h0LCB0aGF0J3Mgbm90IHNvbWV0aGluZyB5b3Ugc2VlIGV2ZXJ5IGRheS4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgc2lnbmF0dXJlIG9mIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpbW1lZGlhdGVseSBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NTozMC44NTI4MDI1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxOTg3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NTozMS4wMzQ3OTUwNDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MjU3MzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gYXBwcm9hY2g6XG5cbioqRXhwbG9yaW5nIHRoZSBEeW5hbWljcyBvZiBGdW5jdGlvbiBCZWhhdmlvcioqXG5cbkhtbSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYz8gVGhhdCdzIGFuIGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50LiBJdCBmb3JjZXMgbWUgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBcInN0YXRpY1wiIGluIHRoaXMgY29udGV4dC4gQW0gSSB0aGlua2luZyBhYm91dCBzdGF0aWMgaW4gdGhlIGNvbnRleHQgb2YgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCBvciBpcyB0aGVyZSBhIG1vcmUgZ2VuZXJhbCBjb25jZXB0IGF0IHBsYXkgaGVyZT9cblxuSWYgd2UncmUgdGFsa2luZyBjb2RlLCB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgYnJpbmdzIHVwIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY29wZS4gU3RhdGljIGZ1bmN0aW9ucywgYXMgSSB1bmRlcnN0YW5kIHRoZW0sIGFyZSB1c3VhbGx5IGRlZmluZWQgd2l0aGluIGEgY2xhc3Mgb3IgbmFtZXNwYWNlLCBub3QgdGllZCB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuIFRoZXkgbGl2ZSBhdCB0aGUgY2xhc3MgbGV2ZWwuIFNvLCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCBhbnkgZnVuY3Rpb24gKm5vdCogc3RhdGljIG11c3QgYmUgdGllZCB0byBhbiBpbnN0YW5jZSBvciBzb21ldGhpbmcgZWxzZSB0aGF0IGhhcyBzdGF0ZS5cblxuVGhpcyBsZWFkcyBtZSB0byBjb25zaWRlciBmdW5jdGlvbiBzaWRlIGVmZmVjdHMuIElmIGEgZnVuY3Rpb24gY2FuIGFsdGVyIHRoZSBzdGF0ZSBvZiBzb21ldGhpbmcsIHRoZW4gaXQgY2FuJ3QgYmUgc3RhdGljLCByaWdodD8gVGhlIHZlcnkgbmF0dXJlIG9mIGEgc3RhdGljIGZ1bmN0aW9uIGltcGxpZXMgaXQncyBkZXRlcm1pbmlzdGljIGJhc2VkIHNvbGVseSBvbiBpdHMgaW5wdXRzLiBJZiB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24gaXMgY2hhbmdlZCwgdGhlIHJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUsIGFuZCB0aGlzIGlzIHdoeSBhIHN0YXRpYyBmdW5jdGlvbiBuZWVkcyB0byBjaGFuZ2UuXG5cbkknbSBhbHNvIHdvbmRlcmluZyBpZiB3ZSdyZSBldmVuIGxpbWl0ZWQgdG8gcHJvZ3JhbW1pbmcgaGVyZS4gV2hhdCBhYm91dCBpbiBhIG1vcmUgYWJzdHJhY3QgbWF0aGVtYXRpY2FsIHNlbnNlPyBBcmUgdGhlcmUgZnVuY3Rpb25zIHdoZXJlIHRoZWlyIGJlaGF2aW9yIGlzbid0IGZpeGVkLCBpc24ndCBpbW11dGFibGU/IENhbiBhIGZ1bmN0aW9uJ3MgcmVzcG9uc2UgYmUgZHluYW1pYywgY2hhbmdpbmcgd2l0aCB0aW1lIG9yIHNvbWUgb3RoZXIgZXh0ZXJuYWwgZmFjdG9yPyBUaGlzIG1pZ2h0IGJlIHdoZXJlIHdlIG5lZWQgdG8gc3RhcnQgdGhpbmtpbmcgYWJvdXQgZnVuY3Rpb25zIHdpdGhpbiBzeXN0ZW1zIHdpdGggZmVlZGJhY2sgbG9vcHMuXG5cblVsdGltYXRlbHksIHRoZSBhbnN3ZXIgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgZG9tYWluLiBCdXQgdGhlIHF1ZXN0aW9uIGlzIGEgdXNlZnVsIG9uZS4gSXQgZm9yY2VzIG1lIHRvIGxvb2sgYXQgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB0aGUgc3RhdGljIGFuZCB0aGUgZHluYW1pYywgdGhlIGRldGVybWluaXN0aWMgYW5kIHRoZSBub24tZGV0ZXJtaW5pc3RpYywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBpbiBob3cgd2UgbW9kZWwgYW5kIGludGVyYWN0IHdpdGggdGhlIHdvcmxkIGFyb3VuZCB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTcsIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjM1LjUxNzM3MjUwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NzIwNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2EtekEtWjAtOV9dKyApK1xcXFwqP3BrdGdlbl9bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDgwPXN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy00ODItXFxubmV0L2NvcmUvcGt0Z2VuLmM6NDgzOnN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIHN0cnVjdCBwa3RnZW5fZGV2ICppKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0ODQ6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0ODU6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxubmV0L2NvcmUvcGt0Z2VuLmMtNDg2LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0ODc6c3RhdGljIGludCBwa3RnZW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4ODpzdGF0aWMgdm9pZCBwa3RnZW5fcnVuX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbik7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg5OnN0YXRpYyB2b2lkIHBrdGdlbl9yZXNldF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQ5MDpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTQ5MS1cXG5uZXQvY29yZS9wa3RnZW4uYzo0OTI6c3RhdGljIHZvaWQgcGt0Z2VuX3N0b3Aoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQ5MzpzdGF0aWMgdm9pZCBwa3RnZW5fY2xlYXJfY291bnRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTQ5NC1zdGF0aWMgdm9pZCBmaWxsX2ltaXhfZGlzdHJpYnV0aW9uKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KTtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTU1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTU2NS1cXG5uZXQvY29yZS9wa3RnZW4uYzo1NjY6c3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9wa3RnZW4uYy01Njcte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9OTEzPXN0YXRpYyBzc2l6ZV90IGdldF9sYWJlbHMoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTk1NS1cXG5uZXQvY29yZS9wa3RnZW4uYzo5NTY6c3RhdGljIF9fdTMyIHBrdGdlbl9yZWFkX2ZsYWcoY29uc3QgY2hhciAqZiwgYm9vbCAqZGlzYWJsZSlcXG5uZXQvY29yZS9wa3RnZW4uYy05NTcte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtOTg0LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjk4NTpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtOTg2LVxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCxcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4NzItXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTg3MzpzdGF0aWMgaW50IHBrdGdlbl9pZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4NzQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTg4NjpzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9wa3RnZW4uYy0xODg3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAxMi1cXG5uZXQvY29yZS9wa3RnZW4uYzoyMDEzOnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMTQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjAyNz1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjA1Mi0gKi9cXG5uZXQvY29yZS9wa3RnZW4uYzoyMDUzOnN0YXRpYyB2b2lkIHBrdGdlbl9tYXJrX2RldmljZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDU0LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwODQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjA4NTpzdGF0aWMgdm9pZCBwa3RnZW5fY2hhbmdlX25hbWUoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwODYte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjExNC1cXG5uZXQvY29yZS9wa3RnZW4uYzoyMTE1OnN0YXRpYyBpbnQgcGt0Z2VuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE2LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTQwLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjIxNDE6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwa3RnZW5fZGV2X2dldF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcXG5uZXQvY29yZS9wa3RnZW4uYy0yMTQyLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIxNjEtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjE2MjpzdGF0aWMgaW50IHBrdGdlbl9zZXR1cF9kZXYoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTIxNjMtXFx0XFx0XFx0ICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBjb25zdCBjaGFyICppZm5hbWUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTk4LSAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jOjIxOTk6c3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0yMjAwLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTI3MDA9c3RhdGljIHUzMiBwa3RnZW5fZHN0X21ldHJpY3NbUlRBWF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI3MDQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjcwNTpzdGF0aWMgaW50IHBrdGdlbl9vdXRwdXRfaXBzZWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjcwNi17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yODIwPXN0YXRpYyBpbmxpbmUgX19iZTE2IGJ1aWxkX3RjaSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBjZmksXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yODI1LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjI4MjY6c3RhdGljIHZvaWQgcGt0Z2VuX2ZpbmFsaXplX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9wa3RnZW4uYy0yODI3LVxcdFxcdFxcdFxcdGludCBkYXRhbGVuKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjkwNS1cXG5uZXQvY29yZS9wa3RnZW4uYzoyOTA2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MDctXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zMTkxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTk5LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMyMDA6c3RhdGljIHZvaWQgcGt0Z2VuX2NsZWFyX2NvdW50ZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMyMDEte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzIxMC1cXG5uZXQvY29yZS9wa3RnZW4uYzozMjExOnN0YXRpYyB2b2lkIHBrdGdlbl9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzIxMi17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMjQzLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMyNDQ6c3RhdGljIHZvaWQgcGt0Z2VuX2hhbmRsZV9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIHUzMiBmbGFncylcXG5uZXQvY29yZS9wa3RnZW4uYy0zMjQ1LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMyNTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzI1NjpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzI1Ny17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zMjYzPXN0YXRpYyBpbnQgdGhyZWFkX2lzX3J1bm5pbmcoY29uc3Qgc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMjc2LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMyNzc6c3RhdGljIGludCBwa3RnZW5fd2FpdF90aHJlYWRfcnVuKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMyNzgte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzI5Ni1cXG5uZXQvY29yZS9wa3RnZW4uYzozMjk3OnN0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfYWxsX3RocmVhZHNfcnVuKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcXG5uZXQvY29yZS9wa3RnZW4uYy0zMjk4LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMjItXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzMyMzpzdGF0aWMgdm9pZCBwa3RnZW5fcnVuX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcXG5uZXQvY29yZS9wa3RnZW4uYy0zMzI0LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMzQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzMzNTpzdGF0aWMgdm9pZCBwa3RnZW5fcmVzZXRfYWxsX3RocmVhZHMoc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMzYte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzM0Nz1zdGF0aWMgdm9pZCBzaG93X3Jlc3VsdHMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBucl9mcmFncylcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzODgtLyogU2V0IHN0b3BwZWQtYXQgdGltZXIsIHJlbW92ZSBmcm9tIHJ1bm5pbmcgbGlzdCwgZG8gY291bnRlcnMgXFx1MDAyNiBzdGF0aXN0aWNzICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzM4OTpzdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0zMzkwLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTM0MDk9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpuZXh0X3RvX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM0MjYtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQyNzpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcXG5uZXQvY29yZS9wa3RnZW4uYy0zNDI4LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM0NDUtICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQ0NjpzdGF0aWMgdm9pZCBwa3RnZW5fcmVtX29uZV9pZihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcXG5uZXQvY29yZS9wa3RnZW4uYy0zNDQ3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM0NjctXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQ2ODpzdGF0aWMgdm9pZCBwa3RnZW5fcmVtX2FsbF9pZnMoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ2OS17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNDg2LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM0ODc6c3RhdGljIHZvaWQgcGt0Z2VuX3JlbV90aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ4OC17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNDkyLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM0OTM6c3RhdGljIHZvaWQgcGt0Z2VuX3Jlc2NoZWQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ5NC17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNTAwLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM1MDE6c3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTAyLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM1MTYtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzUxNzpzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTE4LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3MDUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzcwNjpzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfd29ya2VyKHZvaWQgKmFyZylcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzA3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mzc3NjpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzgwMD1zdGF0aWMgaW50IGFkZF9kZXZfdG9fdGhyZWFkKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMC1cXG5uZXQvY29yZS9wa3RnZW4uYzozODMxOnN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG5uZXQvY29yZS9wa3RnZW4uYy0zODMyLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MTgtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzkxOTpzdGF0aWMgaW50IF9fbmV0X2luaXQgcGt0Z2VuX2NyZWF0ZV90aHJlYWQoaW50IGNwdSwgc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MjAte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9Mzk3Mj1zdGF0aWMgdm9pZCBfcmVtX2Rldl9mcm9tX2lmX2xpc3Qoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zOTg3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM5ODg6c3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zOTg5LVxcdFxcdFxcdFxcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NTozNS42NzYxMDEwNzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYxNDUzOTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZydzIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIHRoZSBidWcncyBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBoaXQgdGhpcyBjb2RlLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBUaG9zZSBpbiB0dXJuIGFyZSBjYWxsZWQgYnkgYHBrdGdlbl9hZGRfZGV2aWNlYCB2aWEgYHBrdGdlbl90aHJlYWRfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYHByb2Nfd3JpdGVgIGZvciBgcGt0Z2VuX3RocmVhZF9wcm9jX29wc2AsIGFuZCBhbHNvIHZpYSBgYWRkX2Rldl90b190aHJlYWRgLiBgcGt0Z2VuX21hcmtfZGV2aWNlYCBpcyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLCB3aGljaCBpcyBhIG5vdGlmaWVyLiBTbywgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBraWNrIG9mZiB0aGlzIHdob2xlIHNlcXVlbmNlLCBhcmUgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAuXG5cbk5vdywgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIEkgd2FudCB0byBrZWVwIGluIG1pbmQsIGJ1dCBpdCAqaXMqIGFuIEFQSSBlbnRyeSBwb2ludCBiZWNhdXNlIGl0J3MgaGFuZGxpbmcgcHJvY2ZzIHdyaXRlcy4gVGhhdCBtYWtlcyBpdCBhIGRlY2VudCBjYW5kaWRhdGUgZm9yIG15IGBGb2N1c1N5bWJvbHNgIGlmIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgdGVzdCB0aGUgcHJvY2ZzIHdyaXRlIHBhdGguIExldCdzIHNlZSBpZiBpdCdzIGlubGluZWQuIE5vcGUsIGl0J3MgYXNzaWduZWQgdG8gYSBzdHJ1Y3QuIE9rYXksIHNhbWUgcXVlc3Rpb24gZm9yIGBwa3RnZW5fZGV2aWNlX2V2ZW50YC4gSXQncyBhbHNvIGFzc2lnbmVkIHRvIGEgc3RydWN0LCBzbyBpdCdzIG5vdCBpbmxpbmVkIGVpdGhlci4gSSB3aWxsIGluY2x1ZGUgdGhlc2UgaW4gbXkgRm9jdXNTeW1ib2xzLlxuXG5XaGF0IGFib3V0IHRob3NlIGhlbHBlciBmdW5jdGlvbnM/IEkgc2hvdWxkIGNoZWNrIGlmIGBwa3RnZW5fYWRkX2RldmljZWAgaXMgaW5saW5lZC4gSXQncyBzdGF0aWMsIGJ1dCBpdCdzIHByZXR0eSBoZWZ0eSwgc28gcHJvYmFibHkgbm90LiBBY3R1YWxseSwgSSB3aWxsIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgIGFzIHdlbGwuIE9oLCB3YWl0LCBgcGt0Z2VuX2FkZF9kZXZpY2VgIGlzIHN0YXRpYyB0b28uXG5cblNvIHRvIHJlY2FwOiBJJ2xsIGZvY3VzIG9uIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgZ3VpZGFuY2UgaGVyZS4gVGhlIGluc3RydWN0aW9uIGlzIHRvIHByZWZlciAqbm9uLXN0YXRpYywgbm9uLWlubGluZWQqIEFQSSBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQWx0aG91Z2ggYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgKmFyZSogc3RhdGljLCB0aGV5IGFyZSBBUEkgZW50cnlwb2ludHMgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSAqYXJlKiBleHBsaWNpdGx5IHVzZWQgdmlhIHRoZWlyIGFkZHJlc3NlcywgbWVhbmluZyB0aGUgY29tcGlsZXIgKmNhbm5vdCogaW5saW5lIHRoZW0uIFNpbmNlIHRoZSBwcm9tcHQgZG9lcyBub3QgZGlzcXVhbGlmeSBzdGF0aWMgQVBJIGVudHJ5IHBvaW50cywgSSB3aWxsIGtlZXAgdGhlbS4gTm93LCBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBwa3RnZW4uY2A/IFRoYXQncyB0aGUgbmV4dCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTYsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDU6NDQuMjkwNjQzNzE3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE2MjIyMzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rIFxcXFwqKnBrdGdlbl9bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjQ0LjQxMjI3ODA2M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NDIyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBzb21lIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGhlcmUuIFdlIG5lZWQgdG8gZm9jdXMgb24gYXNwZWN0cyBvZiB0aGUgY29kZSB0aGF0IGFyZSBpbmhlcmVudGx5IGR5bmFtaWMsIHRoYXQgY2hhbmdlIGJhc2VkIG9uIGlucHV0LCBzdGF0ZSwgb3Igc29tZSBleHRlcm5hbCBmYWN0b3IuIFN0YXRpYyBtZXRob2RzIGFuZCBmdW5jdGlvbnMgYXJlIHByZWRpY3RhYmxlLCB0aGV5J3JlIGRlZmluZWQgYnkgdGhlIHR5cGUuIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBpbnRlcmVzdGluZyBzdHVmZiwgdGhlIHBsYWNlcyB3aGVyZSBiZWhhdmlvciBpcyB2YXJpYWJsZS4gV2hlcmUgaXMgdGhlIGNvcmUgb2YgdGhlIHN0YXRlIHRyYW5zaXRpb24/IFdoZXJlIGFyZSB0aGUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzPyBXaGF0J3MgdGhlIGNvbnRleHQ/IFdlIGFyZSBsb29raW5nIGZvciB0aGUgZWRnZSBjYXNlcywgYW5kIGFyZWFzIHRoYXQgcHJvdmlkZSBmbGV4aWJpbGl0eSBpbiB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjQ3LjkyMDcwNTQyNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczMDY4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz01MDA9c3RhdGljIGludCBkZWJ1ZyAgX19yZWFkX21vc3RseTtcXG5uZXQvY29yZS9wa3RnZW4uYy01MDEtXFxubmV0L2NvcmUvcGt0Z2VuLmM6NTAyOnN0YXRpYyBERUZJTkVfTVVURVgocGt0Z2VuX3RocmVhZF9sb2NrKTtcXG5uZXQvY29yZS9wa3RnZW4uYy01MDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjQ4LjE5Mzc3OTY3NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEyNzAxOTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIG1vZHVsZSBkZXZlbG9wbWVudCBhbmQgbmV0d29yayBwcm9ncmFtbWluZzpcblxuKipNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIENsZWFudXAgLSBXaGF0IHRvIEV4cGVjdCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBwa3RnZW4uY2AuLi4gSXQncyBhIG1vZHVsZSwgd2hpY2ggbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSBsb2FkZWQgaW50byB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRoYXQgdGhpcyBmaWxlIG1vc3QgbGlrZWx5IHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAuIFNwZWNpZmljYWxseSwgSSdkIGV4cGVjdCB0byBzZWUgdGhlIHN0YW5kYXJkIGBpbml0X21vZHVsZWAgYW5kIGBjbGVhbnVwX21vZHVsZWAgZnVuY3Rpb25zLiBUaG91Z2gsIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIGEgY3VzdG9tIG5hbWluZyBzY2hlbWUsIHNvIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBgcGdfaW5pdGAgYW5kIGBwZ19jbGVhbnVwYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCwgYXMgYSBnZW5lcmFsIHJ1bGUsIGEgbW9kdWxlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFuZCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIGxvYWRpbmcuIFNvLCB0aGF0J3Mgd2hhdCBJJ20gYW50aWNpcGF0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjI5LjMyMDgwMjE1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDU0ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTQxMTU9c3RhdGljIHZvaWQgX19leGl0IHBnX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjEtXFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMjptb2R1bGVfaW5pdChwZ19pbml0KTtcXG5uZXQvY29yZS9wa3RnZW4uYy00MTIzLW1vZHVsZV9leGl0KHBnX2NsZWFudXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NjoyOS40OTM4Njk5ODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg1MTEwNTYxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbnMgXHUwMDI2IEVudHJ5IFBvaW50czogQSBRdWljayBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBhcmNoaXRlY3R1cmUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBNb3N0IGZ1bmN0aW9ucyBhcmUsIGVzc2VudGlhbGx5LCBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhpbmdzLiBUaGF0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgY29udGFpbmVkIHByb2Nlc3NpbmcgZmxvdy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgZXhlY3V0aW9uICpiZWdpbiogYW5kICplbmQqLCBhbmQgd2hhdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGFjdHVhbGx5IGdldCB0aGluZ3MgbW92aW5nPyBDb25zaWRlcmluZyB0aGUgc3RhdGljIG5hdHVyZSwgYHBnX2luaXRgIGFuZCBgcGdfY2xlYW51cGAgYXJlIHRoZSAqb2J2aW91cyogZXhjZXB0aW9ucyBhbmQgbWF5IGJlIHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcG9pbnRzLCBidXQgSSBoYXZlIGEgZmVlbGluZyB0aGUgcmVhbCBcIm1lYXRcIiBvZiB0aGUgcHJvY2VzcyBpcyBzb21ld2hlcmUgZWxzZS4gVGhlcmVmb3JlLCBgcGt0Z2VuX3RocmVhZF93cml0ZWAgYW5kIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBsb29rIGxpa2UgdGhlIG1vc3QgcHJvYmFibGUgY2FuZGlkYXRlcyBmb3IgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBkYXRhIHByb2Nlc3NpbmcgYW5kIGV4dGVybmFsIGlucHV0LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gLSBsZXQncyBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciB3cml0ZS1yZWxhdGVkIHByb2NmcyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gR290dGEgcnVsZSBvdXQgYW55IGxlc3Mgb2J2aW91cyBwb3NzaWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjczNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjQ4LjAwNDkzMDM2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDQyMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nfd3JpdGUuKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTYxLVxcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxubmV0L2NvcmUvcGt0Z2VuLmM6NTYyOlxcdC5wcm9jX3dyaXRlXFx0PSBwZ2N0cmxfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTYzLVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODEtXFx0LnByb2NfbHNlZWtcXHQ9IHNlcV9sc2VlayxcXG5uZXQvY29yZS9wa3RnZW4uYzoxODgyOlxcdC5wcm9jX3dyaXRlXFx0PSBwa3RnZW5faWZfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTg4My1cXHQucHJvY19yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAyMS1cXHQucHJvY19sc2Vla1xcdD0gc2VxX2xzZWVrLFxcbm5ldC9jb3JlL3BrdGdlbi5jOjIwMjI6XFx0LnByb2Nfd3JpdGVcXHQ9IHBrdGdlbl90aHJlYWRfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAyMy1cXHQucHJvY19yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6NDguMTM1OTc3NTc3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA0NTIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGlucG9pbnRpbmcgdGhlIFJvb3QgQ2F1c2UqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB0aGlzIGJ1ZywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGlzc3VlIHN0ZW1zIGZyb20gaW50ZXJhY3Rpb25zIHdpdGggdGhyZWFkcyBhbmQgZGV2aWNlIG1hbmFnZW1lbnQuIEkndmUgbmFycm93ZWQgaXQgZG93biB0byB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgcGdjdHJsX3dyaXRlYCwgYHBrdGdlbl9pZl93cml0ZWAsIGFuZCBgcGt0Z2VuX3RocmVhZF93cml0ZWAuIFRoZSB0cmlnZ2VyIHNlZW1zIHRvIGJlIHdoZW4gYSBkZXZpY2UgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEgdGhyZWFkIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBhY3Rpb25zIGJlaW5nIGV4ZWN1dGVkIGJ5IGBwa3RnZW5fdGhyZWFkX3dyaXRlYC4gTm93LCBgcGt0Z2VuX3RocmVhZF93cml0ZWAgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoYXQgZGV2aWNlIGFkZGl0aW9uL3JlbW92YWwuIE9uIHRoZSBvdGhlciBoYW5kLCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gaGFuZGxlZCBieSBgcGt0Z2VuX2RldmljZV9ldmVudGAgd2hpY2ggYWxzbyByZW1vdmVzIHRoZSBkZXZpY2UgZnJvbSB0aGUgdGhyZWFkLiBTbywgbG9naWNhbGx5LCBteSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBgcGt0Z2VuX3RocmVhZF93cml0ZWAgYW5kIGBwa3RnZW5fZGV2aWNlX2V2ZW50YC4gVGhvc2UgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoaXMgZGV2aWNlIG1hbmFnZW1lbnQgaXMgZXhwbGljaXRseSBoYW5kbGVkLCBhbmQgd2hlcmUgYSBidWcgY291bGQgcmVhciBpdHMgaGVhZC4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgcGt0Z2VuX3RocmVhZF93cml0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjU0LjI1NjQzMzk3M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NjAxMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjAxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl90aHJlYWRfcHJvY19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIxLVxcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjAyMjpcXHQucHJvY193cml0ZVxcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIzLVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0Njo1NC40NDEwNDA1ODZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0ODIwMDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3VwcG9zZWQgdG8gc3BlYWsgYXMgYW4gZXhwZXJ0OlxuXG4qKkRvdWJsZS1DaGVja2luZyBgcGt0Z2VuX2RldmljZV9ldmVudGAqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nLCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBmdW5jdGlvbi4gSXTigJlzIGZ1bmRhbWVudGFsLCB0aGUgYmVkcm9jayBvZiBob3cgd2UgaGFuZGxlIHBhY2tldCBnZW5lcmF0aW9uIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24uIEkgY2FuJ3QganVzdCBhc3N1bWUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbnVhbmNlcyBvZiB0aGUgcmVjZW50IGNoYW5nZXMuIEEgcXVpY2ssIGZvY3VzZWQgcmV2aWV3IGhlcmUgY2FuIHNhdmUgbWUgaG91cnMgZG93biB0aGUgbGluZS4gSSdtIHRoaW5raW5nIEknbGwgZm9jdXMgb24gdGhlc2Uga2V5IGFyZWFzIGR1cmluZyBteSBzY2FuOiBlbnN1cmluZyBjb3JyZWN0IGV2ZW50IHRyaWdnZXJpbmcgdW5kZXIgdmFyaW91cyBsb2FkIGNvbmRpdGlvbnMsIHZlcmlmeWluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwcm9wZXJseSBwb3B1bGF0ZWQsIGFuZCBlbnN1cmluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkcml2ZXJzIGlzIHByZWNpc2VseSB3aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSBkZXNpZ24uIEFueSB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0aGVyZSwgYW55IHN1YnRsZSBlZGdlIGNhc2VzLCBhbmQgdGhpcyB3aG9sZSB0aGluZyBjb3VsZCB1bnJhdmVsLiBUaW1lIGZvciBhIG1ldGljdWxvdXMgb25jZS1vdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjU4LjM4OTI0NDQ1MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NTgwNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9kZXZpY2VfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDg1PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg3OnN0YXRpYyBpbnQgcGt0Z2VuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTtcXG5uZXQvY29yZS9wa3RnZW4uYy00ODgtc3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9NTA0PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGt0Z2VuX25vdGlmaWVyX2Jsb2NrID0ge1xcbm5ldC9jb3JlL3BrdGdlbi5jOjUwNTpcXHQubm90aWZpZXJfY2FsbCA9IHBrdGdlbl9kZXZpY2VfZXZlbnQsXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTA2LX07XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yMDg1PXN0YXRpYyB2b2lkIHBrdGdlbl9jaGFuZ2VfbmFtZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE0LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjIxMTU6c3RhdGljIGludCBwa3RnZW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTIxMTYtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6NTguNTA0ODMzNjM3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDQ1NzgyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgU3VtbWFyeSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgcmVhbGx5IGp1bXAgb3V0IGFzIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCdzIGJyZWFrIGl0IGRvd24gaW4gbXkgaGVhZDpcblxuKiAgICoqRnV6emluZyBWYWx1ZToqKiBEZWZpbml0ZWx5IHdvcnRoIHB1cnN1aW5nLlxuKiAgICoqVGhlIEJ1ZzoqKiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGludm9sdmVzIHRoZSBgcGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmtgIHdpdGhpbiB0aGUgYF9fcGt0Z2VuX05OX3RocmVhZHNgIGNvZGUuIFRoZSBmaXggZXh0ZW5kcyB0aGUgUkNVIHJlYWQgbG9jayB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGF0IHZhcmlhYmxlLiBUaGlzIHZ1bG5lcmFiaWxpdHkgY2FuIGJlIHRyaWdnZXJlZCB0aHJvdWdoIHdyaXRlcyB0byB0aGUgcGt0Z2VuIHRocmVhZCBmaWxlcyB2aWEgcHJvY2ZzIG9yIGR1cmluZyBuZXR3b3JrIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBldmVudHMuXG4qICAgKipGb2N1cyBBcmVhczoqKiBgcGt0Z2VuX3RocmVhZF93cml0ZWAgYW5kIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBhcmUgdGhlIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGNhbiBiZSB0cmlnZ2VyZWQuXG4qICAgKipDb25maWd1cmF0aW9uOioqIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBpcyBgTkVUX1BLVEdFTmAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IGBORVRfUEtUR0VOYCBpdHNlbGYgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgY29tcGxpY2F0ZSB0aGluZ3MuIEFoLCBpdCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgYFBST0NfRlNgLiBUaG9zZSBhcmUgYmFzaWNhbGx5IGd1YXJhbnRlZWQgdG8gYmUgZW5hYmxlZCwgdGhleSdyZSBwcmV0dHkgdWJpcXVpdG91cy4gU28sIGBORVRfUEtUR0VOYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuQWxyaWdodCwgSSB0aGluayB0aGF0J3MgYSBzb2xpZCBhc3Nlc3NtZW50LiBMZXQncyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5OCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDc6MDUuNjA5NDE2MjM3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMzY5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX3RocmVhZF93cml0ZVwiLFxuICAgIFwicGt0Z2VuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlcmVtb3ZhbF9tYXJrYCBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgYnkgZXh0ZW5kaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIGNvdmVyIHRoZSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwcm9jZnMgd3JpdGVzIHRvIHBrdGdlbiB0aHJlYWQgZmlsZXMgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBldmVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgICBcInBrdGdlbl9kZXZpY2VfZXZlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXFx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NzowNS44MTE3OTY2OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1MTU0MTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ3OjA1LjgxMjcyMTEyOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5ODUwNjExMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBieSBleHBhbmRpbmcgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgdG8gY292ZXIgdGhlIGFjY2VzcyB0byBgcGt0X2Rldi1cXHUwMDNlcmVtb3ZhbF9tYXJrYCBhbmQgYHQtXFx1MDAzZWNvbnRyb2xgLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3b3VsZCBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYW4gUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUgKGBwa3RnZW5fZGV2YCkgd2hpY2ggY291bGQgdGhlbiBiZSBmcmVlZCBiZWZvcmUgdGhlIGNhbGxlciBhY2Nlc3NlZCBpdC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDMxMDUwMjUzYjZkNmVkNjUwNTg0NmUxZmIzM2M1YzkzYTdiZThkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjE3OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xuaW5kZXggN2Y4MWFlZDQ2NjcyMy4uNGZiMTg1MzU4OWIzMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTIwMzIsMTQgKzIwMzIsMTcgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpfX3BrdGdlbl9OTl90aHJlYWRzKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcbiBcdGJvb2wgZXhhY3QgPSAocmVtb3ZlID09IEZJTkQpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBcdTAwMjZwbi1cdTAwM2Vwa3RnZW5fdGhyZWFkcywgdGhfbGlzdCkge1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XG4gXHRcdGlmIChwa3RfZGV2KSB7XG4gXHRcdFx0aWYgKHJlbW92ZSkge1xuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmsgPSAxO1xuIFx0XHRcdFx0dC1cdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO1xuIFx0XHRcdH1cbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKHBrdF9kZXYpXG4rXHRcdFx0YnJlYWs7XG4gXHR9XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG5AQCAtMzc3Niw3ICszNzc5LDYgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4gXHRzdHJ1Y3QgcGt0Z2VuX2RldiAqcCwgKnBrdF9kZXYgPSBOVUxMO1xuIFx0c2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dC1cdTAwM2VpZl9saXN0LCBsaXN0KVxuIFx0XHRpZiAoc3RybmNtcChwLVx1MDAzZW9kZXZuYW1lLCBpZm5hbWUsIGxlbikgPT0gMCkge1xuIFx0XHRcdGlmIChwLVx1MDAzZW9kZXZuYW1lW2xlbl0pIHtcbkBAIC0zNzg3LDcgKzM3ODksNiBAQCBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRwcl9kZWJ1ZyhcImZpbmRfZGV2KCVzKSByZXR1cm5pbmcgJXBcXG5cIiwgaWZuYW1lLCBwa3RfZGV2KTtcbiBcdHJldHVybiBwa3RfZGV2O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ3OjA1LjgxMjcyMjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg1MDU3OTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSQ1UgTG9ja2luZyBGaXggaW4gcGt0Z2VuLmMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9wa3RnZW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHdlJ3JlIGhhbmRsaW5nIFJDVSBsb2NraW5nIHdpdGggYHBrdGdlbl9maW5kX2RldmAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscy4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIGV4cGFuZCB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5QcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3YXMgbWFuYWdpbmcgaXRzIG93biBSQ1UgbG9ja3MuIEl0IHdvdWxkIGZpbmQgYSBgcGt0Z2VuX2RldmAgKHdoaWNoLCBvZiBjb3Vyc2UsIHJlc2lkZXMgaW4gYW4gUkNVIGxpc3QpLCBhbmQgdGhlbiBkcm9wIHRoZSBsb2NrIGJlZm9yZSByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoYXQgc3RydWN0dXJlLiAgVGhpcyBzZWVtcyBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZSBjYWxsZXIgd2FzIHRoZW4gcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlIHNldHRpbmcgYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrID0gMWAgYW5kIG1vZGlmeWluZyBgdC1cdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO2AsICphZnRlciogdGhlIGluaXRpYWwgYHBrdGdlbl9maW5kX2RldmAgY2FsbC4gVGhlIHByb2JsZW0gaXMsIHRoYXQgYHBrdGdlbl9kZXZgIGNvdWxkIGJlIGZyZWVkIGJlZm9yZSB0aG9zZSBtb2RpZmljYXRpb25zIHdlcmUgZG9uZSwgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGljaCBLQVNBTiB3b3VsZCB0aGFua2Z1bGx5IGNhdGNoLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBtb3ZpbmcgdGhlIFJDVSBsb2NraW5nIHRvIHRoZSAqY2FsbGVyKiBvZiBgcGt0Z2VuX2ZpbmRfZGV2YC4gTm93LCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBsb2NrIHdoaWxlIGFjY2Vzc2luZyB0aGUgcmV0dXJuZWQgYHBrdGdlbl9kZXZgLCBlbnN1cmluZyBpdCByZW1haW5zIHZhbGlkLiAgRXNzZW50aWFsbHksIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aG9zZSBvcGVyYXRpb25zLlxuXG5TbywgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgLCB0aGUgcGF0Y2ggYWRkcyB0aGUgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBgcGt0Z2VuX2ZpbmRfZGV2KClgIGNhbGwuIEFuZCB3aXRoaW4gYHBrdGdlbl9maW5kX2RldmAsIHRoZSBsb2NrL3VubG9jayBjYWxscyBhcmUgcmVtb3ZlZC5cblxuTXkgY29uY2VybiBub3cgaXMsIGlzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBhbnkgaW5mb3JtYXRpb24gbGVha3MgYXMgYSByZXN1bHQ/IE5vLCB0aGlzIGlzIGp1c3QgUkNVIGxvY2tpbmcuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgdGhlIGNvcHlpbmcgb2YgYW55dGhpbmcgbmV3IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIGlzIGp1c3QgYSBsb2NraW5nIGFkanVzdG1lbnQgYW5kIHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGRhdGEgbGVha3MsIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIEknbSBtYXJraW5nIGl0IGFzIGBOZWVkc0tNU0FOPWZhbHNlYC4gIFRoaXMgaXMgYSBjbGVhbiBmaXggZm9yIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgbm90aGluZyBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA4LCJPdXRwdXRUb2tlbnMiOjE4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ3OjE1LjY2MzMwNzAyOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gYnkgZXhwYW5kaW5nIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIHRvIGNvdmVyIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXFx1MDAzZXJlbW92YWxfbWFya2AgYW5kIGB0LVxcdTAwM2Vjb250cm9sYC4gUHJldmlvdXNseSwgYHBrdGdlbl9maW5kX2RldmAgd291bGQgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5LCByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGFuIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlIChgcGt0Z2VuX2RldmApIHdoaWNoIGNvdWxkIHRoZW4gYmUgZnJlZWQgYmVmb3JlIHRoZSBjYWxsZXIgYWNjZXNzZWQgaXQuIFRoaXMgaXMgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVxcdTAwM2VyZW1vdmFsX21hcmtgIGFuZCBgdC1cXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 17:46:02 +0000 UTC FinishedAt: 2026-08-24 18:47:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "900e9a22-d62a-41cf-a145-d0e01d7cebbf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pktgen_thread_write", "pktgen_device_event" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfUEtUR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93cml0ZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5fZGV2aWNlX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gYnkgZXhwYW5kaW5nIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIHRvIGNvdmVyIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCBhbmQgYHQtXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDMxMDUwMjUzYjZkNmVkNjUwNTg0NmUxZmIzM2M1YzkzYTdiZThkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjE3OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDdmODFhZWQ0NjY3MjMuLjRmYjE4NTM1ODliMzEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDMyLDE0ICYjNDM7MjAzMiwxNyBAQCBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxuIFx0Ym9vbCBleGFjdCA9IChyZW1vdmUgPT0gRklORCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIFx1MDAyNnBuLVx1MDAzZXBrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XG4gXHRcdGlmIChwa3RfZGV2KSB7XG4gXHRcdFx0aWYgKHJlbW92ZSkge1xuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmsgPSAxO1xuIFx0XHRcdFx0dC1cdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO1xuIFx0XHRcdH1cbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAocGt0X2RldilcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG5AQCAtMzc3Niw3ICYjNDM7Mzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuIFx0c3RydWN0IHBrdGdlbl9kZXYgKnAsICpwa3RfZGV2ID0gTlVMTDtcbiBcdHNpemVfdCBsZW4gPSBzdHJsZW4oaWZuYW1lKTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNnQtXHUwMDNlaWZfbGlzdCwgbGlzdClcbiBcdFx0aWYgKHN0cm5jbXAocC1cdTAwM2VvZGV2bmFtZSwgaWZuYW1lLCBsZW4pID09IDApIHtcbiBcdFx0XHRpZiAocC1cdTAwM2VvZGV2bmFtZVtsZW5dKSB7XG5AQCAtMzc4Nyw3ICYjNDM7Mzc4OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHByX2RlYnVnKFwmIzM0O2ZpbmRfZGV2KCVzKSByZXR1cm5pbmcgJXBcXG5cJiMzNDssIGlmbmFtZSwgcGt0X2Rldik7XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfUEtUR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93cml0ZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5fZGV2aWNlX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmtgIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBieSBleHRlbmRpbmcgdGhlIFJDVSByZWFkIGxvY2sgdG8gY292ZXIgdGhlIGFjY2Vzcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHByb2NmcyB3cml0ZXMgdG8gcGt0Z2VuIHRocmVhZCBmaWxlcyBhbmQgbmV0ZGV2IHVucmVnaXN0cmF0aW9uIGV2ZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggN2Y4MWFlZDQ2NjcyMy4uNGZiMTg1MzU4OWIzMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTIwMzIsMTQgJiM0MzsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sCiAJYm9vbCBleGFjdCA9IChyZW1vdmUgPT0gRklORCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZhbXA7cG4tJmd0O3BrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiAJCXBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7CiAJCWlmIChwa3RfZGV2KSB7CiAJCQlpZiAocmVtb3ZlKSB7CiAJCQkJcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrID0gMTsKIAkJCQl0LSZndDtjb250cm9sIHw9IFRfUkVNREVWOwogCQkJfQotCQkJYnJlYWs7CiAJCX0KJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaWYgKHBrdF9kZXYpCiYjNDM7CQkJYnJlYWs7CiAJfQogCXJldHVybiBwa3RfZGV2OwogfQpAQCAtMzc3Niw3ICYjNDM7Mzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCXN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7CiAJc2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsICZhbXA7dC0mZ3Q7aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHN0cm5jbXAocC0mZ3Q7b2Rldm5hbWUsIGlmbmFtZSwgbGVuKSA9PSAwKSB7CiAJCQlpZiAocC0mZ3Q7b2Rldm5hbWVbbGVuXSkgewpAQCAtMzc4Nyw3ICYjNDM7Mzc4OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCQkJYnJlYWs7CiAJCX0KIAotCXJjdV9yZWFkX3VubG9jaygpOwogCXByX2RlYnVnKCYjMzQ7ZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxuJiMzNDssIGlmbmFtZSwgcGt0X2Rldik7CiAJcmV0dXJuIHBrdF9kZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIENvcmUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9wa3RnZW4uY2AuIEl0JiMzOTtzIG1vdmluZyB0aGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgY2FsbHMgb3V0IG9mIGBwa3RnZW5fZmluZF9kZXYoKWAgYW5kIGludG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24gYF9fcGt0Z2VuX05OX3RocmVhZHMoKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgKm1pZ2h0KiBiZSBjbGVhbmVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLgoKV2FpdCBhIHNlY29uZC4uLiBkb2VzbiYjMzk7dCBgcGt0Z2VuX2ZpbmRfZGV2KClgIGdldCBjYWxsZWQgZnJvbSAqb3RoZXIqIHBsYWNlcyBiZXNpZGVzIGp1c3QgYF9fcGt0Z2VuX05OX3RocmVhZHMoKWA/IFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIGxvY2sgc2VtYW50aWNzLiBJZiB0aGUgUkNVIGNhbGxzIHdlcmUgbW92ZWQgb3V0IG9mIGBwa3RnZW5fZmluZF9kZXYoKWAgYW5kIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gKm90aGVyKiB0aHJlYWRzIHdoaWNoIGhhdmVuJiMzOTt0IGluY29ycG9yYXRlZCB0aGUgY2FsbHMsIHdlIG1heSBoYXZlIGludHJvZHVjZWQgYSByYWNlIGNvbmRpdGlvbi4gSSBuZWVkIHRvIGtub3cgd2hlcmUgYWxsIGBwa3RnZW5fZmluZF9kZXYoKWAgaXMgdXNlZC4gVGltZSB0byBmaXJlIHVwIHRoZSBncmVwIGNvbW1hbmQgYW5kIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9maW5kX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQ4ND1zdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxubmV0L2NvcmUvcGt0Z2VuLmMtNDg2LVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MjAyNz1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMzUtXHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjIwMzY6XHRcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XG5uZXQvY29yZS9wa3RnZW4uYy0yMDM3LVx0XHRpZiAocGt0X2Rldikge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM3MDY9c3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzc3NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjM3NzY6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBpbnRvIHRoZSBgcGt0Z2VuX2ZpbmRfZGV2YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBwa3RnZW5fZmluZF9kZXZgIGlzIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBlbHNlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaC4uLiBIbW0sIGludGVyZXN0aW5nLiBMb29rcyBsaWtlIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBpcyB0aGUgKm9ubHkqIGNhbGxlci4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgb3IgYXQgbGVhc3QgbmFycm93cyB0aGUgc2NvcGUuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9wa3RnZW4uY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBrdGdlbl9maW5kX2RldmAgaXMgZG9pbmcgd2l0aGluIHRoZSB0aHJlYWQgaW5pdGlhbGl6YXRpb24gY29udGV4dCBhbmQgd2h5IGl0JiMzOTtzIHN0cnVjdHVyZWQgdGhpcyB3YXkuIE15IGV4cGVydCBrbm93bGVkZ2UgdGVsbHMgbWUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYXJlIG1lbW9yeSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgcmF0aW9uYWxlIGZvciBoYXZpbmcgYSBkZWRpY2F0ZWQgdGhyZWFkIGludGVyYWN0aW9uIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9maW5kX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz00ODQ9c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4NTpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICppZm5hbWUsIGJvb2wgZXhhY3QpO1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMjc9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpfX3BrdGdlbl9OTl90aHJlYWRzKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMDM1LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9wa3RnZW4uYzoyMDM2Olx0XHRwa3RfZGV2ID0gcGt0Z2VuX2ZpbmRfZGV2KHQsIGlmbmFtZSwgZXhhY3QpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjAzNy1cdFx0aWYgKHBrdF9kZXYpIHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zNzA2PXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXG5uZXQvY29yZS9wa3RnZW4uYzozNzc2OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxubmV0L2NvcmUvcGt0Z2VuLmMtMzc3Ny1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICppZm5hbWUsIGJvb2wgZXhhY3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBQYWNrZXQgR2VuZXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHNlZWluZyBgcGt0Z2VuX2ZpbmRfZGV2YCBiZWluZyBjYWxsZWQsIGFuZCBzb21ldGhpbmcmIzM5O3MgcGluZ2luZyB0aGF0IGl0JiMzOTtzIG9ubHkgaW52b2tlZCBmcm9tIHdpdGhpbiB0aG9zZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgZnVuY3Rpb25zLiBUaGF0IHNlZW1zLi4uc3BlY2lmaWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gSWYgdHJ1ZSwgdGhhdCByZWFsbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsIGdyYXBoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlc2UgYF9fcGt0Z2VuX05OX3RocmVhZHNgIGZ1bmN0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlaXIgb3JpZ2lucyBpcyBlc3NlbnRpYWwgZm9yIHJlYWxseSBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBob3cgdGhpcyBgcGt0Z2VuX2ZpbmRfZGV2YCBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGUgcGFja2V0cyBhcmUgYmVpbmcgZ2VuZXJhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGt0Z2VuX05OX3RocmVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3RocmVhZF9wcm9jX29wcyA9IHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMDI2LS8qIFRoaW5rIGZpbmQgb3IgcmVtb3ZlIGZvciBOTiAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MjAyNzpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAyOC1cdFx0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqaWZuYW1lLCBpbnQgcmVtb3ZlKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwNTM9c3RhdGljIHZvaWQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgY29uc3QgY2hhciAqaWZuYW1lKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwNjMtXG5uZXQvY29yZS9wa3RnZW4uYzoyMDY0Olx0XHRwa3RfZGV2ID0gX19wa3RnZW5fTk5fdGhyZWFkcyhwbiwgaWZuYW1lLCBSRU1PVkUpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjA2NS1cdFx0aWYgKHBrdF9kZXYgPT0gTlVMTClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zODMxPXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zODM4LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzgzOTpcdHBrdF9kZXYgPSBfX3BrdGdlbl9OTl90aHJlYWRzKHQtXHUwMDNlbmV0LCBpZm5hbWUsIEZJTkQpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzg0MC1cdGlmIChwa3RfZGV2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBSQ1UgUmVhZCBMb2NrIFBsYWNlbWVudCBpbiBwa3RnZW4qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAgY2FsbCBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgbW92ZW1lbnQgb2YgYHJjdV9yZWFkX2xvY2soKWAgZnJvbSBpbnNpZGUgYHBrdGdlbl9maW5kX2RldmAgdG8gd2l0aGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYC4KClNwZWNpZmljYWxseSwgdGhlIGNvZGUgc25pcHBldCBmcm9tIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBncmFiYmVkIG15IGF0dGVudGlvbi4gUHJldmlvdXNseSwgYHBrdGdlbl9maW5kX2RldmAgd2FzIHJlc3BvbnNpYmxlIGZvciBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGUgUkNVIHJlYWQgbG9jay4gIE5vdywgdGhlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgdGhlIGNhbGwgdG8gYHBrdGdlbl9maW5kX2RldmAgKmFuZCogdGhlIHN1YnNlcXVlbnQgY2hlY2sgYW5kIG1vZGlmaWNhdGlvbiBvZiBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYC4KCkkgcmVhbGl6ZWQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHNoaWZ0IGltbWVkaWF0ZWx5LiBgcGt0Z2VuX2ZpbmRfZGV2YCByZXR1cm5zIGEgcG9pbnRlciAoYHBrdF9kZXZgKSB0byBhIHN0cnVjdHVyZSBwcm90ZWN0ZWQgYnkgUkNVLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IGJlZm9yZSB0aGUgcGF0Y2gsIHRoZSByZWFkIGxvY2sgd2FzIHJlbGVhc2VkICpiZWZvcmUqIHJldHVybmluZyBgcGt0X2RldmAgZnJvbSBgcGt0Z2VuX2ZpbmRfZGV2YC4gIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29kZSBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2Agd2FzIGFjY2Vzc2luZyBgcGt0X2RldmAgYWZ0ZXIgdGhlIFJDVSByZWFkIGxvY2sgd2FzIGRyb3BwZWQsIHdoaWNoIGlzIGRhbmdlcm91cywgYXMgdGhlIG9iamVjdCBjb3VsZCBoYXZlIGJlZW4gZnJlZWQgY29uY3VycmVudGx5LiBUaGUgc3Vic2VxdWVudCBsaW5lLCBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrID0gMTtgIHdhcyBhIGNsZWFyIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIG9yIGF0IGxlYXN0IGEgZGF0YSByYWNlIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4KCldpdGggdGhlIHBhdGNoLCB0aGUgYHJjdV9yZWFkX2xvY2soKWAgaXMgaGVsZCAqdGhyb3VnaCogdGhlIGFjY2VzcyB0byBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYCwgc2FmZWd1YXJkaW5nIHRoZSBhY2Nlc3MuIFRoaXMgaXMgdGhlIGZpeC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGJlY29tZXM6IGRvZXMgdGhpcyBoYXZlIGFueSBmdW5jdGlvbmFsIGltcGFjdCBiZXlvbmQgdGhlIGZpeCBpdHNlbGY/IEkgY2hlY2tlZCB0aGUgY2FsbGVycyBvZiBgX19wa3RnZW5fTk5fdGhyZWFkc2A6IGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBCb3RoIGp1c3QgY2hlY2sgZm9yIGEgbm9uLU5VTEwgcmV0dXJuIGZyb20gYF9fcGt0Z2VuX05OX3RocmVhZHNgLiBUaGV5IGRvIG5vdCBkZXJlZmVyZW5jZSBgcGt0X2RldmAgYWZ0ZXIgdGhlIGNhbGwuIFRodXMsIHRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGUgaW50ZXJuYWwgbG9naWMgb2YgYF9fcGt0Z2VuX05OX3RocmVhZHNgLiBJdOKAmXMgb25seSB0aGUgaW50ZXJuYWwgYWNjZXNzIHRvIGBwa3RfZGV2LSZndDtyZW1vdmFsX21hcmtgIHRoYXQgaXMgbm93IGNvcnJlY3RseSBSQ1UtcHJvdGVjdGVkLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSBidWcgZml4LCBlbGltaW5hdGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IGdlbmVyYXRpb24gY29kZS4gQmVjYXVzZSBgcGt0Z2VuYCBpcyBrZXJuZWwgY29kZSAoYW5kIGxpa2VseSBlbmFibGVkIGluIGZ1enppbmcpLCBpdCYjMzk7cyBhIGJ1ZyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IGEgbm8tb3AsIGJ1dCBpdCBmaXhlcyBhIHNpZ25pZmljYW50IGRhdGEgcmFjZS4gSSB3aWxsIGNoZWNrIGZvciB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTG9jYXRpbmcgdGhlIENvbXBpbGF0aW9uIFBvaW50IG9mIGBwa3RnZW4uY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBwa3RnZW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIHdpdGhpbiB0aGUgcHJvamVjdC4gSXQmIzM5O3MgYSBrZXkgY29tcG9uZW50LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBidWlsZCBwcm9jZXNzIGlzIGNyaXRpY2FsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBhbmFseXNpcyBJJiMzOTttIGRvaW5nLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbXBpbGF0aW9uLCB3aGljaCBtZWFucyBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBmb3IgYSBNYWtlZmlsZSwgQ01ha2VMaXN0cy50eHQsIG9yIGFueSBvdGhlciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBpbiB0aGUgcHJvamVjdCYjMzk7cyByb290IG9yIHJlbGV2YW50IHN1YmRpcmVjdG9yaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkaXJlY3RpdmVzIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIGBwa3RnZW4uY2Agb3IsIG1vcmUgYnJvYWRseSwgbW9kdWxlcyByZWxhdGVkIHRvIHBhY2tldCBnZW5lcmF0aW9uLiBLbm93aW5nIGl0cyBjb21waWxhdGlvbiBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBpbmNsdWRlIHBhdGhzLCBsaW5rZWQgbGlicmFyaWVzLCBhbmQgYW55IGJ1aWxkIGZsYWdzIHVzZWQsIGFsbCBvZiB3aGljaCBhcmUgdml0YWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgb3ZlcmFsbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBuZXQtcHJvY2ZzLm9cbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSAmIzQzOz0gcGt0Z2VuLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQYWNrZXQgR2VuZXJhdG9yIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyBgQ09ORklHX05FVF9QS1RHRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBJIGNhbiBmaW5kIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBlaXRoZXIgYG5ldC9jb3JlL0tjb25maWdgIG9yLCBwZXJoYXBzIG1vcmUgYnJvYWRseSwgYG5ldC9LY29uZmlnYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHJlZmVyZW5jZSB0byBgTkVUX1BLVEdFTmAgd2l0aGluIG9uZSBvZiB0aG9zZSBmaWxlcy4gVGhhdCB3aWxsIHBvaW50IG1lIHRvd2FyZHMgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBsaWtlbHkgYW55IHJlbGV2YW50IGRlZmF1bHRzIGZvciB0aGlzIGZlYXR1cmUuIFRpbWUgdG8gdHJhY2sgaXQgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1BLVEdFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBwa3RnZW5gIFRocmVhZCBJbnRlcmFjdGlvbiB3aXRoIFByb2NmcyoqCgpSaWdodCwgc28gYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAg4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IHByb2Nmcy1kcml2ZW4gY2FsbHMuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhvc2UgZnVuY3Rpb25zIGFjdHVhbGx5IHdvcmtzLiBUaGUgcHJvY2ZzIGludGVyZmFjZSAqaGFzKiB0byBiZSB0aGUgdHJpZ2dlci4KCk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIHNoaWZ0cyB0byB0aGUgd3JpdGUgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBmdW5jdGlvbnMgbGlrZSBgcGt0Z2VuX3RocmVhZF93cml0ZWAgb3Igd2hhdGV2ZXIgc2ltaWxhciBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgdG8gaGFuZGxlIHdyaXRpbmcgdG8gdGhvc2UgcHJvY2ZzIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGNvbW1hbmRzIGdldCBpbnRlcnByZXRlZCBhbmQgdWx0aW1hdGVseSwgd2hlcmUgdGhvc2UgZGV2aWNlLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHRocmVhZCBpbnRlcmFjdGlvbiBoZXJlIGlzIGNydWNpYWwgdG8gc2VlIGhvdyBkZXZpY2VzIGFyZSBhY3R1YWxseSBhZGRlZCBhbmQgbWFya2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVzaWRlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa3RnZW5fYWRkX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQ4Mz1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBzdHJ1Y3QgcGt0Z2VuX2RldiAqaSk7XG5uZXQvY29yZS9wa3RnZW4uYzo0ODQ6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4NS1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0xOTE2PXN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMTk4MS1cdFx0bXV0ZXhfbG9jayhcdTAwMjZwa3RnZW5fdGhyZWFkX2xvY2spO1xubmV0L2NvcmUvcGt0Z2VuLmM6MTk4MjpcdFx0cmV0ID0gcGt0Z2VuX2FkZF9kZXZpY2UodCwgZik7XG5uZXQvY29yZS9wa3RnZW4uYy0xOTgzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cGt0Z2VuX3RocmVhZF9sb2NrKTtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zODAwPXN0YXRpYyBpbnQgYWRkX2Rldl90b190aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM4MzE6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcGt0Z2VuX3RocmVhZF93cml0ZWAqKgoKT2theSwgc28gYHBrdGdlbl90aHJlYWRfd3JpdGVgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGxvb2sgYXQuIFJpZ2h0LCBsZXQmIzM5O3MgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGF0LiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGp1bXAgaW50byBgbmV0L2NvcmUvcGt0Z2VuLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgZW50cnkgcG9pbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IGxpZXMsIHNvIGdldHRpbmcgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nLCBvciBqdXN0IGdlbmVyYWxseSB0cnlpbmcgdG8gZ3JvayBoZXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoaXMgZnVuZGFtZW50YWwgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl90aHJlYWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0xODg2PXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXG5uZXQvY29yZS9wa3RnZW4uYzoxOTE2OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjEtXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoyMDIyOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzA2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCB1c2luZyBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIFBhY2tldCBHZW5lcmF0aW9uIGFuZCBEZXZpY2UgTWFya2luZyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWNrZXQgZ2VuZXJhdGlvbiwgYW5kIG5hdHVyYWxseSwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIHdvbmRlcmluZywgd2hhdCBhYm91dCBgcGt0Z2VuX21hcmtfZGV2aWNlYD8gVGhhdCBmdW5jdGlvbiwgdGhlIGltcGxpY2F0aW9ucyBvZiAqdGhhdCosIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgbmV4dC4gSXMgdGhlcmUgc29tZSBzcGVjaWZpYyBkZXZpY2Ugb3IgY29uZmlndXJhdGlvbiBiZWluZyBwb2ludGVkIHRvd2FyZHMsIG9yIHNvbWUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gYmUgbW9yZSBhd2FyZSBvZj8gV2hhdCBzb3J0IG9mIG9wdGltaXphdGlvbnMgYXJlIGhhcHBlbmluZz8gSSYjMzk7bSBhbHJlYWR5IGltYWdpbmluZyB0aGUgdXNlIGNhc2VzIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaW4gbXkgaGVhZC4gTGV0JiMzOTtzIGRlbHZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa3RnZW5fbWFya19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjA1Mi0gKi9cbm5ldC9jb3JlL3BrdGdlbi5jOjIwNTM6c3RhdGljIHZvaWQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgY29uc3QgY2hhciAqaWZuYW1lKVxubmV0L2NvcmUvcGt0Z2VuLmMtMjA1NC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MjExNT1zdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjEzMy1cdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG5uZXQvY29yZS9wa3RnZW4uYzoyMTM0Olx0XHRwa3RnZW5fbWFya19kZXZpY2UocG4sIGRldi1cdTAwM2VuYW1lKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTIxMzUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpZWQ6IGBwa3RnZW5fbWFya19kZXZpY2VgKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHBrdGdlbl9tYXJrX2RldmljZWAgZ2V0cyB0cmlnZ2VyZWQgZHVyaW5nIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIOKAkyBhIGNsZWFyIHBhdGggb2YgZXhlY3V0aW9uIHRoYXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZS4gTm93LCB0aGUgYnVnIHJlcG9ydCBzcGVjaWZpZXMgYSBkYXRhIHJhY2UsIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYC4gSW50ZXJlc3RpbmcuIFNvLCB0aGUgZml4IGludm9sdmVzIGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBwcm90ZWN0IGFjY2VzcyB0byBgcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrYC4gTWFrZXMgc2Vuc2UsIHByb3RlY3RpbmcgdGhlIHJlYWQgd2l0aCBhIHJlYWQgbG9jayBpcyBhIGxvZ2ljYWwgc29sdXRpb24gdG8gcmVzb2x2ZSB0aGUgcmFjZSBjb25kaXRpb24uCgpXYWl0IGEgc2Vjb25k4oCmIGBwa3RfZGV2YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgYW5kIGZyZWVkIHdpdGggYGtmcmVlX3JjdWA/IFRoYXQmIzM5O3Mgd2hhdCB0aGUgZml4IHN1Z2dlc3RzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGxpZmVjeWNsZSBpbW1lZGlhdGVseSB0byBjb25maXJtIG15IG1lbnRhbCBtb2RlbCBtYXRjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBhbGxvY2F0aW9uIGNvZGUgYW5kIHRyYWNlIHRoZSBmcmVlaW5nIHBhdGggYXMgc29vbiBhcyBJJiMzOTttIGRvbmUgc3VtbWFyaXppbmcuIFRoYXQmIzM5O3Mga2V5IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlLipwa3RfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9MzM4OT1zdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMzk5LVx0cGt0X2Rldi1cdTAwM2VydW5uaW5nID0gMDtcbm5ldC9jb3JlL3BrdGdlbi5jOjM0MDA6XHRrZnJlZV9za2IocGt0X2Rldi1cdTAwM2Vza2IpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzQwMS1cdHBrdF9kZXYtXHUwMDNlc2tiID0gTlVMTDtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zNTE3PXN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTQtXHRcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MzU1NTpcdFx0a2ZyZWVfc2tiKHBrdF9kZXYtXHUwMDNlc2tiKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTYtXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MzgzMT1zdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzg1My1cdGlmIChwa3RfZGV2LVx1MDAzZWZsb3dzID09IE5VTEwpIHtcbm5ldC9jb3JlL3BrdGdlbi5jOjM4NTQ6XHRcdGtmcmVlKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzg1NS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzkxNC1cdHZmcmVlKHBrdF9kZXYtXHUwMDNlZmxvd3MpO1xubmV0L2NvcmUvcGt0Z2VuLmM6MzkxNTpcdGtmcmVlKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzkxNi1cdHJldHVybiBlcnI7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9Mzk4OD1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTQwMTYtXHRcdHB1dF9wYWdlKHBrdF9kZXYtXHUwMDNlcGFnZSk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MDE3Olx0a2ZyZWVfcmN1KHBrdF9kZXYsIHJjdSk7XG5uZXQvY29yZS9wa3RnZW4uYy00MDE4LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBga2ZyZWVfcmN1YCBGaXggaW4gYHBrdGdlbl9yZW1vdmVfZGV2aWNlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBrZnJlZV9yY3UocGt0X2RldiwgcmN1KWAgaXMgaW5kZWVkIHV0aWxpemVkIHdpdGhpbiB0aGUgYHBrdGdlbl9yZW1vdmVfZGV2aWNlYCBmdW5jdGlvbi4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlIHByb3Bvc2VkIGZpeCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBjb3JyZWN0bHkgdGFja2xlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IG9mIHRoZSBgcGt0X2RldmAgc3RydWN0dXJlIHdpdGhpbiB0aGUgYF9fcGt0Z2VuX05OX3RocmVhZHNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgYHJlbW92ZWAgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gVGhlIGNydXggb2YgdGhlIHNvbHV0aW9uIGlzIHRvIG1haW50YWluIHRoZSBgcmN1X3JlYWRfbG9jaygpYCB0aHJvdWdob3V0IHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtJmd0O3JlbW92YWxfbWFya2AuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBtZW1vcnkgaXNuJiMzOTt0IGZyZWVkIHByZW1hdHVyZWx5IHdoaWxlIGl0JiMzOTtzIHN0aWxsIHBvdGVudGlhbGx5IGJlaW5nIGFjY2Vzc2VkLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgZGlzdGluY3QgY2hhbmdlLCBhIGRlbGliZXJhdGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIGFpbWVkIGF0IGltcHJvdmluZyBpdHMgcm9idXN0bmVzcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTkVUX1BLVEdFTmAgbm93LCB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyB3aXRoIGV4aXN0aW5nIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9QS1RHRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zODQ9bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbm5ldC9LY29uZmlnLTM4NS1cbm5ldC9LY29uZmlnOjM4Njpjb25maWcgTkVUX1BLVEdFTlxubmV0L0tjb25maWctMzg3LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IGBjb25maWcgTkVUX1BLVEdFTmAgaW4gYG5ldC9LY29uZmlnYDoKCioqQW5hbHl6aW5nIE5FVF9QS1RHRU4gQ29uZmlndXJhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG5ldC9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSBgY29uZmlnIE5FVF9QS1RHRU5gIHNldHRpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHBhY2tldCBnZW5lcmF0b3IgZmVhdHVyZS4gVGhpcyBtZWFucyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgYW55IGhlbHAgdGV4dCB0aGF0IGNsYXJpZmllcyBpdHMgcHVycG9zZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIGF2YWlsYWJsZT8gSXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyBvbiBvdGhlciBuZXR3b3JrIHN1YnN5c3RlbXMgb3IgbGlicmFyaWVzPyBLbm93aW5nIHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoaXMgaXMgdHlwaWNhbGx5IGVuYWJsZWQgb3IgZGlzYWJsZWQsIGhlbHBpbmcgbWUgYXNzZXNzIHRoZSBsaWtlbHkgdXNhZ2UgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGUgZmVhdHVyZS4gQW5kIG9mIGNvdXJzZSwgdGhlICYjMzQ7aGVscCYjMzQ7IHRleHQgaXMgY3J1Y2lhbC4gVGhhdCYjMzk7cyB3aGVyZSBJ4oCZbGwgZmluZCB0aGUgY29uY2lzZSBkZWZpbml0aW9uLCB1c2UgY2FzZXMsIGFuZCBhbnkgd2FybmluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gYWJzb3JiIHRoaXMgaW5mb3JtYXRpb24gcXVpY2tseSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmb3IgdGhlIHJlc3Qgb2YgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9QS1RHRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zODQ9bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbm5ldC9LY29uZmlnLTM4NS1cbm5ldC9LY29uZmlnOjM4Njpjb25maWcgTkVUX1BLVEdFTlxubmV0L0tjb25maWctMzg3LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgbmV0L0tjb25maWcgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsb2dpYyBiZXR0ZXIuIExldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDM4NiDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgbmV0d29yay1yZWxhdGVkIGZlYXR1cmVzLCBwZXJoYXBzIG9wdGlvbnMgZm9yIHByb3RvY29sIHN1cHBvcnQsIGhhcmR3YXJlIHNlbGVjdGlvbiwgb3IgbWF5YmUgc29tZSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQgcmVsYXRlcyB0byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgZG93biB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHQgIG1haW50YWluIGNhcGFjaXR5IGZvciB0aGUgb3RoZXIgZmxvd3MuIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBzZXJ2ZXJzXG4gMzgxOlx0XHQgIHdpdGggbWFueSBjbGllbnRzIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IERvUyBieSBhIHNpbmdsZSAoc3Bvb2ZlZClcbiAzODI6XHRcdCAgZmxvdyB0aGF0IGdyZWF0bHkgZXhjZWVkcyBhdmVyYWdlIHdvcmtsb2FkLlxuIDM4MzpcdFxuIDM4NDpcdG1lbnUgXCYjMzQ7TmV0d29yayB0ZXN0aW5nXCYjMzQ7XG4gMzg1Olx0XG4gMzg2Olx0Y29uZmlnIE5FVF9QS1RHRU5cbiAzODc6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXCYjMzQ7XG4gMzg4Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFBST0NfRlNcbiAzODk6XHRcdGhlbHBcbiAzOTA6XHRcdCAgVGhpcyBtb2R1bGUgd2lsbCBpbmplY3QgcHJlY29uZmlndXJlZCBwYWNrZXRzLCBhdCBhIGNvbmZpZ3VyYWJsZVxuIDM5MTpcdFx0ICByYXRlLCBvdXQgb2YgYSBnaXZlbiBpbnRlcmZhY2UuICBJdCBpcyB1c2VkIGZvciBuZXR3b3JrIGludGVyZmFjZVxuIDM5MjpcdFx0ICBzdHJlc3MgdGVzdGluZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuICBJZiB5b3UgZG9uJiMzOTt0IHVuZGVyc3RhbmRcbiAzOTM6XHRcdCAgd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJiMzOTt0IG5lZWQgaXQ6IHNheSBOLlxuIDM5NDpcdFxuIDM5NTpcdFx0ICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIHBhY2tldCBnZW5lcmF0b3IgY2FuIGJlIGZvdW5kXG4gMzk2Olx0XHQgIGF0IFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi5yc3RcdTAwM2UuXG4gMzk3Olx0XG4gMzk4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAzOTk6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBrdGdlbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBORVRfUEtUR0VOYCBDb25maWd1cmF0aW9uIGFuZCBBc3NvY2lhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYE5FVF9QS1RHRU5gIGlzc3VlLiBGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyB0aGUgYmFzaWNzIHJpZ2h0LiBJdCYjMzk7cyBjbGVhciB0aGF0IGBORVRfUEtUR0VOYCByZWxpZXMgb24gYm90aCBgSU5FVGAgYW5kIGBQUk9DX0ZTYCwgc28gd2UmIzM5O2xsIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYE5FVF9QS1RHRU5gIHRvIGBFbmFibGVDb25maWdzYCB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBidWlsZCBpc3N1ZXMuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBhY3R1YWwgcHJvYmxlbT8gVGhlIGxvZyBwb2ludHMgdG8gYF9fcGt0Z2VuX05OX3RocmVhZHNgLCB3aGljaCBpcyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIGNhbGxlcnMgb2YgdGhpcyBhcmUgYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAuIEdvdCBpdC4gTGV0JiMzOTtzIHRyYWNlIHRob3NlIGNhbGxzLiBgcGt0Z2VuX2FkZF9kZXZpY2VgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYGFkZF9kZXZfdG9fdGhyZWFkYC4gYHBrdGdlbl9tYXJrX2RldmljZWAgZ2V0cyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBTbywgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLgoKSGFuZyBvbiwgYHBrdGdlbl9kZXZpY2VfZXZlbnRgIGlzIGEgbm90aWZpZXIgY2FsbGJhY2suIEludGVyZXN0aW5nLiBOb3csIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpcyBhIHByb2NmcyB3cml0ZSBjYWxsYmFjay4gT2theSwgbGV0JiMzOTtzIHNlZSwgaXMgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5pdCYjMzk7cyBzdGF0aWMgKmFuZCogaXQmIzM5O3MgYXNzaWduZWQgdG8gYHByb2Nfb3BzYC4gUmlnaHQsIHRoYXQmIzM5O3Mgbm90IHNvbWV0aGluZyB5b3Ugc2VlIGV2ZXJ5IGRheS4gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhlIHNpZ25hdHVyZSBvZiBgcGt0Z2VuX3RocmVhZF93cml0ZWAgaW1tZWRpYXRlbHkgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE1LVxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubmV0L2NvcmUvcGt0Z2VuLmMtMTkxNy1cdFx0XHRcdCAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTcKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIGFwcHJvYWNoOgoKKipFeHBsb3JpbmcgdGhlIER5bmFtaWNzIG9mIEZ1bmN0aW9uIEJlaGF2aW9yKioKCkhtbSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWM/IFRoYXQmIzM5O3MgYW4gaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQuIEl0IGZvcmNlcyBtZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mICYjMzQ7c3RhdGljJiMzNDsgaW4gdGhpcyBjb250ZXh0LiBBbSBJIHRoaW5raW5nIGFib3V0IHN0YXRpYyBpbiB0aGUgY29udGV4dCBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBnZW5lcmFsIGNvbmNlcHQgYXQgcGxheSBoZXJlPwoKSWYgd2UmIzM5O3JlIHRhbGtpbmcgY29kZSwgdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NvcGUuIFN0YXRpYyBmdW5jdGlvbnMsIGFzIEkgdW5kZXJzdGFuZCB0aGVtLCBhcmUgdXN1YWxseSBkZWZpbmVkIHdpdGhpbiBhIGNsYXNzIG9yIG5hbWVzcGFjZSwgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzLiBUaGV5IGxpdmUgYXQgdGhlIGNsYXNzIGxldmVsLiBTbywgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgYW55IGZ1bmN0aW9uICpub3QqIHN0YXRpYyBtdXN0IGJlIHRpZWQgdG8gYW4gaW5zdGFuY2Ugb3Igc29tZXRoaW5nIGVsc2UgdGhhdCBoYXMgc3RhdGUuCgpUaGlzIGxlYWRzIG1lIHRvIGNvbnNpZGVyIGZ1bmN0aW9uIHNpZGUgZWZmZWN0cy4gSWYgYSBmdW5jdGlvbiBjYW4gYWx0ZXIgdGhlIHN0YXRlIG9mIHNvbWV0aGluZywgdGhlbiBpdCBjYW4mIzM5O3QgYmUgc3RhdGljLCByaWdodD8gVGhlIHZlcnkgbmF0dXJlIG9mIGEgc3RhdGljIGZ1bmN0aW9uIGltcGxpZXMgaXQmIzM5O3MgZGV0ZXJtaW5pc3RpYyBiYXNlZCBzb2xlbHkgb24gaXRzIGlucHV0cy4gSWYgdGhlIHN0YXRlIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uIGlzIGNoYW5nZWQsIHRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLCBhbmQgdGhpcyBpcyB3aHkgYSBzdGF0aWMgZnVuY3Rpb24gbmVlZHMgdG8gY2hhbmdlLgoKSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBpZiB3ZSYjMzk7cmUgZXZlbiBsaW1pdGVkIHRvIHByb2dyYW1taW5nIGhlcmUuIFdoYXQgYWJvdXQgaW4gYSBtb3JlIGFic3RyYWN0IG1hdGhlbWF0aWNhbCBzZW5zZT8gQXJlIHRoZXJlIGZ1bmN0aW9ucyB3aGVyZSB0aGVpciBiZWhhdmlvciBpc24mIzM5O3QgZml4ZWQsIGlzbiYjMzk7dCBpbW11dGFibGU/IENhbiBhIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNlIGJlIGR5bmFtaWMsIGNoYW5naW5nIHdpdGggdGltZSBvciBzb21lIG90aGVyIGV4dGVybmFsIGZhY3Rvcj8gVGhpcyBtaWdodCBiZSB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IHRoaW5raW5nIGFib3V0IGZ1bmN0aW9ucyB3aXRoaW4gc3lzdGVtcyB3aXRoIGZlZWRiYWNrIGxvb3BzLgoKVWx0aW1hdGVseSwgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBkb21haW4uIEJ1dCB0aGUgcXVlc3Rpb24gaXMgYSB1c2VmdWwgb25lLiBJdCBmb3JjZXMgbWUgdG8gbG9vayBhdCB0aGUgYm91bmRhcmllcyBiZXR3ZWVuIHRoZSBzdGF0aWMgYW5kIHRoZSBkeW5hbWljLCB0aGUgZGV0ZXJtaW5pc3RpYyBhbmQgdGhlIG5vbi1kZXRlcm1pbmlzdGljLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGluIGhvdyB3ZSBtb2RlbCBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgd29ybGQgYXJvdW5kIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKFthLXpBLVowLTlfXSYjNDM7ICkmIzQzO1xcKj9wa3RnZW5fW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz00ODA9c3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID1cbi0tXG5uZXQvY29yZS9wa3RnZW4uYy00ODItXG5uZXQvY29yZS9wa3RnZW4uYzo0ODM6c3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgc3RydWN0IHBrdGdlbl9kZXYgKmkpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDg0OnN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XG5uZXQvY29yZS9wa3RnZW4uYzo0ODU6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy00ODYtXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4NzpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7XG5uZXQvY29yZS9wa3RnZW4uYzo0ODg6c3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDg5OnN0YXRpYyB2b2lkIHBrdGdlbl9yZXNldF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDkwOnN0YXRpYyB2b2lkIHBrdGdlbl9zdG9wX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbik7XG5uZXQvY29yZS9wa3RnZW4uYy00OTEtXG5uZXQvY29yZS9wa3RnZW4uYzo0OTI6c3RhdGljIHZvaWQgcGt0Z2VuX3N0b3Aoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDkzOnN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy00OTQtc3RhdGljIHZvaWQgZmlsbF9pbWl4X2Rpc3RyaWJ1dGlvbihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTU2NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjU2NjpzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvcGt0Z2VuLmMtNTY3LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz05MTM9c3RhdGljIHNzaXplX3QgZ2V0X2xhYmVscyhjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTk1NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjk1NjpzdGF0aWMgX191MzIgcGt0Z2VuX3JlYWRfZmxhZyhjb25zdCBjaGFyICpmLCBib29sICpkaXNhYmxlKVxubmV0L2NvcmUvcGt0Z2VuLmMtOTU3LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy05ODQtXG5uZXQvY29yZS9wa3RnZW4uYzo5ODU6c3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubmV0L2NvcmUvcGt0Z2VuLmMtOTg2LVx0XHRcdCAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xODcyLVxubmV0L2NvcmUvcGt0Z2VuLmM6MTg3MzpzdGF0aWMgaW50IHBrdGdlbl9pZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubmV0L2NvcmUvcGt0Z2VuLmMtMTg3NC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xODg1LVxubmV0L2NvcmUvcGt0Z2VuLmM6MTg4NjpzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODcte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXG5uZXQvY29yZS9wa3RnZW4uYzoxOTE2OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMTItXG5uZXQvY29yZS9wa3RnZW4uYzoyMDEzOnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubmV0L2NvcmUvcGt0Z2VuLmMtMjAxNC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MjAyNz1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwNTItICovXG5uZXQvY29yZS9wa3RnZW4uYzoyMDUzOnN0YXRpYyB2b2lkIHBrdGdlbl9tYXJrX2RldmljZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIGNvbnN0IGNoYXIgKmlmbmFtZSlcbm5ldC9jb3JlL3BrdGdlbi5jLTIwNTQte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwODQtXG5uZXQvY29yZS9wa3RnZW4uYzoyMDg1OnN0YXRpYyB2b2lkIHBrdGdlbl9jaGFuZ2VfbmFtZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0yMDg2LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE0LVxubmV0L2NvcmUvcGt0Z2VuLmM6MjExNTpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE2LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjE0MC1cbm5ldC9jb3JlL3BrdGdlbi5jOjIxNDE6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwa3RnZW5fZGV2X2dldF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcbm5ldC9jb3JlL3BrdGdlbi5jLTIxNDItXHRcdFx0XHRcdFx0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIxNjEtXG5uZXQvY29yZS9wa3RnZW4uYzoyMTYyOnN0YXRpYyBpbnQgcGt0Z2VuX3NldHVwX2Rldihjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXG5uZXQvY29yZS9wa3RnZW4uYy0yMTYzLVx0XHRcdCAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgY29uc3QgY2hhciAqaWZuYW1lKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIxOTgtICovXG5uZXQvY29yZS9wa3RnZW4uYzoyMTk5OnN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0yMjAwLXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0yNzAwPXN0YXRpYyB1MzIgcGt0Z2VuX2RzdF9tZXRyaWNzW1JUQVhfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI3MDQtXG5uZXQvY29yZS9wa3RnZW4uYzoyNzA1OnN0YXRpYyBpbnQgcGt0Z2VuX291dHB1dF9pcHNlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTI3MDYte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTI4MjA9c3RhdGljIGlubGluZSBfX2JlMTYgYnVpbGRfdGNpKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IGNmaSxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yODI1LVxubmV0L2NvcmUvcGt0Z2VuLmM6MjgyNjpzdGF0aWMgdm9pZCBwa3RnZW5fZmluYWxpemVfc2tiKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcGt0Z2VuLmMtMjgyNy1cdFx0XHRcdGludCBkYXRhbGVuKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI5MDUtXG5uZXQvY29yZS9wa3RnZW4uYzoyOTA2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvcGt0Z2VuLmMtMjkwNy1cdFx0XHRcdFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MzE5MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTktXG5uZXQvY29yZS9wa3RnZW4uYzozMjAwOnN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTMyMDEte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMyMTAtXG5uZXQvY29yZS9wa3RnZW4uYzozMjExOnN0YXRpYyB2b2lkIHBrdGdlbl9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXG5uZXQvY29yZS9wa3RnZW4uYy0zMjEyLXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMjQzLVxubmV0L2NvcmUvcGt0Z2VuLmM6MzI0NDpzdGF0aWMgdm9pZCBwa3RnZW5faGFuZGxlX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgdTMyIGZsYWdzKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzI0NS17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzI1NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjMyNTY6c3RhdGljIHZvaWQgcGt0Z2VuX3N0b3BfYWxsX3RocmVhZHMoc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzI1Ny17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MzI2Mz1zdGF0aWMgaW50IHRocmVhZF9pc19ydW5uaW5nKGNvbnN0IHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMyNzYtXG5uZXQvY29yZS9wa3RnZW4uYzozMjc3OnN0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfdGhyZWFkX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcbm5ldC9jb3JlL3BrdGdlbi5jLTMyNzgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMyOTYtXG5uZXQvY29yZS9wa3RnZW4uYzozMjk3OnN0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfYWxsX3RocmVhZHNfcnVuKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcbm5ldC9jb3JlL3BrdGdlbi5jLTMyOTgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMzMjItXG5uZXQvY29yZS9wa3RnZW4uYzozMzIzOnN0YXRpYyB2b2lkIHBrdGdlbl9ydW5fYWxsX3RocmVhZHMoc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzMyNC17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzMzNC1cbm5ldC9jb3JlL3BrdGdlbi5jOjMzMzU6c3RhdGljIHZvaWQgcGt0Z2VuX3Jlc2V0X2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMzYte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTMzNDc9c3RhdGljIHZvaWQgc2hvd19yZXN1bHRzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgbnJfZnJhZ3MpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzM4OC0vKiBTZXQgc3RvcHBlZC1hdCB0aW1lciwgcmVtb3ZlIGZyb20gcnVubmluZyBsaXN0LCBkbyBjb3VudGVycyBcdTAwMjYgc3RhdGlzdGljcyAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MzM4OTpzdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTMzOTAte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM0MDk9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpuZXh0X3RvX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNDI2LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzQyNzpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcbm5ldC9jb3JlL3BrdGdlbi5jLTM0Mjgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM0NDUtICovXG5uZXQvY29yZS9wa3RnZW4uYzozNDQ2OnN0YXRpYyB2b2lkIHBrdGdlbl9yZW1fb25lX2lmKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ0Ny17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ2Ny1cbm5ldC9jb3JlL3BrdGdlbi5jOjM0Njg6c3RhdGljIHZvaWQgcGt0Z2VuX3JlbV9hbGxfaWZzKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ2OS17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ4Ni1cbm5ldC9jb3JlL3BrdGdlbi5jOjM0ODc6c3RhdGljIHZvaWQgcGt0Z2VuX3JlbV90aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXG5uZXQvY29yZS9wa3RnZW4uYy0zNDg4LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNDkyLVxubmV0L2NvcmUvcGt0Z2VuLmM6MzQ5MzpzdGF0aWMgdm9pZCBwa3RnZW5fcmVzY2hlZChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTM0OTQte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM1MDAtXG5uZXQvY29yZS9wa3RnZW4uYzozNTAxOnN0YXRpYyB2b2lkIHBrdGdlbl93YWl0X2Zvcl9za2Ioc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0zNTAyLXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNTE2LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzUxNzpzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTM1MTgte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM3MDUtXG5uZXQvY29yZS9wa3RnZW4uYzozNzA2OnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzcwNy17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzc3NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjM3NzY6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zODAwPXN0YXRpYyBpbnQgYWRkX2Rldl90b190aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM4MzE6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMi17XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzkxOC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM5MTk6c3RhdGljIGludCBfX25ldF9pbml0IHBrdGdlbl9jcmVhdGVfdGhyZWFkKGludCBjcHUsIHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MjAte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM5NzI9c3RhdGljIHZvaWQgX3JlbV9kZXZfZnJvbV9pZl9saXN0KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM5ODctXG5uZXQvY29yZS9wa3RnZW4uYzozOTg4OnN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy0zOTg5LVx0XHRcdFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDE2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVnJiMzOTtzIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyB0aGUgYnVnJiMzOTtzIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGhpdCB0aGlzIGNvZGUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBUaG9zZSBpbiB0dXJuIGFyZSBjYWxsZWQgYnkgYHBrdGdlbl9hZGRfZGV2aWNlYCB2aWEgYHBrdGdlbl90aHJlYWRfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYHByb2Nfd3JpdGVgIGZvciBgcGt0Z2VuX3RocmVhZF9wcm9jX29wc2AsIGFuZCBhbHNvIHZpYSBgYWRkX2Rldl90b190aHJlYWRgLiBgcGt0Z2VuX21hcmtfZGV2aWNlYCBpcyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLCB3aGljaCBpcyBhIG5vdGlmaWVyLiBTbywgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBraWNrIG9mZiB0aGlzIHdob2xlIHNlcXVlbmNlLCBhcmUgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAuCgpOb3csIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIHdhbnQgdG8ga2VlcCBpbiBtaW5kLCBidXQgaXQgKmlzKiBhbiBBUEkgZW50cnkgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBoYW5kbGluZyBwcm9jZnMgd3JpdGVzLiBUaGF0IG1ha2VzIGl0IGEgZGVjZW50IGNhbmRpZGF0ZSBmb3IgbXkgYEZvY3VzU3ltYm9sc2AgaWYgSSB3YW50IHRvIHNwZWNpZmljYWxseSB0ZXN0IHRoZSBwcm9jZnMgd3JpdGUgcGF0aC4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBpbmxpbmVkLiBOb3BlLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIHN0cnVjdC4gT2theSwgc2FtZSBxdWVzdGlvbiBmb3IgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBJdCYjMzk7cyBhbHNvIGFzc2lnbmVkIHRvIGEgc3RydWN0LCBzbyBpdCYjMzk7cyBub3QgaW5saW5lZCBlaXRoZXIuIEkgd2lsbCBpbmNsdWRlIHRoZXNlIGluIG15IEZvY3VzU3ltYm9scy4KCldoYXQgYWJvdXQgdGhvc2UgaGVscGVyIGZ1bmN0aW9ucz8gSSBzaG91bGQgY2hlY2sgaWYgYHBrdGdlbl9hZGRfZGV2aWNlYCBpcyBpbmxpbmVkLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBwcmV0dHkgaGVmdHksIHNvIHByb2JhYmx5IG5vdC4gQWN0dWFsbHksIEkgd2lsbCBnbyBhaGVhZCBhbmQgaW5jbHVkZSBgcGt0Z2VuX2FkZF9kZXZpY2VgIGFuZCBgcGt0Z2VuX21hcmtfZGV2aWNlYCBhcyB3ZWxsLiBPaCwgd2FpdCwgYHBrdGdlbl9hZGRfZGV2aWNlYCBpcyBzdGF0aWMgdG9vLgoKU28gdG8gcmVjYXA6IEkmIzM5O2xsIGZvY3VzIG9uIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGd1aWRhbmNlIGhlcmUuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBwcmVmZXIgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEFsdGhvdWdoIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgICphcmUqIHN0YXRpYywgdGhleSBhcmUgQVBJIGVudHJ5cG9pbnRzIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgKmFyZSogZXhwbGljaXRseSB1c2VkIHZpYSB0aGVpciBhZGRyZXNzZXMsIG1lYW5pbmcgdGhlIGNvbXBpbGVyICpjYW5ub3QqIGlubGluZSB0aGVtLiBTaW5jZSB0aGUgcHJvbXB0IGRvZXMgbm90IGRpc3F1YWxpZnkgc3RhdGljIEFQSSBlbnRyeSBwb2ludHMsIEkgd2lsbCBrZWVwIHRoZW0uIE5vdywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgcGt0Z2VuLmNgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBcXCoqcGt0Z2VuX1thLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3NQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRHluYW1pYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGVyZS4gV2UgbmVlZCB0byBmb2N1cyBvbiBhc3BlY3RzIG9mIHRoZSBjb2RlIHRoYXQgYXJlIGluaGVyZW50bHkgZHluYW1pYywgdGhhdCBjaGFuZ2UgYmFzZWQgb24gaW5wdXQsIHN0YXRlLCBvciBzb21lIGV4dGVybmFsIGZhY3Rvci4gU3RhdGljIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBhcmUgcHJlZGljdGFibGUsIHRoZXkmIzM5O3JlIGRlZmluZWQgYnkgdGhlIHR5cGUuIFdlJiMzOTtyZSBsb29raW5nIGZvciB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYsIHRoZSBwbGFjZXMgd2hlcmUgYmVoYXZpb3IgaXMgdmFyaWFibGUuIFdoZXJlIGlzIHRoZSBjb3JlIG9mIHRoZSBzdGF0ZSB0cmFuc2l0aW9uPyBXaGVyZSBhcmUgdGhlIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBlZGdlIGNhc2VzLCBhbmQgYXJlYXMgdGhhdCBwcm92aWRlIGZsZXhpYmlsaXR5IGluIHRoZSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTUwMD1zdGF0aWMgaW50IGRlYnVnICBfX3JlYWRfbW9zdGx5O1xubmV0L2NvcmUvcGt0Z2VuLmMtNTAxLVxubmV0L2NvcmUvcGt0Z2VuLmM6NTAyOnN0YXRpYyBERUZJTkVfTVVURVgocGt0Z2VuX3RocmVhZF9sb2NrKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgbW9kdWxlIGRldmVsb3BtZW50IGFuZCBuZXR3b3JrIHByb2dyYW1taW5nOgoKKipNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIENsZWFudXAgLSBXaGF0IHRvIEV4cGVjdCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBrdGdlbi5jYC4uLiBJdCYjMzk7cyBhIG1vZHVsZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgbG9hZGVkIGludG8gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGF0IHRoaXMgZmlsZSBtb3N0IGxpa2VseSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgYGluaXRfbW9kdWxlYCBhbmQgYGNsZWFudXBfbW9kdWxlYCBmdW5jdGlvbnMuIFRob3VnaCwgaXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIGEgY3VzdG9tIG5hbWluZyBzY2hlbWUsIHNvIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYHBnX2luaXRgIGFuZCBgcGdfY2xlYW51cGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQsIGFzIGEgZ2VuZXJhbCBydWxlLCBhIG1vZHVsZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhbmQgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cCBhZnRlciBsb2FkaW5nLiBTbywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gYW50aWNpcGF0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQxMTU9c3RhdGljIHZvaWQgX19leGl0IHBnX2NsZWFudXAodm9pZClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy00MTIxLVxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMjptb2R1bGVfaW5pdChwZ19pbml0KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjMtbW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlN0YXRpYyBGdW5jdGlvbnMgJmFtcDsgRW50cnkgUG9pbnRzOiBBIFF1aWNrIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBhcmNoaXRlY3R1cmUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBNb3N0IGZ1bmN0aW9ucyBhcmUsIGVzc2VudGlhbGx5LCBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhpbmdzLiBUaGF0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgY29udGFpbmVkIHByb2Nlc3NpbmcgZmxvdy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgZXhlY3V0aW9uICpiZWdpbiogYW5kICplbmQqLCBhbmQgd2hhdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byBhY3R1YWxseSBnZXQgdGhpbmdzIG1vdmluZz8gQ29uc2lkZXJpbmcgdGhlIHN0YXRpYyBuYXR1cmUsIGBwZ19pbml0YCBhbmQgYHBnX2NsZWFudXBgIGFyZSB0aGUgKm9idmlvdXMqIGV4Y2VwdGlvbnMgYW5kIG1heSBiZSB0aGUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHBvaW50cywgYnV0IEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHJlYWwgJiMzNDttZWF0JiMzNDsgb2YgdGhlIHByb2Nlc3MgaXMgc29tZXdoZXJlIGVsc2UuIFRoZXJlZm9yZSwgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgbG9vayBsaWtlIHRoZSBtb3N0IHByb2JhYmxlIGNhbmRpZGF0ZXMgZm9yIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgZGF0YSBwcm9jZXNzaW5nIGFuZCBleHRlcm5hbCBpbnB1dC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIC0gbGV0JiMzOTtzIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciB3cml0ZS1yZWxhdGVkIHByb2NmcyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gR290dGEgcnVsZSBvdXQgYW55IGxlc3Mgb2J2aW91cyBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX3dyaXRlLio9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTU2MS1cdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2Vlayxcbm5ldC9jb3JlL3BrdGdlbi5jOjU2MjpcdC5wcm9jX3dyaXRlXHQ9IHBnY3RybF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTU2My1cdC5wcm9jX3JlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xODgxLVx0LnByb2NfbHNlZWtcdD0gc2VxX2xzZWVrLFxubmV0L2NvcmUvcGt0Z2VuLmM6MTg4MjpcdC5wcm9jX3dyaXRlXHQ9IHBrdGdlbl9pZl93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjEtXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoyMDIyOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQaW5wb2ludGluZyB0aGUgUm9vdCBDYXVzZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gdGhpcyBidWcsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIGludGVyYWN0aW9ucyB3aXRoIHRocmVhZHMgYW5kIGRldmljZSBtYW5hZ2VtZW50LiBJJiMzOTt2ZSBuYXJyb3dlZCBpdCBkb3duIHRvIHRocmVlIGtleSBmdW5jdGlvbnM6IGBwZ2N0cmxfd3JpdGVgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIGBwa3RnZW5fdGhyZWFkX3dyaXRlYC4gVGhlIHRyaWdnZXIgc2VlbXMgdG8gYmUgd2hlbiBhIGRldmljZSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gYSB0aHJlYWQg4oCTIHNwZWNpZmljYWxseSwgdGhlIGFjdGlvbnMgYmVpbmcgZXhlY3V0ZWQgYnkgYHBrdGdlbl90aHJlYWRfd3JpdGVgLiBOb3csIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhhdCBkZXZpY2UgYWRkaXRpb24vcmVtb3ZhbC4gT24gdGhlIG90aGVyIGhhbmQsIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBoYW5kbGVkIGJ5IGBwa3RnZW5fZGV2aWNlX2V2ZW50YCB3aGljaCBhbHNvIHJlbW92ZXMgdGhlIGRldmljZSBmcm9tIHRoZSB0aHJlYWQuIFNvLCBsb2dpY2FsbHksIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBUaG9zZSBhcmUgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhpcyBkZXZpY2UgbWFuYWdlbWVudCBpcyBleHBsaWNpdGx5IGhhbmRsZWQsIGFuZCB3aGVyZSBhIGJ1ZyBjb3VsZCByZWFyIGl0cyBoZWFkLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgcGt0Z2VuX3RocmVhZF93cml0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl90aHJlYWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0xODg2PXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXG5uZXQvY29yZS9wa3RnZW4uYzoxOTE2OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xOTE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjEtXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoyMDIyOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjMtXHQucHJvY19yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHN1cHBvc2VkIHRvIHNwZWFrIGFzIGFuIGV4cGVydDoKCioqRG91YmxlLUNoZWNraW5nIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nLCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBmdW5jdGlvbi4gSXTigJlzIGZ1bmRhbWVudGFsLCB0aGUgYmVkcm9jayBvZiBob3cgd2UgaGFuZGxlIHBhY2tldCBnZW5lcmF0aW9uIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24uIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBudWFuY2VzIG9mIHRoZSByZWNlbnQgY2hhbmdlcy4gQSBxdWljaywgZm9jdXNlZCByZXZpZXcgaGVyZSBjYW4gc2F2ZSBtZSBob3VycyBkb3duIHRoZSBsaW5lLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIGtleSBhcmVhcyBkdXJpbmcgbXkgc2NhbjogZW5zdXJpbmcgY29ycmVjdCBldmVudCB0cmlnZ2VyaW5nIHVuZGVyIHZhcmlvdXMgbG9hZCBjb25kaXRpb25zLCB2ZXJpZnlpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcHJvcGVybHkgcG9wdWxhdGVkLCBhbmQgZW5zdXJpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZHJpdmVycyBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyBzcGVjaWZpZWQgaW4gdGhlIGRlc2lnbi4gQW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoZXJlLCBhbnkgc3VidGxlIGVkZ2UgY2FzZXMsIGFuZCB0aGlzIHdob2xlIHRoaW5nIGNvdWxkIHVucmF2ZWwuIFRpbWUgZm9yIGEgbWV0aWN1bG91cyBvbmNlLW92ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9kZXZpY2VfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz00ODU9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG5uZXQvY29yZS9wa3RnZW4uYy00ODYtXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4NzpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7XG5uZXQvY29yZS9wa3RnZW4uYy00ODgtc3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTUwND1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBrdGdlbl9ub3RpZmllcl9ibG9jayA9IHtcbm5ldC9jb3JlL3BrdGdlbi5jOjUwNTpcdC5ub3RpZmllcl9jYWxsID0gcGt0Z2VuX2RldmljZV9ldmVudCxcbm5ldC9jb3JlL3BrdGdlbi5jLTUwNi19O1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIwODU9c3RhdGljIHZvaWQgcGt0Z2VuX2NoYW5nZV9uYW1lKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE0LVxubmV0L2NvcmUvcGt0Z2VuLmM6MjExNTpzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE2LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTk4CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBTdW1tYXJ5KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgcmVhbGx5IGp1bXAgb3V0IGFzIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCYjMzk7cyBicmVhayBpdCBkb3duIGluIG15IGhlYWQ6CgoqICAgKipGdXp6aW5nIFZhbHVlOioqIERlZmluaXRlbHkgd29ydGggcHVyc3VpbmcuCiogICAqKlRoZSBCdWc6KiogSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGF0YSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgYHBrdF9kZXYtJmd0O3JlbW92YWxfbWFya2Agd2l0aGluIHRoZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgY29kZS4gVGhlIGZpeCBleHRlbmRzIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoYXQgdmFyaWFibGUuIFRoaXMgdnVsbmVyYWJpbGl0eSBjYW4gYmUgdHJpZ2dlcmVkIHRocm91Z2ggd3JpdGVzIHRvIHRoZSBwa3RnZW4gdGhyZWFkIGZpbGVzIHZpYSBwcm9jZnMgb3IgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHVucmVnaXN0cmF0aW9uIGV2ZW50cy4KKiAgICoqRm9jdXMgQXJlYXM6KiogYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgYXJlIHRoZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBjYW4gYmUgdHJpZ2dlcmVkLgoqICAgKipDb25maWd1cmF0aW9uOioqIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBpcyBgTkVUX1BLVEdFTmAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBgTkVUX1BLVEdFTmAgaXRzZWxmIGRvZXNuJiMzOTt0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBjb21wbGljYXRlIHRoaW5ncy4gQWgsIGl0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgUFJPQ19GU2AuIFRob3NlIGFyZSBiYXNpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBlbmFibGVkLCB0aGV5JiMzOTtyZSBwcmV0dHkgdWJpcXVpdG91cy4gU28sIGBORVRfUEtUR0VOYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkFscmlnaHQsIEkgdGhpbmsgdGhhdCYjMzk7cyBhIHNvbGlkIGFzc2Vzc21lbnQuIExldCYjMzk7cyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BrdGdlbl90aHJlYWRfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2RldmljZV9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgYnkgZXh0ZW5kaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIGNvdmVyIHRoZSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwcm9jZnMgd3JpdGVzIHRvIHBrdGdlbiB0aHJlYWQgZmlsZXMgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwa3RnZW5fdGhyZWFkX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgYW5kIGB0LVx1MDAzZWNvbnRyb2xgLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3b3VsZCBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYW4gUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUgKGBwa3RnZW5fZGV2YCkgd2hpY2ggY291bGQgdGhlbiBiZSBmcmVlZCBiZWZvcmUgdGhlIGNhbGxlciBhY2Nlc3NlZCBpdC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggN2Y4MWFlZDQ2NjcyMy4uNGZiMTg1MzU4OWIzMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTIwMzIsMTQgJiM0MzsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sCiAJYm9vbCBleGFjdCA9IChyZW1vdmUgPT0gRklORCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZhbXA7cG4tJmd0O3BrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiAJCXBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7CiAJCWlmIChwa3RfZGV2KSB7CiAJCQlpZiAocmVtb3ZlKSB7CiAJCQkJcGt0X2Rldi0mZ3Q7cmVtb3ZhbF9tYXJrID0gMTsKIAkJCQl0LSZndDtjb250cm9sIHw9IFRfUkVNREVWOwogCQkJfQotCQkJYnJlYWs7CiAJCX0KJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaWYgKHBrdF9kZXYpCiYjNDM7CQkJYnJlYWs7CiAJfQogCXJldHVybiBwa3RfZGV2OwogfQpAQCAtMzc3Niw3ICYjNDM7Mzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCXN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7CiAJc2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsICZhbXA7dC0mZ3Q7aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHN0cm5jbXAocC0mZ3Q7b2Rldm5hbWUsIGlmbmFtZSwgbGVuKSA9PSAwKSB7CiAJCQlpZiAocC0mZ3Q7b2Rldm5hbWVbbGVuXSkgewpAQCAtMzc4Nyw3ICYjNDM7Mzc4OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAogCQkJYnJlYWs7CiAJCX0KIAotCXJjdV9yZWFkX3VubG9jaygpOwogCXByX2RlYnVnKCYjMzQ7ZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxuJiMzNDssIGlmbmFtZSwgcGt0X2Rldik7CiAJcmV0dXJuIHBrdF9kZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA4CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSQ1UgTG9ja2luZyBGaXggaW4gcGt0Z2VuLmMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2NvcmUvcGt0Z2VuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgUkNVIGxvY2tpbmcgd2l0aCBgcGt0Z2VuX2ZpbmRfZGV2YC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLiBJdCBsb29rcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgdG8gZXhwYW5kIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCgpQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3YXMgbWFuYWdpbmcgaXRzIG93biBSQ1UgbG9ja3MuIEl0IHdvdWxkIGZpbmQgYSBgcGt0Z2VuX2RldmAgKHdoaWNoLCBvZiBjb3Vyc2UsIHJlc2lkZXMgaW4gYW4gUkNVIGxpc3QpLCBhbmQgdGhlbiBkcm9wIHRoZSBsb2NrIGJlZm9yZSByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoYXQgc3RydWN0dXJlLiAgVGhpcyBzZWVtcyBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZSBjYWxsZXIgd2FzIHRoZW4gcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlIHNldHRpbmcgYHBrdF9kZXYtJmd0O3JlbW92YWxfbWFyayA9IDFgIGFuZCBtb2RpZnlpbmcgYHQtJmd0O2NvbnRyb2wgfD0gVF9SRU1ERVY7YCwgKmFmdGVyKiB0aGUgaW5pdGlhbCBgcGt0Z2VuX2ZpbmRfZGV2YCBjYWxsLiBUaGUgcHJvYmxlbSBpcywgdGhhdCBgcGt0Z2VuX2RldmAgY291bGQgYmUgZnJlZWQgYmVmb3JlIHRob3NlIG1vZGlmaWNhdGlvbnMgd2VyZSBkb25lLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIEtBU0FOIHdvdWxkIHRoYW5rZnVsbHkgY2F0Y2guCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBtb3ZpbmcgdGhlIFJDVSBsb2NraW5nIHRvIHRoZSAqY2FsbGVyKiBvZiBgcGt0Z2VuX2ZpbmRfZGV2YC4gTm93LCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBsb2NrIHdoaWxlIGFjY2Vzc2luZyB0aGUgcmV0dXJuZWQgYHBrdGdlbl9kZXZgLCBlbnN1cmluZyBpdCByZW1haW5zIHZhbGlkLiAgRXNzZW50aWFsbHksIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aG9zZSBvcGVyYXRpb25zLgoKU28sIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCwgdGhlIHBhdGNoIGFkZHMgdGhlIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHBrdGdlbl9maW5kX2RldigpYCBjYWxsLiBBbmQgd2l0aGluIGBwa3RnZW5fZmluZF9kZXZgLCB0aGUgbG9jay91bmxvY2sgY2FsbHMgYXJlIHJlbW92ZWQuCgpNeSBjb25jZXJuIG5vdyBpcywgaXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFrcyBhcyBhIHJlc3VsdD8gTm8sIHRoaXMgaXMganVzdCBSQ1UgbG9ja2luZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgdGhlIGNvcHlpbmcgb2YgYW55dGhpbmcgbmV3IHRvIHVzZXJzcGFjZS4KClRoZXJlZm9yZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgbG9ja2luZyBhZGp1c3RtZW50IGFuZCB0aGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgZGF0YSBsZWFrcywgS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIEkmIzM5O20gbWFya2luZyBpdCBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuICBUaGlzIGlzIGEgY2xlYW4gZml4IGZvciBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIG5vdGhpbmcgbW9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gYnkgZXhwYW5kaW5nIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIHRvIGNvdmVyIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCBhbmQgYHQtXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AgYW5kIGB0LVx1MDAzZWNvbnRyb2xgLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3b3VsZCBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYW4gUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUgKGBwa3RnZW5fZGV2YCkgd2hpY2ggY291bGQgdGhlbiBiZSBmcmVlZCBiZWZvcmUgdGhlIGNhbGxlciBhY2Nlc3NlZCBpdC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjE3OjAyLjgyNTc1MjE2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTI4Mzc1OTk5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgICBcInBrdGdlbl9kZXZpY2VfZXZlbnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVxcdTAwM2VyZW1vdmFsX21hcmtgIGFuZCBgdC1cXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXFx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzowMi44MjU3NTg2NzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAyMzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6MTc6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IDdmODFhZWQ0NjY3MjMuLjRmYjE4NTM1ODliMzEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xcbkBAIC0yMDMyLDE0ICsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuIFxcdGJvb2wgZXhhY3QgPSAocmVtb3ZlID09IEZJTkQpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBcXHUwMDI2cG4tXFx1MDAzZXBrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0cGt0X2RldiA9IHBrdGdlbl9maW5kX2Rldih0LCBpZm5hbWUsIGV4YWN0KTtcXG4gXFx0XFx0aWYgKHBrdF9kZXYpIHtcXG4gXFx0XFx0XFx0aWYgKHJlbW92ZSkge1xcbiBcXHRcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VyZW1vdmFsX21hcmsgPSAxO1xcbiBcXHRcXHRcXHRcXHR0LVxcdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRpZiAocGt0X2RldilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHBrdF9kZXY7XFxuIH1cXG5AQCAtMzc3Niw3ICszNzc5LDYgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxuIFxcdHN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7XFxuIFxcdHNpemVfdCBsZW4gPSBzdHJsZW4oaWZuYW1lKTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXFx1MDAyNnQtXFx1MDAzZWlmX2xpc3QsIGxpc3QpXFxuIFxcdFxcdGlmIChzdHJuY21wKHAtXFx1MDAzZW9kZXZuYW1lLCBpZm5hbWUsIGxlbikgPT0gMCkge1xcbiBcXHRcXHRcXHRpZiAocC1cXHUwMDNlb2Rldm5hbWVbbGVuXSkge1xcbkBAIC0zNzg3LDcgKzM3ODksNiBAQCBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRwcl9kZWJ1ZyhcXFwiZmluZF9kZXYoJXMpIHJldHVybmluZyAlcFxcXFxuXFxcIiwgaWZuYW1lLCBwa3RfZGV2KTtcXG4gXFx0cmV0dXJuIHBrdF9kZXY7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MTc6MDMuMjk1NzYyODUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwMjUxNjAyODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX3RocmVhZF93cml0ZVwiLFxuICAgIFwicGt0Z2VuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlcmVtb3ZhbF9tYXJrYCBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgYnkgZXh0ZW5kaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIGNvdmVyIHRoZSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwcm9jZnMgd3JpdGVzIHRvIHBrdGdlbiB0aHJlYWQgZmlsZXMgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBldmVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzMTA1MDI1M2I2ZDZlZDY1MDU4NDZlMWZiMzNjNWM5M2E3YmU4ZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxNzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDdmODFhZWQ0NjY3MjMuLjRmYjE4NTM1ODliMzEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDMyLDE0ICsyMDMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXG4gXHRib29sIGV4YWN0ID0gKHJlbW92ZSA9PSBGSU5EKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodCwgXHUwMDI2cG4tXHUwMDNlcGt0Z2VuX3RocmVhZHMsIHRoX2xpc3QpIHtcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRwa3RfZGV2ID0gcGt0Z2VuX2ZpbmRfZGV2KHQsIGlmbmFtZSwgZXhhY3QpO1xuIFx0XHRpZiAocGt0X2Rldikge1xuIFx0XHRcdGlmIChyZW1vdmUpIHtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrID0gMTtcbiBcdFx0XHRcdHQtXHUwMDNlY29udHJvbCB8PSBUX1JFTURFVjtcbiBcdFx0XHR9XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGlmIChwa3RfZGV2KVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFx0cmV0dXJuIHBrdF9kZXY7XG4gfVxuQEAgLTM3NzYsNyArMzc3OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxuIFx0c3RydWN0IHBrdGdlbl9kZXYgKnAsICpwa3RfZGV2ID0gTlVMTDtcbiBcdHNpemVfdCBsZW4gPSBzdHJsZW4oaWZuYW1lKTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNnQtXHUwMDNlaWZfbGlzdCwgbGlzdClcbiBcdFx0aWYgKHN0cm5jbXAocC1cdTAwM2VvZGV2bmFtZSwgaWZuYW1lLCBsZW4pID09IDApIHtcbiBcdFx0XHRpZiAocC1cdTAwM2VvZGV2bmFtZVtsZW5dKSB7XG5AQCAtMzc4Nyw3ICszNzg5LDYgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cHJfZGVidWcoXCJmaW5kX2RldiglcykgcmV0dXJuaW5nICVwXFxuXCIsIGlmbmFtZSwgcGt0X2Rldik7XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzowMy4yOTU3NjQ4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4NDAxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgQ29yZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9wa3RnZW4uY2AuIEl0J3MgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBvdXQgb2YgYHBrdGdlbl9maW5kX2RldigpYCBhbmQgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiBgX19wa3RnZW5fTk5fdGhyZWFkcygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGNsZWFuZXIsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cbldhaXQgYSBzZWNvbmQuLi4gZG9lc24ndCBgcGt0Z2VuX2ZpbmRfZGV2KClgIGdldCBjYWxsZWQgZnJvbSAqb3RoZXIqIHBsYWNlcyBiZXNpZGVzIGp1c3QgYF9fcGt0Z2VuX05OX3RocmVhZHMoKWA/IFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIGxvY2sgc2VtYW50aWNzLiBJZiB0aGUgUkNVIGNhbGxzIHdlcmUgbW92ZWQgb3V0IG9mIGBwa3RnZW5fZmluZF9kZXYoKWAgYW5kIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gKm90aGVyKiB0aHJlYWRzIHdoaWNoIGhhdmVuJ3QgaW5jb3Jwb3JhdGVkIHRoZSBjYWxscywgd2UgbWF5IGhhdmUgaW50cm9kdWNlZCBhIHJhY2UgY29uZGl0aW9uLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBhbGwgYHBrdGdlbl9maW5kX2RldigpYCBpcyB1c2VkLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAgY29tbWFuZCBhbmQgdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjE3OjA3LjE3NDE2OTE5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTQ4NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5fZmluZF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDg0PXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDM1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9wa3RnZW4uYzoyMDM2OlxcdFxcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAzNy1cXHRcXHRpZiAocGt0X2Rldikge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzcwNj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfd29ya2VyKHZvaWQgKmFyZylcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mzc3NjpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzowNy4yNjk2ODU3MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTMxNzc5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byB0aGUgYHBrdGdlbl9maW5kX2RldmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYHBrdGdlbl9maW5kX2RldmAgaXMgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/IEknbGwgZG8gYSBxdWljayBzZWFyY2guLi4gSG1tLCBpbnRlcmVzdGluZy4gTG9va3MgbGlrZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgaXMgdGhlICpvbmx5KiBjYWxsZXIuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIG9yIGF0IGxlYXN0IG5hcnJvd3MgdGhlIHNjb3BlLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLiBMZXQncyBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL3BrdGdlbi5jYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwa3RnZW5fZmluZF9kZXZgIGlzIGRvaW5nIHdpdGhpbiB0aGUgdGhyZWFkIGluaXRpYWxpemF0aW9uIGNvbnRleHQgYW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgdGhpcyB3YXkuIE15IGV4cGVydCBrbm93bGVkZ2UgdGVsbHMgbWUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYXJlIG1lbW9yeSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgcmF0aW9uYWxlIGZvciBoYXZpbmcgYSBkZWRpY2F0ZWQgdGhyZWFkIGludGVyYWN0aW9uIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MTc6MTIuODAxNDY5MTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTI2MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9maW5kX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDg0PXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg1OnN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDM1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9wa3RnZW4uYzoyMDM2OlxcdFxcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAzNy1cXHRcXHRpZiAocGt0X2Rldikge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzcwNj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfd29ya2VyKHZvaWQgKmFyZylcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mzc3NjpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzoxMi44Njk0MDMzNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc4MTk5NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gUGFja2V0IEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gc2VlaW5nIGBwa3RnZW5fZmluZF9kZXZgIGJlaW5nIGNhbGxlZCwgYW5kIHNvbWV0aGluZydzIHBpbmdpbmcgdGhhdCBpdCdzIG9ubHkgaW52b2tlZCBmcm9tIHdpdGhpbiB0aG9zZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgZnVuY3Rpb25zLiBUaGF0IHNlZW1zLi4uc3BlY2lmaWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gSWYgdHJ1ZSwgdGhhdCByZWFsbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0J3MgZ29pbmcgb24uXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsIGdyYXBoLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IGFsbCB0aGUgY2FsbGVycyBvZiB0aGVzZSBgX19wa3RnZW5fTk5fdGhyZWFkc2AgZnVuY3Rpb25zIGFyZS4gVW5kZXJzdGFuZGluZyB0aGVpciBvcmlnaW5zIGlzIGVzc2VudGlhbCBmb3IgcmVhbGx5IGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGhvdyB0aGlzIGBwa3RnZW5fZmluZF9kZXZgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSBwYWNrZXRzIGFyZSBiZWluZyBnZW5lcmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzoxNy41NDc2MDY4OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNDgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wa3RnZW5fTk5fdGhyZWFkc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz0yMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3RocmVhZF9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjYtLyogVGhpbmsgZmluZCBvciByZW1vdmUgZm9yIE5OICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjAyNzpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqaWZuYW1lLCBpbnQgcmVtb3ZlKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjA1Mz1zdGF0aWMgdm9pZCBwa3RnZW5fbWFya19kZXZpY2UoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLCBjb25zdCBjaGFyICppZm5hbWUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDYzLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjIwNjQ6XFx0XFx0cGt0X2RldiA9IF9fcGt0Z2VuX05OX3RocmVhZHMocG4sIGlmbmFtZSwgUkVNT1ZFKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDY1LVxcdFxcdGlmIChwa3RfZGV2ID09IE5VTEwpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zODMxPXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM4MzgtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzgzOTpcXHRwa3RfZGV2ID0gX19wa3RnZW5fTk5fdGhyZWFkcyh0LVxcdTAwM2VuZXQsIGlmbmFtZSwgRklORCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMzg0MC1cXHRpZiAocGt0X2Rldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxNzoxNy42Mjk3NTk4ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDc2ODcxODI2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFJDVSBSZWFkIExvY2sgUGxhY2VtZW50IGluIHBrdGdlbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAgY2FsbCBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgbW92ZW1lbnQgb2YgYHJjdV9yZWFkX2xvY2soKWAgZnJvbSBpbnNpZGUgYHBrdGdlbl9maW5kX2RldmAgdG8gd2l0aGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzbmlwcGV0IGZyb20gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGdyYWJiZWQgbXkgYXR0ZW50aW9uLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3YXMgcmVzcG9uc2libGUgZm9yIGFjcXVpcmluZyBhbmQgcmVsZWFzaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLiAgTm93LCB0aGUgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgY2FsbCB0byBgcGt0Z2VuX2ZpbmRfZGV2YCAqYW5kKiB0aGUgc3Vic2VxdWVudCBjaGVjayBhbmQgbW9kaWZpY2F0aW9uIG9mIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AuXG5cbkkgcmVhbGl6ZWQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHNoaWZ0IGltbWVkaWF0ZWx5LiBgcGt0Z2VuX2ZpbmRfZGV2YCByZXR1cm5zIGEgcG9pbnRlciAoYHBrdF9kZXZgKSB0byBhIHN0cnVjdHVyZSBwcm90ZWN0ZWQgYnkgUkNVLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IGJlZm9yZSB0aGUgcGF0Y2gsIHRoZSByZWFkIGxvY2sgd2FzIHJlbGVhc2VkICpiZWZvcmUqIHJldHVybmluZyBgcGt0X2RldmAgZnJvbSBgcGt0Z2VuX2ZpbmRfZGV2YC4gIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29kZSBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2Agd2FzIGFjY2Vzc2luZyBgcGt0X2RldmAgYWZ0ZXIgdGhlIFJDVSByZWFkIGxvY2sgd2FzIGRyb3BwZWQsIHdoaWNoIGlzIGRhbmdlcm91cywgYXMgdGhlIG9iamVjdCBjb3VsZCBoYXZlIGJlZW4gZnJlZWQgY29uY3VycmVudGx5LiBUaGUgc3Vic2VxdWVudCBsaW5lLCBgcGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmsgPSAxO2Agd2FzIGEgY2xlYXIgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgb3IgYXQgbGVhc3QgYSBkYXRhIHJhY2UgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LlxuXG5XaXRoIHRoZSBwYXRjaCwgdGhlIGByY3VfcmVhZF9sb2NrKClgIGlzIGhlbGQgKnRocm91Z2gqIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCwgc2FmZWd1YXJkaW5nIHRoZSBhY2Nlc3MuIFRoaXMgaXMgdGhlIGZpeC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogZG9lcyB0aGlzIGhhdmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0IGJleW9uZCB0aGUgZml4IGl0c2VsZj8gSSBjaGVja2VkIHRoZSBjYWxsZXJzIG9mIGBfX3BrdGdlbl9OTl90aHJlYWRzYDogYHBrdGdlbl9hZGRfZGV2aWNlYCBhbmQgYHBrdGdlbl9tYXJrX2RldmljZWAuIEJvdGgganVzdCBjaGVjayBmb3IgYSBub24tTlVMTCByZXR1cm4gZnJvbSBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIFRoZXkgZG8gbm90IGRlcmVmZXJlbmNlIGBwa3RfZGV2YCBhZnRlciB0aGUgY2FsbC4gVGh1cywgdGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIHRoZSBpbnRlcm5hbCBsb2dpYyBvZiBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIEl04oCZcyBvbmx5IHRoZSBpbnRlcm5hbCBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYCB0aGF0IGlzIG5vdyBjb3JyZWN0bHkgUkNVLXByb3RlY3RlZC5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSBidWcgZml4LCBlbGltaW5hdGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2UgaW4gdGhlIG5ldHdvcmsgcGFja2V0IGdlbmVyYXRpb24gY29kZS4gQmVjYXVzZSBgcGt0Z2VuYCBpcyBrZXJuZWwgY29kZSAoYW5kIGxpa2VseSBlbmFibGVkIGluIGZ1enppbmcpLCBpdCdzIGEgYnVnIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsbHkgYSBuby1vcCwgYnV0IGl0IGZpeGVzIGEgc2lnbmlmaWNhbnQgZGF0YSByYWNlLiBJIHdpbGwgY2hlY2sgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjU1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyOTo0NS4zMTY5NDcwNDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg3NTgzMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyOTo0NS44NDc4NDM3MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MjQ4NjIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkxvY2F0aW5nIHRoZSBDb21waWxhdGlvbiBQb2ludCBvZiBgcGt0Z2VuLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBwa3RnZW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIHdpdGhpbiB0aGUgcHJvamVjdC4gSXQncyBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGJ1aWxkIHByb2Nlc3MgaXMgY3JpdGljYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGFuYWx5c2lzIEknbSBkb2luZy4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjb21waWxhdGlvbiwgd2hpY2ggbWVhbnMgSSdsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBmb3IgYSBNYWtlZmlsZSwgQ01ha2VMaXN0cy50eHQsIG9yIGFueSBvdGhlciBidWlsZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBpbiB0aGUgcHJvamVjdCdzIHJvb3Qgb3IgcmVsZXZhbnQgc3ViZGlyZWN0b3JpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgZGlyZWN0aXZlcyBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyBgcGt0Z2VuLmNgIG9yLCBtb3JlIGJyb2FkbHksIG1vZHVsZXMgcmVsYXRlZCB0byBwYWNrZXQgZ2VuZXJhdGlvbi4gS25vd2luZyBpdHMgY29tcGlsYXRpb24gY29udGV4dCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaW5jbHVkZSBwYXRocywgbGlua2VkIGxpYnJhcmllcywgYW5kIGFueSBidWlsZCBmbGFncyB1c2VkLCBhbGwgb2Ygd2hpY2ggYXJlIHZpdGFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIG92ZXJhbGwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5OTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyOTo0OS4yMzAzMzQ1MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjYzNjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IG5ldC1wcm9jZnMub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6Mjk6NDkuMzQyOTc2MzU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzU3ODI0ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUGFja2V0IEdlbmVyYXRvciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaGVyZSBpcyBgQ09ORklHX05FVF9QS1RHRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBJIGNhbiBmaW5kIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGVpdGhlciBgbmV0L2NvcmUvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgbW9yZSBicm9hZGx5LCBgbmV0L0tjb25maWdgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSByZWZlcmVuY2UgdG8gYE5FVF9QS1RHRU5gIHdpdGhpbiBvbmUgb2YgdGhvc2UgZmlsZXMuIFRoYXQgd2lsbCBwb2ludCBtZSB0b3dhcmRzIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgbGlrZWx5IGFueSByZWxldmFudCBkZWZhdWx0cyBmb3IgdGhpcyBmZWF0dXJlLiBUaW1lIHRvIHRyYWNrIGl0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNToyMi45MjEyMjg1NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjU5Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9QS1RHRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzU6MjMuMDAyODk1MzMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODM2NDgwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBwa3RnZW5gIFRocmVhZCBJbnRlcmFjdGlvbiB3aXRoIFByb2NmcyoqXG5cblJpZ2h0LCBzbyBgcGt0Z2VuX2FkZF9kZXZpY2VgIGFuZCBgcGt0Z2VuX21hcmtfZGV2aWNlYCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgcHJvY2ZzLWRyaXZlbiBjYWxscy4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IGFuZCBmaWd1cmUgb3V0IGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIGZ1bmN0aW9ucyBhY3R1YWxseSB3b3Jrcy4gVGhlIHByb2NmcyBpbnRlcmZhY2UgKmhhcyogdG8gYmUgdGhlIHRyaWdnZXIuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIHNoaWZ0cyB0byB0aGUgd3JpdGUgcGF0aC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGZ1bmN0aW9ucyBsaWtlIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBvciB3aGF0ZXZlciBzaW1pbGFyIGZ1bmN0aW9uIG5hbWUgaXMgdXNlZCB0byBoYW5kbGUgd3JpdGluZyB0byB0aG9zZSBwcm9jZnMgZmlsZXMuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIHRoZSBjb21tYW5kcyBnZXQgaW50ZXJwcmV0ZWQgYW5kIHVsdGltYXRlbHksIHdoZXJlIHRob3NlIGRldmljZS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSB0aHJlYWQgaW50ZXJhY3Rpb24gaGVyZSBpcyBjcnVjaWFsIHRvIHNlZSBob3cgZGV2aWNlcyBhcmUgYWN0dWFsbHkgYWRkZWQgYW5kIG1hcmtlZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIHJlc2lkZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM1OjI4LjA4NjU0ODg5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NDE1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9hZGRfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTQ4Mz1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBzdHJ1Y3QgcGt0Z2VuX2RldiAqaSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg0OnN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtNDg1LXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTkxNj1zdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk4MS1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwa3RnZW5fdGhyZWFkX2xvY2spO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjE5ODI6XFx0XFx0cmV0ID0gcGt0Z2VuX2FkZF9kZXZpY2UodCwgZik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk4My1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBrdGdlbl90aHJlYWRfbG9jayk7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zODAwPXN0YXRpYyBpbnQgYWRkX2Rldl90b190aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zODMwLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM4MzE6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM4MzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNToyOC43NzE5NzAyNjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NjY3MTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHBrdGdlbl90aHJlYWRfd3JpdGVgKipcblxuT2theSwgc28gYHBrdGdlbl90aHJlYWRfd3JpdGVgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGxvb2sgYXQuIFJpZ2h0LCBsZXQncyBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUgZm9yIHRoYXQuIFNwZWNpZmljYWxseSwgSSdsbCBqdW1wIGludG8gYG5ldC9jb3JlL3BrdGdlbi5jYCBhbmQgemVybyBpbiBvbiB0aGF0IGVudHJ5IHBvaW50LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBsaWVzLCBzbyBnZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nLCBvciBqdXN0IGdlbmVyYWxseSB0cnlpbmcgdG8gZ3JvayBoZXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhpcyBmdW5kYW1lbnRhbCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM1OjMyLjMzODY0NDQzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDQ0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjAxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl90aHJlYWRfcHJvY19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIxLVxcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjAyMjpcXHQucHJvY193cml0ZVxcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIzLVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNTozMi40NDU2OTYwNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTE3NzI3MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIHVzaW5nIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBQYWNrZXQgR2VuZXJhdGlvbiBhbmQgRGV2aWNlIE1hcmtpbmcqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHBhY2tldCBnZW5lcmF0aW9uLCBhbmQgbmF0dXJhbGx5LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBzcGVjaWZpY3MuIEknbSB3b25kZXJpbmcsIHdoYXQgYWJvdXQgYHBrdGdlbl9tYXJrX2RldmljZWA/IFRoYXQgZnVuY3Rpb24sIHRoZSBpbXBsaWNhdGlvbnMgb2YgKnRoYXQqLCBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgbmV4dC4gSXMgdGhlcmUgc29tZSBzcGVjaWZpYyBkZXZpY2Ugb3IgY29uZmlndXJhdGlvbiBiZWluZyBwb2ludGVkIHRvd2FyZHMsIG9yIHNvbWUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gYmUgbW9yZSBhd2FyZSBvZj8gV2hhdCBzb3J0IG9mIG9wdGltaXphdGlvbnMgYXJlIGhhcHBlbmluZz8gSSdtIGFscmVhZHkgaW1hZ2luaW5nIHRoZSB1c2UgY2FzZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkLiBMZXQncyBkZWx2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQwOjU3Ljk2MzQyNzMwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxMDY4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9tYXJrX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz0yMDI3PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDUyLSAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jOjIwNTM6c3RhdGljIHZvaWQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbiwgY29uc3QgY2hhciAqaWZuYW1lKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwNTQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjExNT1zdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTMzLVxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxubmV0L2NvcmUvcGt0Z2VuLmM6MjEzNDpcXHRcXHRwa3RnZW5fbWFya19kZXZpY2UocG4sIGRldi1cXHUwMDNlbmFtZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjEzNS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDA6NTguNjk0NTAwMTg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTQ0Mjg5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZDogYHBrdGdlbl9tYXJrX2RldmljZWAqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBwa3RnZW5fbWFya19kZXZpY2VgIGdldHMgdHJpZ2dlcmVkIGR1cmluZyBuZXRkZXYgdW5yZWdpc3RyYXRpb24uIFRoYXQncyBhIGRlZmluaXRlIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIOKAkyBhIGNsZWFyIHBhdGggb2YgZXhlY3V0aW9uIHRoYXQncyBsaWtlbHkgcmVhY2hhYmxlLiBOb3csIHRoZSBidWcgcmVwb3J0IHNwZWNpZmllcyBhIGRhdGEgcmFjZSwgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AuIEludGVyZXN0aW5nLiBTbywgdGhlIGZpeCBpbnZvbHZlcyBleHRlbmRpbmcgdGhlIFJDVSByZWFkIGxvY2sgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrYC4gTWFrZXMgc2Vuc2UsIHByb3RlY3RpbmcgdGhlIHJlYWQgd2l0aCBhIHJlYWQgbG9jayBpcyBhIGxvZ2ljYWwgc29sdXRpb24gdG8gcmVzb2x2ZSB0aGUgcmFjZSBjb25kaXRpb24uXG5cbldhaXQgYSBzZWNvbmTigKYgYHBrdF9kZXZgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBhbmQgZnJlZWQgd2l0aCBga2ZyZWVfcmN1YD8gVGhhdCdzIHdoYXQgdGhlIGZpeCBzdWdnZXN0cy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBsaWZlY3ljbGUgaW1tZWRpYXRlbHkgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgbWF0Y2hlcyB0aGUgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBhbGxvY2F0aW9uIGNvZGUgYW5kIHRyYWNlIHRoZSBmcmVlaW5nIHBhdGggYXMgc29vbiBhcyBJJ20gZG9uZSBzdW1tYXJpemluZy4gVGhhdCdzIGtleSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjAzLjA0ODkzMjgyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0MzQ1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWUuKnBrdF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MzM4OT1zdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzOTktXFx0cGt0X2Rldi1cXHUwMDNlcnVubmluZyA9IDA7XFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQwMDpcXHRrZnJlZV9za2IocGt0X2Rldi1cXHUwMDNlc2tiKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zNDAxLVxcdHBrdF9kZXYtXFx1MDAzZXNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zNTE3PXN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzU1NC1cXHRcXHQvKiBidWlsZCBhIG5ldyBwa3QgKi9cXG5uZXQvY29yZS9wa3RnZW4uYzozNTU1OlxcdFxcdGtmcmVlX3NrYihwa3RfZGV2LVxcdTAwM2Vza2IpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTYtXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zODMxPXN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM4NTMtXFx0aWYgKHBrdF9kZXYtXFx1MDAzZWZsb3dzID09IE5VTEwpIHtcXG5uZXQvY29yZS9wa3RnZW4uYzozODU0OlxcdFxcdGtmcmVlKHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM4NTUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zOTE0LVxcdHZmcmVlKHBrdF9kZXYtXFx1MDAzZWZsb3dzKTtcXG5uZXQvY29yZS9wa3RnZW4uYzozOTE1OlxcdGtmcmVlKHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MTYtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTM5ODg9c3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTQwMTYtXFx0XFx0cHV0X3BhZ2UocGt0X2Rldi1cXHUwMDNlcGFnZSk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDAxNzpcXHRrZnJlZV9yY3UocGt0X2RldiwgcmN1KTtcXG5uZXQvY29yZS9wa3RnZW4uYy00MDE4LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MTowMy4xMTAzNzIxMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MDQ5ODA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrZnJlZV9yY3VgIEZpeCBpbiBgcGt0Z2VuX3JlbW92ZV9kZXZpY2VgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga2ZyZWVfcmN1KHBrdF9kZXYsIHJjdSlgIGlzIGluZGVlZCB1dGlsaXplZCB3aXRoaW4gdGhlIGBwa3RnZW5fcmVtb3ZlX2RldmljZWAgZnVuY3Rpb24uIFRoaXMgbWFrZXMgc2Vuc2UuIFRoZSBwcm9wb3NlZCBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgY29ycmVjdGx5IHRhY2tsZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBvZiB0aGUgYHBrdF9kZXZgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGBfX3BrdGdlbl9OTl90aHJlYWRzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGByZW1vdmVgIGZsYWcgaXMgc2V0IHRvIHRydWUuIFRoZSBjcnV4IG9mIHRoZSBzb2x1dGlvbiBpcyB0byBtYWludGFpbiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgdGhyb3VnaG91dCB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVx1MDAzZXJlbW92YWxfbWFya2AuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBtZW1vcnkgaXNuJ3QgZnJlZWQgcHJlbWF0dXJlbHkgd2hpbGUgaXQncyBzdGlsbCBwb3RlbnRpYWxseSBiZWluZyBhY2Nlc3NlZC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgZGlzdGluY3QgY2hhbmdlLCBhIGRlbGliZXJhdGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb2RlJ3MgYmVoYXZpb3IgYWltZWQgYXQgaW1wcm92aW5nIGl0cyByb2J1c3RuZXNzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9QS1RHRU5gIG5vdywgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdGx5IGludGVncmF0ZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyB3aXRoIGV4aXN0aW5nIHNldHVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MTowNy42OTA4NzI2NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTE2NzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zODQ9bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbm5ldC9LY29uZmlnLTM4NS1cXG5uZXQvS2NvbmZpZzozODY6Y29uZmlnIE5FVF9QS1RHRU5cXG5uZXQvS2NvbmZpZy0zODctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MTowNy44MDAwNDQ1OTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4MDU4MDQ5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IGBjb25maWcgTkVUX1BLVEdFTmAgaW4gYG5ldC9LY29uZmlnYDpcblxuKipBbmFseXppbmcgTkVUX1BLVEdFTiBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYG5ldC9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSBgY29uZmlnIE5FVF9QS1RHRU5gIHNldHRpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHBhY2tldCBnZW5lcmF0b3IgZmVhdHVyZS4gVGhpcyBtZWFucyBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBhbnkgaGVscCB0ZXh0IHRoYXQgY2xhcmlmaWVzIGl0cyBwdXJwb3NlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBvdGhlciBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgYXZhaWxhYmxlPyBJcyBpdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWM/IERvZXMgaXQgaW50cm9kdWNlIGFueSBuZXcgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIG9uIG90aGVyIG5ldHdvcmsgc3Vic3lzdGVtcyBvciBsaWJyYXJpZXM/IEtub3dpbmcgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBpcyB0eXBpY2FsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCwgaGVscGluZyBtZSBhc3Nlc3MgdGhlIGxpa2VseSB1c2FnZSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHRoZSBmZWF0dXJlLiBBbmQgb2YgY291cnNlLCB0aGUgXCJoZWxwXCIgdGV4dCBpcyBjcnVjaWFsLiBUaGF0J3Mgd2hlcmUgSeKAmWxsIGZpbmQgdGhlIGNvbmNpc2UgZGVmaW5pdGlvbiwgdXNlIGNhc2VzLCBhbmQgYW55IHdhcm5pbmdzLiBJJ2xsIG5lZWQgdG8gYWJzb3JiIHRoaXMgaW5mb3JtYXRpb24gcXVpY2tseSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmb3IgdGhlIHJlc3Qgb2YgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjI5LjYwNTg1Mjc0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0NjQxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9QS1RHRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDE6MjkuNjk1MzIxMDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUwMzc1OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIG5ldC9LY29uZmlnIGZvciBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsb2dpYyBiZXR0ZXIuIExldCdzIGRpdmUgaW50byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAzODYg4oCTIHRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZXMsIHBlcmhhcHMgb3B0aW9ucyBmb3IgcHJvdG9jb2wgc3VwcG9ydCwgaGFyZHdhcmUgc2VsZWN0aW9uLCBvciBtYXliZSBzb21lIGRlcGVuZGVuY3kgZGVjbGFyYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQgcmVsYXRlcyB0byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBnZXQgZG93biB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjM5LjE5OTA4Mjg3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0ICBtYWludGFpbiBjYXBhY2l0eSBmb3IgdGhlIG90aGVyIGZsb3dzLiBUaGlzIGZlYXR1cmUgcHJvdmlkZXMgc2VydmVyc1xcbiAzODE6XFx0XFx0ICB3aXRoIG1hbnkgY2xpZW50cyBzb21lIHByb3RlY3Rpb24gYWdhaW5zdCBEb1MgYnkgYSBzaW5nbGUgKHNwb29mZWQpXFxuIDM4MjpcXHRcXHQgIGZsb3cgdGhhdCBncmVhdGx5IGV4Y2VlZHMgYXZlcmFnZSB3b3JrbG9hZC5cXG4gMzgzOlxcdFxcbiAzODQ6XFx0bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbiAzODU6XFx0XFxuIDM4NjpcXHRjb25maWcgTkVUX1BLVEdFTlxcbiAzODc6XFx0XFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcbiAzODg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG4gMzg5OlxcdFxcdGhlbHBcXG4gMzkwOlxcdFxcdCAgVGhpcyBtb2R1bGUgd2lsbCBpbmplY3QgcHJlY29uZmlndXJlZCBwYWNrZXRzLCBhdCBhIGNvbmZpZ3VyYWJsZVxcbiAzOTE6XFx0XFx0ICByYXRlLCBvdXQgb2YgYSBnaXZlbiBpbnRlcmZhY2UuICBJdCBpcyB1c2VkIGZvciBuZXR3b3JrIGludGVyZmFjZVxcbiAzOTI6XFx0XFx0ICBzdHJlc3MgdGVzdGluZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuICBJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZFxcbiAzOTM6XFx0XFx0ICB3aGF0IHdhcyBqdXN0IHNhaWQsIHlvdSBkb24ndCBuZWVkIGl0OiBzYXkgTi5cXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0ICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIHBhY2tldCBnZW5lcmF0b3IgY2FuIGJlIGZvdW5kXFxuIDM5NjpcXHRcXHQgIGF0IFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4ucnN0XFx1MDAzZS5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDM5OTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwa3RnZW4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQxOjM5LjE5OTE1MDk5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzE2NTM2NDc4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBORVRfUEtUR0VOYCBDb25maWd1cmF0aW9uIGFuZCBBc3NvY2lhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBORVRfUEtUR0VOYCBpc3N1ZS4gRmlyc3QsIGxldCdzIG1ha2Ugc3VyZSB3ZSdyZSBnZXR0aW5nIHRoZSBiYXNpY3MgcmlnaHQuIEl0J3MgY2xlYXIgdGhhdCBgTkVUX1BLVEdFTmAgcmVsaWVzIG9uIGJvdGggYElORVRgIGFuZCBgUFJPQ19GU2AsIHNvIHdlJ2xsIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYE5FVF9QS1RHRU5gIHRvIGBFbmFibGVDb25maWdzYCB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBidWlsZCBpc3N1ZXMuXG5cbk5vdywgd2hlcmUncyB0aGUgYWN0dWFsIHByb2JsZW0/IFRoZSBsb2cgcG9pbnRzIHRvIGBfX3BrdGdlbl9OTl90aHJlYWRzYCwgd2hpY2ggaXMgYSBzdGF0aWMgdmFyaWFibGUuIFRoZSBjYWxsZXJzIG9mIHRoaXMgYXJlIGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBHb3QgaXQuIExldCdzIHRyYWNlIHRob3NlIGNhbGxzLiBgcGt0Z2VuX2FkZF9kZXZpY2VgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYGFkZF9kZXZfdG9fdGhyZWFkYC4gYHBrdGdlbl9tYXJrX2RldmljZWAgZ2V0cyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLiBTbywgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAuXG5cbkhhbmcgb24sIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBpcyBhIG5vdGlmaWVyIGNhbGxiYWNrLiBJbnRlcmVzdGluZy4gTm93LCBgcGt0Z2VuX3RocmVhZF93cml0ZWAgaXMgYSBwcm9jZnMgd3JpdGUgY2FsbGJhY2suIE9rYXksIGxldCdzIHNlZSwgaXMgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5pdCdzIHN0YXRpYyAqYW5kKiBpdCdzIGFzc2lnbmVkIHRvIGBwcm9jX29wc2AuIFJpZ2h0LCB0aGF0J3Mgbm90IHNvbWV0aGluZyB5b3Ugc2VlIGV2ZXJ5IGRheS4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgc2lnbmF0dXJlIG9mIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBpbW1lZGlhdGVseSBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NTozMC44NTI4MDI1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxOTg3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBzc2l6ZV90IHBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NTozMS4wMzQ3OTUwNDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MjU3MzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gYXBwcm9hY2g6XG5cbioqRXhwbG9yaW5nIHRoZSBEeW5hbWljcyBvZiBGdW5jdGlvbiBCZWhhdmlvcioqXG5cbkhtbSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogZnVuY3Rpb25zIHRoYXQgYXJlbid0IHN0YXRpYz8gVGhhdCdzIGFuIGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50LiBJdCBmb3JjZXMgbWUgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBcInN0YXRpY1wiIGluIHRoaXMgY29udGV4dC4gQW0gSSB0aGlua2luZyBhYm91dCBzdGF0aWMgaW4gdGhlIGNvbnRleHQgb2YgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCBvciBpcyB0aGVyZSBhIG1vcmUgZ2VuZXJhbCBjb25jZXB0IGF0IHBsYXkgaGVyZT9cblxuSWYgd2UncmUgdGFsa2luZyBjb2RlLCB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgYnJpbmdzIHVwIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY29wZS4gU3RhdGljIGZ1bmN0aW9ucywgYXMgSSB1bmRlcnN0YW5kIHRoZW0sIGFyZSB1c3VhbGx5IGRlZmluZWQgd2l0aGluIGEgY2xhc3Mgb3IgbmFtZXNwYWNlLCBub3QgdGllZCB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuIFRoZXkgbGl2ZSBhdCB0aGUgY2xhc3MgbGV2ZWwuIFNvLCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCBhbnkgZnVuY3Rpb24gKm5vdCogc3RhdGljIG11c3QgYmUgdGllZCB0byBhbiBpbnN0YW5jZSBvciBzb21ldGhpbmcgZWxzZSB0aGF0IGhhcyBzdGF0ZS5cblxuVGhpcyBsZWFkcyBtZSB0byBjb25zaWRlciBmdW5jdGlvbiBzaWRlIGVmZmVjdHMuIElmIGEgZnVuY3Rpb24gY2FuIGFsdGVyIHRoZSBzdGF0ZSBvZiBzb21ldGhpbmcsIHRoZW4gaXQgY2FuJ3QgYmUgc3RhdGljLCByaWdodD8gVGhlIHZlcnkgbmF0dXJlIG9mIGEgc3RhdGljIGZ1bmN0aW9uIGltcGxpZXMgaXQncyBkZXRlcm1pbmlzdGljIGJhc2VkIHNvbGVseSBvbiBpdHMgaW5wdXRzLiBJZiB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24gaXMgY2hhbmdlZCwgdGhlIHJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUsIGFuZCB0aGlzIGlzIHdoeSBhIHN0YXRpYyBmdW5jdGlvbiBuZWVkcyB0byBjaGFuZ2UuXG5cbkknbSBhbHNvIHdvbmRlcmluZyBpZiB3ZSdyZSBldmVuIGxpbWl0ZWQgdG8gcHJvZ3JhbW1pbmcgaGVyZS4gV2hhdCBhYm91dCBpbiBhIG1vcmUgYWJzdHJhY3QgbWF0aGVtYXRpY2FsIHNlbnNlPyBBcmUgdGhlcmUgZnVuY3Rpb25zIHdoZXJlIHRoZWlyIGJlaGF2aW9yIGlzbid0IGZpeGVkLCBpc24ndCBpbW11dGFibGU/IENhbiBhIGZ1bmN0aW9uJ3MgcmVzcG9uc2UgYmUgZHluYW1pYywgY2hhbmdpbmcgd2l0aCB0aW1lIG9yIHNvbWUgb3RoZXIgZXh0ZXJuYWwgZmFjdG9yPyBUaGlzIG1pZ2h0IGJlIHdoZXJlIHdlIG5lZWQgdG8gc3RhcnQgdGhpbmtpbmcgYWJvdXQgZnVuY3Rpb25zIHdpdGhpbiBzeXN0ZW1zIHdpdGggZmVlZGJhY2sgbG9vcHMuXG5cblVsdGltYXRlbHksIHRoZSBhbnN3ZXIgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgZG9tYWluLiBCdXQgdGhlIHF1ZXN0aW9uIGlzIGEgdXNlZnVsIG9uZS4gSXQgZm9yY2VzIG1lIHRvIGxvb2sgYXQgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB0aGUgc3RhdGljIGFuZCB0aGUgZHluYW1pYywgdGhlIGRldGVybWluaXN0aWMgYW5kIHRoZSBub24tZGV0ZXJtaW5pc3RpYywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBpbiBob3cgd2UgbW9kZWwgYW5kIGludGVyYWN0IHdpdGggdGhlIHdvcmxkIGFyb3VuZCB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTcsIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjM1LjUxNzM3MjUwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NzIwNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2EtekEtWjAtOV9dKyApK1xcXFwqP3BrdGdlbl9bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDgwPXN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy00ODItXFxubmV0L2NvcmUvcGt0Z2VuLmM6NDgzOnN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIHN0cnVjdCBwa3RnZW5fZGV2ICppKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0ODQ6c3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0ODU6c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxubmV0L2NvcmUvcGt0Z2VuLmMtNDg2LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0ODc6c3RhdGljIGludCBwa3RnZW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQ4ODpzdGF0aWMgdm9pZCBwa3RnZW5fcnVuX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbik7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg5OnN0YXRpYyB2b2lkIHBrdGdlbl9yZXNldF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQ5MDpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTQ5MS1cXG5uZXQvY29yZS9wa3RnZW4uYzo0OTI6c3RhdGljIHZvaWQgcGt0Z2VuX3N0b3Aoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQ5MzpzdGF0aWMgdm9pZCBwa3RnZW5fY2xlYXJfY291bnRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTQ5NC1zdGF0aWMgdm9pZCBmaWxsX2ltaXhfZGlzdHJpYnV0aW9uKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KTtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTU1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTU2NS1cXG5uZXQvY29yZS9wa3RnZW4uYzo1NjY6c3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9wa3RnZW4uYy01Njcte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9OTEzPXN0YXRpYyBzc2l6ZV90IGdldF9sYWJlbHMoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTk1NS1cXG5uZXQvY29yZS9wa3RnZW4uYzo5NTY6c3RhdGljIF9fdTMyIHBrdGdlbl9yZWFkX2ZsYWcoY29uc3QgY2hhciAqZiwgYm9vbCAqZGlzYWJsZSlcXG5uZXQvY29yZS9wa3RnZW4uYy05NTcte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtOTg0LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjk4NTpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtOTg2LVxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCxcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4NzItXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTg3MzpzdGF0aWMgaW50IHBrdGdlbl9pZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4NzQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTg4NjpzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9wa3RnZW4uYy0xODg3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAxMi1cXG5uZXQvY29yZS9wa3RnZW4uYzoyMDEzOnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwMTQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjAyNz1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKl9fcGt0Z2VuX05OX3RocmVhZHMoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjA1Mi0gKi9cXG5uZXQvY29yZS9wa3RnZW4uYzoyMDUzOnN0YXRpYyB2b2lkIHBrdGdlbl9tYXJrX2RldmljZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDU0LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwODQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjA4NTpzdGF0aWMgdm9pZCBwa3RnZW5fY2hhbmdlX25hbWUoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIwODYte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjExNC1cXG5uZXQvY29yZS9wa3RnZW4uYzoyMTE1OnN0YXRpYyBpbnQgcGt0Z2VuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE2LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTQwLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjIxNDE6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwa3RnZW5fZGV2X2dldF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcXG5uZXQvY29yZS9wa3RnZW4uYy0yMTQyLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIxNjEtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjE2MjpzdGF0aWMgaW50IHBrdGdlbl9zZXR1cF9kZXYoY29uc3Qgc3RydWN0IHBrdGdlbl9uZXQgKnBuLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTIxNjMtXFx0XFx0XFx0ICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBjb25zdCBjaGFyICppZm5hbWUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTk4LSAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jOjIxOTk6c3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0yMjAwLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTI3MDA9c3RhdGljIHUzMiBwa3RnZW5fZHN0X21ldHJpY3NbUlRBWF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI3MDQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjcwNTpzdGF0aWMgaW50IHBrdGdlbl9vdXRwdXRfaXBzZWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjcwNi17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yODIwPXN0YXRpYyBpbmxpbmUgX19iZTE2IGJ1aWxkX3RjaSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBjZmksXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yODI1LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjI4MjY6c3RhdGljIHZvaWQgcGt0Z2VuX2ZpbmFsaXplX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9wa3RnZW4uYy0yODI3LVxcdFxcdFxcdFxcdGludCBkYXRhbGVuKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjkwNS1cXG5uZXQvY29yZS9wa3RnZW4uYzoyOTA2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MDctXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zMTkxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTk5LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMyMDA6c3RhdGljIHZvaWQgcGt0Z2VuX2NsZWFyX2NvdW50ZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMyMDEte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzIxMC1cXG5uZXQvY29yZS9wa3RnZW4uYzozMjExOnN0YXRpYyB2b2lkIHBrdGdlbl9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzIxMi17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMjQzLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMyNDQ6c3RhdGljIHZvaWQgcGt0Z2VuX2hhbmRsZV9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIHUzMiBmbGFncylcXG5uZXQvY29yZS9wa3RnZW4uYy0zMjQ1LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMyNTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzI1NjpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzI1Ny17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zMjYzPXN0YXRpYyBpbnQgdGhyZWFkX2lzX3J1bm5pbmcoY29uc3Qgc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMjc2LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMyNzc6c3RhdGljIGludCBwa3RnZW5fd2FpdF90aHJlYWRfcnVuKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMyNzgte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzI5Ni1cXG5uZXQvY29yZS9wa3RnZW4uYzozMjk3OnN0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfYWxsX3RocmVhZHNfcnVuKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcXG5uZXQvY29yZS9wa3RnZW4uYy0zMjk4LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMjItXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzMyMzpzdGF0aWMgdm9pZCBwa3RnZW5fcnVuX2FsbF90aHJlYWRzKHN0cnVjdCBwa3RnZW5fbmV0ICpwbilcXG5uZXQvY29yZS9wa3RnZW4uYy0zMzI0LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMzQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzMzNTpzdGF0aWMgdm9pZCBwa3RnZW5fcmVzZXRfYWxsX3RocmVhZHMoc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzMzYte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzM0Nz1zdGF0aWMgdm9pZCBzaG93X3Jlc3VsdHMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBucl9mcmFncylcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTMzODgtLyogU2V0IHN0b3BwZWQtYXQgdGltZXIsIHJlbW92ZSBmcm9tIHJ1bm5pbmcgbGlzdCwgZG8gY291bnRlcnMgXFx1MDAyNiBzdGF0aXN0aWNzICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzM4OTpzdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0zMzkwLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTM0MDk9c3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpuZXh0X3RvX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM0MjYtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQyNzpzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcXG5uZXQvY29yZS9wa3RnZW4uYy0zNDI4LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM0NDUtICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQ0NjpzdGF0aWMgdm9pZCBwa3RnZW5fcmVtX29uZV9pZihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdClcXG5uZXQvY29yZS9wa3RnZW4uYy0zNDQ3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM0NjctXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzQ2ODpzdGF0aWMgdm9pZCBwa3RnZW5fcmVtX2FsbF9pZnMoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ2OS17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNDg2LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM0ODc6c3RhdGljIHZvaWQgcGt0Z2VuX3JlbV90aHJlYWQoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ4OC17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNDkyLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM0OTM6c3RhdGljIHZvaWQgcGt0Z2VuX3Jlc2NoZWQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzQ5NC17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNTAwLVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM1MDE6c3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTAyLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM1MTYtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzUxNzpzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTE4LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3MDUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzcwNjpzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfd29ya2VyKHZvaWQgKmFyZylcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzA3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3NzUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mzc3NjpzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zNzc3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzgwMD1zdGF0aWMgaW50IGFkZF9kZXZfdG9fdGhyZWFkKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzgzMC1cXG5uZXQvY29yZS9wa3RnZW4uYzozODMxOnN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcXG5uZXQvY29yZS9wa3RnZW4uYy0zODMyLXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MTgtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzkxOTpzdGF0aWMgaW50IF9fbmV0X2luaXQgcGt0Z2VuX2NyZWF0ZV90aHJlYWQoaW50IGNwdSwgc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM5MjAte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9Mzk3Mj1zdGF0aWMgdm9pZCBfcmVtX2Rldl9mcm9tX2lmX2xpc3Qoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zOTg3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM5ODg6c3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcXG5uZXQvY29yZS9wa3RnZW4uYy0zOTg5LVxcdFxcdFxcdFxcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NTozNS42NzYxMDEwNzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYxNDUzOTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZydzIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIHRoZSBidWcncyBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBoaXQgdGhpcyBjb2RlLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgLiBUaG9zZSBpbiB0dXJuIGFyZSBjYWxsZWQgYnkgYHBrdGdlbl9hZGRfZGV2aWNlYCB2aWEgYHBrdGdlbl90aHJlYWRfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYHByb2Nfd3JpdGVgIGZvciBgcGt0Z2VuX3RocmVhZF9wcm9jX29wc2AsIGFuZCBhbHNvIHZpYSBgYWRkX2Rldl90b190aHJlYWRgLiBgcGt0Z2VuX21hcmtfZGV2aWNlYCBpcyBjYWxsZWQgYnkgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLCB3aGljaCBpcyBhIG5vdGlmaWVyLiBTbywgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBraWNrIG9mZiB0aGlzIHdob2xlIHNlcXVlbmNlLCBhcmUgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAuXG5cbk5vdywgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIEkgd2FudCB0byBrZWVwIGluIG1pbmQsIGJ1dCBpdCAqaXMqIGFuIEFQSSBlbnRyeSBwb2ludCBiZWNhdXNlIGl0J3MgaGFuZGxpbmcgcHJvY2ZzIHdyaXRlcy4gVGhhdCBtYWtlcyBpdCBhIGRlY2VudCBjYW5kaWRhdGUgZm9yIG15IGBGb2N1c1N5bWJvbHNgIGlmIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgdGVzdCB0aGUgcHJvY2ZzIHdyaXRlIHBhdGguIExldCdzIHNlZSBpZiBpdCdzIGlubGluZWQuIE5vcGUsIGl0J3MgYXNzaWduZWQgdG8gYSBzdHJ1Y3QuIE9rYXksIHNhbWUgcXVlc3Rpb24gZm9yIGBwa3RnZW5fZGV2aWNlX2V2ZW50YC4gSXQncyBhbHNvIGFzc2lnbmVkIHRvIGEgc3RydWN0LCBzbyBpdCdzIG5vdCBpbmxpbmVkIGVpdGhlci4gSSB3aWxsIGluY2x1ZGUgdGhlc2UgaW4gbXkgRm9jdXNTeW1ib2xzLlxuXG5XaGF0IGFib3V0IHRob3NlIGhlbHBlciBmdW5jdGlvbnM/IEkgc2hvdWxkIGNoZWNrIGlmIGBwa3RnZW5fYWRkX2RldmljZWAgaXMgaW5saW5lZC4gSXQncyBzdGF0aWMsIGJ1dCBpdCdzIHByZXR0eSBoZWZ0eSwgc28gcHJvYmFibHkgbm90LiBBY3R1YWxseSwgSSB3aWxsIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGBwa3RnZW5fYWRkX2RldmljZWAgYW5kIGBwa3RnZW5fbWFya19kZXZpY2VgIGFzIHdlbGwuIE9oLCB3YWl0LCBgcGt0Z2VuX2FkZF9kZXZpY2VgIGlzIHN0YXRpYyB0b28uXG5cblNvIHRvIHJlY2FwOiBJJ2xsIGZvY3VzIG9uIGBwa3RnZW5fdGhyZWFkX3dyaXRlYCBhbmQgYHBrdGdlbl9kZXZpY2VfZXZlbnRgLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgZ3VpZGFuY2UgaGVyZS4gVGhlIGluc3RydWN0aW9uIGlzIHRvIHByZWZlciAqbm9uLXN0YXRpYywgbm9uLWlubGluZWQqIEFQSSBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQWx0aG91Z2ggYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgKmFyZSogc3RhdGljLCB0aGV5IGFyZSBBUEkgZW50cnlwb2ludHMgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSAqYXJlKiBleHBsaWNpdGx5IHVzZWQgdmlhIHRoZWlyIGFkZHJlc3NlcywgbWVhbmluZyB0aGUgY29tcGlsZXIgKmNhbm5vdCogaW5saW5lIHRoZW0uIFNpbmNlIHRoZSBwcm9tcHQgZG9lcyBub3QgZGlzcXVhbGlmeSBzdGF0aWMgQVBJIGVudHJ5IHBvaW50cywgSSB3aWxsIGtlZXAgdGhlbS4gTm93LCBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBwa3RnZW4uY2A/IFRoYXQncyB0aGUgbmV4dCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTYsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDU6NDQuMjkwNjQzNzE3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE2MjIyMzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rIFxcXFwqKnBrdGdlbl9bYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjQ0LjQxMjI3ODA2M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NDIyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBzb21lIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGhlcmUuIFdlIG5lZWQgdG8gZm9jdXMgb24gYXNwZWN0cyBvZiB0aGUgY29kZSB0aGF0IGFyZSBpbmhlcmVudGx5IGR5bmFtaWMsIHRoYXQgY2hhbmdlIGJhc2VkIG9uIGlucHV0LCBzdGF0ZSwgb3Igc29tZSBleHRlcm5hbCBmYWN0b3IuIFN0YXRpYyBtZXRob2RzIGFuZCBmdW5jdGlvbnMgYXJlIHByZWRpY3RhYmxlLCB0aGV5J3JlIGRlZmluZWQgYnkgdGhlIHR5cGUuIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBpbnRlcmVzdGluZyBzdHVmZiwgdGhlIHBsYWNlcyB3aGVyZSBiZWhhdmlvciBpcyB2YXJpYWJsZS4gV2hlcmUgaXMgdGhlIGNvcmUgb2YgdGhlIHN0YXRlIHRyYW5zaXRpb24/IFdoZXJlIGFyZSB0aGUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzPyBXaGF0J3MgdGhlIGNvbnRleHQ/IFdlIGFyZSBsb29raW5nIGZvciB0aGUgZWRnZSBjYXNlcywgYW5kIGFyZWFzIHRoYXQgcHJvdmlkZSBmbGV4aWJpbGl0eSBpbiB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjQ3LjkyMDcwNTQyNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczMDY4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz01MDA9c3RhdGljIGludCBkZWJ1ZyAgX19yZWFkX21vc3RseTtcXG5uZXQvY29yZS9wa3RnZW4uYy01MDEtXFxubmV0L2NvcmUvcGt0Z2VuLmM6NTAyOnN0YXRpYyBERUZJTkVfTVVURVgocGt0Z2VuX3RocmVhZF9sb2NrKTtcXG5uZXQvY29yZS9wa3RnZW4uYy01MDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ1OjQ4LjE5Mzc3OTY3NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEyNzAxOTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIG1vZHVsZSBkZXZlbG9wbWVudCBhbmQgbmV0d29yayBwcm9ncmFtbWluZzpcblxuKipNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIENsZWFudXAgLSBXaGF0IHRvIEV4cGVjdCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBwa3RnZW4uY2AuLi4gSXQncyBhIG1vZHVsZSwgd2hpY2ggbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSBsb2FkZWQgaW50byB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRoYXQgdGhpcyBmaWxlIG1vc3QgbGlrZWx5IHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAuIFNwZWNpZmljYWxseSwgSSdkIGV4cGVjdCB0byBzZWUgdGhlIHN0YW5kYXJkIGBpbml0X21vZHVsZWAgYW5kIGBjbGVhbnVwX21vZHVsZWAgZnVuY3Rpb25zLiBUaG91Z2gsIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIGEgY3VzdG9tIG5hbWluZyBzY2hlbWUsIHNvIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBgcGdfaW5pdGAgYW5kIGBwZ19jbGVhbnVwYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCwgYXMgYSBnZW5lcmFsIHJ1bGUsIGEgbW9kdWxlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFuZCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIGxvYWRpbmcuIFNvLCB0aGF0J3Mgd2hhdCBJJ20gYW50aWNpcGF0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjI5LjMyMDgwMjE1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDU0ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTQxMTU9c3RhdGljIHZvaWQgX19leGl0IHBnX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjEtXFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMjptb2R1bGVfaW5pdChwZ19pbml0KTtcXG5uZXQvY29yZS9wa3RnZW4uYy00MTIzLW1vZHVsZV9leGl0KHBnX2NsZWFudXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NjoyOS40OTM4Njk5ODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg1MTEwNTYxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbnMgXHUwMDI2IEVudHJ5IFBvaW50czogQSBRdWljayBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBhcmNoaXRlY3R1cmUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBNb3N0IGZ1bmN0aW9ucyBhcmUsIGVzc2VudGlhbGx5LCBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhpbmdzLiBUaGF0IHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgY29udGFpbmVkIHByb2Nlc3NpbmcgZmxvdy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgZXhlY3V0aW9uICpiZWdpbiogYW5kICplbmQqLCBhbmQgd2hhdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGFjdHVhbGx5IGdldCB0aGluZ3MgbW92aW5nPyBDb25zaWRlcmluZyB0aGUgc3RhdGljIG5hdHVyZSwgYHBnX2luaXRgIGFuZCBgcGdfY2xlYW51cGAgYXJlIHRoZSAqb2J2aW91cyogZXhjZXB0aW9ucyBhbmQgbWF5IGJlIHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcG9pbnRzLCBidXQgSSBoYXZlIGEgZmVlbGluZyB0aGUgcmVhbCBcIm1lYXRcIiBvZiB0aGUgcHJvY2VzcyBpcyBzb21ld2hlcmUgZWxzZS4gVGhlcmVmb3JlLCBgcGt0Z2VuX3RocmVhZF93cml0ZWAgYW5kIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBsb29rIGxpa2UgdGhlIG1vc3QgcHJvYmFibGUgY2FuZGlkYXRlcyBmb3IgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBkYXRhIHByb2Nlc3NpbmcgYW5kIGV4dGVybmFsIGlucHV0LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gLSBsZXQncyBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciB3cml0ZS1yZWxhdGVkIHByb2NmcyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gR290dGEgcnVsZSBvdXQgYW55IGxlc3Mgb2J2aW91cyBwb3NzaWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjczNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjQ4LjAwNDkzMDM2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDQyMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nfd3JpdGUuKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTYxLVxcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxubmV0L2NvcmUvcGt0Z2VuLmM6NTYyOlxcdC5wcm9jX3dyaXRlXFx0PSBwZ2N0cmxfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTYzLVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODEtXFx0LnByb2NfbHNlZWtcXHQ9IHNlcV9sc2VlayxcXG5uZXQvY29yZS9wa3RnZW4uYzoxODgyOlxcdC5wcm9jX3dyaXRlXFx0PSBwa3RnZW5faWZfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTg4My1cXHQucHJvY19yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTIwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fdGhyZWFkX3Byb2Nfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAyMS1cXHQucHJvY19sc2Vla1xcdD0gc2VxX2xzZWVrLFxcbm5ldC9jb3JlL3BrdGdlbi5jOjIwMjI6XFx0LnByb2Nfd3JpdGVcXHQ9IHBrdGdlbl90aHJlYWRfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjAyMy1cXHQucHJvY19yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6NDguMTM1OTc3NTc3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA0NTIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGlucG9pbnRpbmcgdGhlIFJvb3QgQ2F1c2UqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB0aGlzIGJ1ZywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGlzc3VlIHN0ZW1zIGZyb20gaW50ZXJhY3Rpb25zIHdpdGggdGhyZWFkcyBhbmQgZGV2aWNlIG1hbmFnZW1lbnQuIEkndmUgbmFycm93ZWQgaXQgZG93biB0byB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgcGdjdHJsX3dyaXRlYCwgYHBrdGdlbl9pZl93cml0ZWAsIGFuZCBgcGt0Z2VuX3RocmVhZF93cml0ZWAuIFRoZSB0cmlnZ2VyIHNlZW1zIHRvIGJlIHdoZW4gYSBkZXZpY2UgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEgdGhyZWFkIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBhY3Rpb25zIGJlaW5nIGV4ZWN1dGVkIGJ5IGBwa3RnZW5fdGhyZWFkX3dyaXRlYC4gTm93LCBgcGt0Z2VuX3RocmVhZF93cml0ZWAgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoYXQgZGV2aWNlIGFkZGl0aW9uL3JlbW92YWwuIE9uIHRoZSBvdGhlciBoYW5kLCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gaGFuZGxlZCBieSBgcGt0Z2VuX2RldmljZV9ldmVudGAgd2hpY2ggYWxzbyByZW1vdmVzIHRoZSBkZXZpY2UgZnJvbSB0aGUgdGhyZWFkLiBTbywgbG9naWNhbGx5LCBteSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBgcGt0Z2VuX3RocmVhZF93cml0ZWAgYW5kIGBwa3RnZW5fZGV2aWNlX2V2ZW50YC4gVGhvc2UgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoaXMgZGV2aWNlIG1hbmFnZW1lbnQgaXMgZXhwbGljaXRseSBoYW5kbGVkLCBhbmQgd2hlcmUgYSBidWcgY291bGQgcmVhciBpdHMgaGVhZC4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgcGt0Z2VuX3RocmVhZF93cml0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjU0LjI1NjQzMzk3M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NjAxMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTg4Nj1zdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTkxNjpzdGF0aWMgc3NpemVfdCBwa3RnZW5fdGhyZWFkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE5MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjAxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl90aHJlYWRfcHJvY19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIxLVxcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjAyMjpcXHQucHJvY193cml0ZVxcdD0gcGt0Z2VuX3RocmVhZF93cml0ZSxcXG5uZXQvY29yZS9wa3RnZW4uYy0yMDIzLVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0Njo1NC40NDEwNDA1ODZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0ODIwMDY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3VwcG9zZWQgdG8gc3BlYWsgYXMgYW4gZXhwZXJ0OlxuXG4qKkRvdWJsZS1DaGVja2luZyBgcGt0Z2VuX2RldmljZV9ldmVudGAqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgZGVidWdnaW5nLCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBmdW5jdGlvbi4gSXTigJlzIGZ1bmRhbWVudGFsLCB0aGUgYmVkcm9jayBvZiBob3cgd2UgaGFuZGxlIHBhY2tldCBnZW5lcmF0aW9uIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24uIEkgY2FuJ3QganVzdCBhc3N1bWUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbnVhbmNlcyBvZiB0aGUgcmVjZW50IGNoYW5nZXMuIEEgcXVpY2ssIGZvY3VzZWQgcmV2aWV3IGhlcmUgY2FuIHNhdmUgbWUgaG91cnMgZG93biB0aGUgbGluZS4gSSdtIHRoaW5raW5nIEknbGwgZm9jdXMgb24gdGhlc2Uga2V5IGFyZWFzIGR1cmluZyBteSBzY2FuOiBlbnN1cmluZyBjb3JyZWN0IGV2ZW50IHRyaWdnZXJpbmcgdW5kZXIgdmFyaW91cyBsb2FkIGNvbmRpdGlvbnMsIHZlcmlmeWluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwcm9wZXJseSBwb3B1bGF0ZWQsIGFuZCBlbnN1cmluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkcml2ZXJzIGlzIHByZWNpc2VseSB3aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSBkZXNpZ24uIEFueSB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0aGVyZSwgYW55IHN1YnRsZSBlZGdlIGNhc2VzLCBhbmQgdGhpcyB3aG9sZSB0aGluZyBjb3VsZCB1bnJhdmVsLiBUaW1lIGZvciBhIG1ldGljdWxvdXMgb25jZS1vdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjU4LjM4OTI0NDQ1MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NTgwNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlbl9kZXZpY2VfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDg1PXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTQ4Ni1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmlmbmFtZSwgYm9vbCBleGFjdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDg3OnN0YXRpYyBpbnQgcGt0Z2VuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTtcXG5uZXQvY29yZS9wa3RnZW4uYy00ODgtc3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyhzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9NTA0PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGt0Z2VuX25vdGlmaWVyX2Jsb2NrID0ge1xcbm5ldC9jb3JlL3BrdGdlbi5jOjUwNTpcXHQubm90aWZpZXJfY2FsbCA9IHBrdGdlbl9kZXZpY2VfZXZlbnQsXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTA2LX07XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yMDg1PXN0YXRpYyB2b2lkIHBrdGdlbl9jaGFuZ2VfbmFtZShjb25zdCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yMTE0LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjIxMTU6c3RhdGljIGludCBwa3RnZW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbm5ldC9jb3JlL3BrdGdlbi5jLTIxMTYtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6NTguNTA0ODMzNjM3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDQ1NzgyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgU3VtbWFyeSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYHBrdGdlbl90aHJlYWRfd3JpdGVgIGFuZCBgcGt0Z2VuX2RldmljZV9ldmVudGAgcmVhbGx5IGp1bXAgb3V0IGFzIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCdzIGJyZWFrIGl0IGRvd24gaW4gbXkgaGVhZDpcblxuKiAgICoqRnV6emluZyBWYWx1ZToqKiBEZWZpbml0ZWx5IHdvcnRoIHB1cnN1aW5nLlxuKiAgICoqVGhlIEJ1ZzoqKiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGludm9sdmVzIHRoZSBgcGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmtgIHdpdGhpbiB0aGUgYF9fcGt0Z2VuX05OX3RocmVhZHNgIGNvZGUuIFRoZSBmaXggZXh0ZW5kcyB0aGUgUkNVIHJlYWQgbG9jayB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGF0IHZhcmlhYmxlLiBUaGlzIHZ1bG5lcmFiaWxpdHkgY2FuIGJlIHRyaWdnZXJlZCB0aHJvdWdoIHdyaXRlcyB0byB0aGUgcGt0Z2VuIHRocmVhZCBmaWxlcyB2aWEgcHJvY2ZzIG9yIGR1cmluZyBuZXR3b3JrIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBldmVudHMuXG4qICAgKipGb2N1cyBBcmVhczoqKiBgcGt0Z2VuX3RocmVhZF93cml0ZWAgYW5kIGBwa3RnZW5fZGV2aWNlX2V2ZW50YCBhcmUgdGhlIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGNhbiBiZSB0cmlnZ2VyZWQuXG4qICAgKipDb25maWd1cmF0aW9uOioqIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBpcyBgTkVUX1BLVEdFTmAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IGBORVRfUEtUR0VOYCBpdHNlbGYgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgY29tcGxpY2F0ZSB0aGluZ3MuIEFoLCBpdCBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgYFBST0NfRlNgLiBUaG9zZSBhcmUgYmFzaWNhbGx5IGd1YXJhbnRlZWQgdG8gYmUgZW5hYmxlZCwgdGhleSdyZSBwcmV0dHkgdWJpcXVpdG91cy4gU28sIGBORVRfUEtUR0VOYCBpcyBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuQWxyaWdodCwgSSB0aGluayB0aGF0J3MgYSBzb2xpZCBhc3Nlc3NtZW50LiBMZXQncyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5OCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDc6MDUuNjA5NDE2MjM3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMzY5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX3RocmVhZF93cml0ZVwiLFxuICAgIFwicGt0Z2VuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlcmVtb3ZhbF9tYXJrYCBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgYnkgZXh0ZW5kaW5nIHRoZSBSQ1UgcmVhZCBsb2NrIHRvIGNvdmVyIHRoZSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwcm9jZnMgd3JpdGVzIHRvIHBrdGdlbiB0aHJlYWQgZmlsZXMgYW5kIG5ldGRldiB1bnJlZ2lzdHJhdGlvbiBldmVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBrdGdlbl90aHJlYWRfd3JpdGVcIixcbiAgICBcInBrdGdlbl9kZXZpY2VfZXZlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXFx1MDAzZXJlbW92YWxfbWFya2AgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIGJ5IGV4dGVuZGluZyB0aGUgUkNVIHJlYWQgbG9jayB0byBjb3ZlciB0aGUgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcHJvY2ZzIHdyaXRlcyB0byBwa3RnZW4gdGhyZWFkIGZpbGVzIGFuZCBuZXRkZXYgdW5yZWdpc3RyYXRpb24gZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NzowNS44MTE3OTY2OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1MTU0MTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ3OjA1LjgxMjcyMTEyOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5ODUwNjExMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBieSBleHBhbmRpbmcgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBpbiBgX19wa3RnZW5fTk5fdGhyZWFkc2AgdG8gY292ZXIgdGhlIGFjY2VzcyB0byBgcGt0X2Rldi1cXHUwMDNlcmVtb3ZhbF9tYXJrYCBhbmQgYHQtXFx1MDAzZWNvbnRyb2xgLiBQcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3b3VsZCBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYW4gUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUgKGBwa3RnZW5fZGV2YCkgd2hpY2ggY291bGQgdGhlbiBiZSBmcmVlZCBiZWZvcmUgdGhlIGNhbGxlciBhY2Nlc3NlZCBpdC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDMxMDUwMjUzYjZkNmVkNjUwNTg0NmUxZmIzM2M1YzkzYTdiZThkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjE3OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xuaW5kZXggN2Y4MWFlZDQ2NjcyMy4uNGZiMTg1MzU4OWIzMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTIwMzIsMTQgKzIwMzIsMTcgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpfX3BrdGdlbl9OTl90aHJlYWRzKGNvbnN0IHN0cnVjdCBwa3RnZW5fbmV0ICpwbixcbiBcdGJvb2wgZXhhY3QgPSAocmVtb3ZlID09IEZJTkQpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBcdTAwMjZwbi1cdTAwM2Vwa3RnZW5fdGhyZWFkcywgdGhfbGlzdCkge1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lLCBleGFjdCk7XG4gXHRcdGlmIChwa3RfZGV2KSB7XG4gXHRcdFx0aWYgKHJlbW92ZSkge1xuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VyZW1vdmFsX21hcmsgPSAxO1xuIFx0XHRcdFx0dC1cdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO1xuIFx0XHRcdH1cbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKHBrdF9kZXYpXG4rXHRcdFx0YnJlYWs7XG4gXHR9XG4gXHRyZXR1cm4gcGt0X2RldjtcbiB9XG5AQCAtMzc3Niw3ICszNzc5LDYgQEAgc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsXG4gXHRzdHJ1Y3QgcGt0Z2VuX2RldiAqcCwgKnBrdF9kZXYgPSBOVUxMO1xuIFx0c2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dC1cdTAwM2VpZl9saXN0LCBsaXN0KVxuIFx0XHRpZiAoc3RybmNtcChwLVx1MDAzZW9kZXZuYW1lLCBpZm5hbWUsIGxlbikgPT0gMCkge1xuIFx0XHRcdGlmIChwLVx1MDAzZW9kZXZuYW1lW2xlbl0pIHtcbkBAIC0zNzg3LDcgKzM3ODksNiBAQCBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRwcl9kZWJ1ZyhcImZpbmRfZGV2KCVzKSByZXR1cm5pbmcgJXBcXG5cIiwgaWZuYW1lLCBwa3RfZGV2KTtcbiBcdHJldHVybiBwa3RfZGV2O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ3OjA1LjgxMjcyMjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg1MDU3OTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSQ1UgTG9ja2luZyBGaXggaW4gcGt0Z2VuLmMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9wa3RnZW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHdlJ3JlIGhhbmRsaW5nIFJDVSBsb2NraW5nIHdpdGggYHBrdGdlbl9maW5kX2RldmAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscy4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIGV4cGFuZCB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5QcmV2aW91c2x5LCBgcGt0Z2VuX2ZpbmRfZGV2YCB3YXMgbWFuYWdpbmcgaXRzIG93biBSQ1UgbG9ja3MuIEl0IHdvdWxkIGZpbmQgYSBgcGt0Z2VuX2RldmAgKHdoaWNoLCBvZiBjb3Vyc2UsIHJlc2lkZXMgaW4gYW4gUkNVIGxpc3QpLCBhbmQgdGhlbiBkcm9wIHRoZSBsb2NrIGJlZm9yZSByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoYXQgc3RydWN0dXJlLiAgVGhpcyBzZWVtcyBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZSBjYWxsZXIgd2FzIHRoZW4gcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlIHNldHRpbmcgYHBrdF9kZXYtXHUwMDNlcmVtb3ZhbF9tYXJrID0gMWAgYW5kIG1vZGlmeWluZyBgdC1cdTAwM2Vjb250cm9sIHw9IFRfUkVNREVWO2AsICphZnRlciogdGhlIGluaXRpYWwgYHBrdGdlbl9maW5kX2RldmAgY2FsbC4gVGhlIHByb2JsZW0gaXMsIHRoYXQgYHBrdGdlbl9kZXZgIGNvdWxkIGJlIGZyZWVkIGJlZm9yZSB0aG9zZSBtb2RpZmljYXRpb25zIHdlcmUgZG9uZSwgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGljaCBLQVNBTiB3b3VsZCB0aGFua2Z1bGx5IGNhdGNoLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBtb3ZpbmcgdGhlIFJDVSBsb2NraW5nIHRvIHRoZSAqY2FsbGVyKiBvZiBgcGt0Z2VuX2ZpbmRfZGV2YC4gTm93LCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBsb2NrIHdoaWxlIGFjY2Vzc2luZyB0aGUgcmV0dXJuZWQgYHBrdGdlbl9kZXZgLCBlbnN1cmluZyBpdCByZW1haW5zIHZhbGlkLiAgRXNzZW50aWFsbHksIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aG9zZSBvcGVyYXRpb25zLlxuXG5TbywgaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgLCB0aGUgcGF0Y2ggYWRkcyB0aGUgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBgcGt0Z2VuX2ZpbmRfZGV2KClgIGNhbGwuIEFuZCB3aXRoaW4gYHBrdGdlbl9maW5kX2RldmAsIHRoZSBsb2NrL3VubG9jayBjYWxscyBhcmUgcmVtb3ZlZC5cblxuTXkgY29uY2VybiBub3cgaXMsIGlzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBhbnkgaW5mb3JtYXRpb24gbGVha3MgYXMgYSByZXN1bHQ/IE5vLCB0aGlzIGlzIGp1c3QgUkNVIGxvY2tpbmcuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgdGhlIGNvcHlpbmcgb2YgYW55dGhpbmcgbmV3IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIGlzIGp1c3QgYSBsb2NraW5nIGFkanVzdG1lbnQgYW5kIHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGRhdGEgbGVha3MsIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIEknbSBtYXJraW5nIGl0IGFzIGBOZWVkc0tNU0FOPWZhbHNlYC4gIFRoaXMgaXMgYSBjbGVhbiBmaXggZm9yIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgbm90aGluZyBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA4LCJPdXRwdXRUb2tlbnMiOjE4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ3OjE1LjY2MzMwNzAyOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gYnkgZXhwYW5kaW5nIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gaW4gYF9fcGt0Z2VuX05OX3RocmVhZHNgIHRvIGNvdmVyIHRoZSBhY2Nlc3MgdG8gYHBrdF9kZXYtXFx1MDAzZXJlbW92YWxfbWFya2AgYW5kIGB0LVxcdTAwM2Vjb250cm9sYC4gUHJldmlvdXNseSwgYHBrdGdlbl9maW5kX2RldmAgd291bGQgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5LCByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGFuIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlIChgcGt0Z2VuX2RldmApIHdoaWNoIGNvdWxkIHRoZW4gYmUgZnJlZWQgYmVmb3JlIHRoZSBjYWxsZXIgYWNjZXNzZWQgaXQuIFRoaXMgaXMgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGJ5IGV4cGFuZGluZyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGluIGBfX3BrdGdlbl9OTl90aHJlYWRzYCB0byBjb3ZlciB0aGUgYWNjZXNzIHRvIGBwa3RfZGV2LVxcdTAwM2VyZW1vdmFsX21hcmtgIGFuZCBgdC1cXHUwMDNlY29udHJvbGAuIFByZXZpb3VzbHksIGBwa3RnZW5fZmluZF9kZXZgIHdvdWxkIGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIFJDVSByZWFkIGxvY2sgaW50ZXJuYWxseSwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBhbiBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZSAoYHBrdGdlbl9kZXZgKSB3aGljaCBjb3VsZCB0aGVuIGJlIGZyZWVkIGJlZm9yZSB0aGUgY2FsbGVyIGFjY2Vzc2VkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[1] Phase: Succeeded StartedAt: 2026-08-24 18:47:27 +0000 UTC FinishedAt: 2026-08-24 18:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 18:47:27 +0000 UTC FinishedAt: 2026-08-24 18:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2] Phase: Succeeded StartedAt: 2026-08-24 18:47:27 +0000 UTC FinishedAt: 2026-08-24 22:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 18:47:27 +0000 UTC FinishedAt: 2026-08-24 22:52:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 18:47:27 +0000 UTC FinishedAt: 2026-08-24 18:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 18:47:27 +0000 UTC FinishedAt: 2026-08-24 18:47:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjj9cf/series-workflowjj9cf-convert-artifact-824043773/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 18:47:37 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 18:47:37 +0000 UTC FinishedAt: 2026-08-24 19:16: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:*a43dccaf-5f2a-4d87-a86a-267df8333087,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-workflowjj9cf/series-workflowjj9cf-convert-artifact-824043773/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": "aa7929ee-18f4-4201-91d3-3dd3cd3be1d3", "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-workflowjj9cf/series-workflowjj9cf-build-action-1545785907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 18:47:37 +0000 UTC FinishedAt: 2026-08-24 19:16:35 +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:*a43dccaf-5f2a-4d87-a86a-267df8333087,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-workflowjj9cf/series-workflowjj9cf-convert-artifact-824043773/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": "aa7929ee-18f4-4201-91d3-3dd3cd3be1d3", "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-workflowjj9cf/series-workflowjj9cf-build-action-1545785907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjj9cf/series-workflowjj9cf-convert-artifact-4264802648/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 19:16:55 +0000 UTC FinishedAt: 2026-08-24 19:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 19:16:55 +0000 UTC FinishedAt: 2026-08-24 19:18:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa7929ee-18f4-4201-91d3-3dd3cd3be1d3,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-workflowjj9cf/series-workflowjj9cf-build-action-1545785907/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-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 19:18:54 +0000 UTC FinishedAt: 2026-08-24 19:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 19:18:54 +0000 UTC FinishedAt: 2026-08-24 19:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 19:18:54 +0000 UTC FinishedAt: 2026-08-24 19:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 19:18:54 +0000 UTC FinishedAt: 2026-08-24 19:46:27 +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:*a43dccaf-5f2a-4d87-a86a-267df8333087,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-workflowjj9cf/series-workflowjj9cf-convert-artifact-4264802648/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": "d35b05db-8ca3-43cb-a3ea-1ccd33aaf1bd", "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-workflowjj9cf/series-workflowjj9cf-build-action-1725915844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 19:18:54 +0000 UTC FinishedAt: 2026-08-24 19:46:05 +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:*a43dccaf-5f2a-4d87-a86a-267df8333087,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-workflowjj9cf/series-workflowjj9cf-convert-artifact-4264802648/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": "d35b05db-8ca3-43cb-a3ea-1ccd33aaf1bd", "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-workflowjj9cf/series-workflowjj9cf-build-action-1725915844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 19:46:27 +0000 UTC FinishedAt: 2026-08-24 19:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 19:46:27 +0000 UTC FinishedAt: 2026-08-24 19:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 19:46:27 +0000 UTC FinishedAt: 2026-08-24 19:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 19:46:27 +0000 UTC FinishedAt: 2026-08-24 19:48:42 +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:*d35b05db-8ca3-43cb-a3ea-1ccd33aaf1bd,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-workflowjj9cf/series-workflowjj9cf-build-action-1725915844/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-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 22:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 22:52:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*aa7929ee-18f4-4201-91d3-3dd3cd3be1d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d35b05db-8ca3-43cb-a3ea-1ccd33aaf1bd,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-workflowjj9cf/series-workflowjj9cf-build-action-1545785907/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-workflowjj9cf/series-workflowjj9cf-build-action-1725915844/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 19:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 19:48:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjj9cf/series-workflowjj9cf-convert-artifact-3777518897/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 19:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 19:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 19:48:52 +0000 UTC FinishedAt: 2026-08-24 19:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 19:49:02 +0000 UTC FinishedAt: 2026-08-24 22:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjj9cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_thread_write","pktgen_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"900e9a22-d62a-41cf-a145-d0e01d7cebbf","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 19:49:02 +0000 UTC FinishedAt: 2026-08-24 22:52:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa7929ee-18f4-4201-91d3-3dd3cd3be1d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d35b05db-8ca3-43cb-a3ea-1ccd33aaf1bd,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-workflowjj9cf/series-workflowjj9cf-build-action-1545785907/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-workflowjj9cf/series-workflowjj9cf-build-action-1725915844/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-workflowjj9cf/series-workflowjj9cf-convert-artifact-3777518897/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,}