Name: series-workflow4j6b8 Phase: Succeeded StartedAt: 2026-09-06 15:05:51 +0000 UTC FinishedAt: 2026-09-06 16:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[0] Phase: Succeeded StartedAt: 2026-09-06 15:05:51 +0000 UTC FinishedAt: 2026-09-06 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 15:05:51 +0000 UTC FinishedAt: 2026-09-06 15:08:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a500db7819c50db59e55f1b4fa1c3baa5a2616f3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO", "VIRTIO_PCI", "VIRTIO_VDPA", "VDPA", "VIRTIO_INPUT", "REMOTEPROC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a500db7819c50db59e55f1b4fa1c3baa5a2616f3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO", "VIRTIO_PCI", "VIRTIO_VDPA", "VDPA", "VIRTIO_INPUT", "REMOTEPROC" ], "series_id": "a9633763-a726-40d8-ac72-fa45e0cb3c28" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "virtio_reset_device", "virtio_device_shutdown", "virtinput_recv_events", "virtio_vdpa_virtqueue_cb", "virtio_vdpa_synchronize_cbs", "rproc_vq_interrupt", "rproc_virtio_synchronize_cbs", "rproc_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VklSVElPX0lOUFVUJiMzNDssCiAgICAmIzM0O1JFTU9URVBST0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fcmVzZXRfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZpcnRpb19kZXZpY2Vfc2h1dGRvd24mIzM0OywKICAgICYjMzQ7dmlydGlucHV0X3JlY3ZfZXZlbnRzJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYiYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfdnFfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3Jwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cblxuS2V5IHBvaW50cyByZWdhcmRpbmcgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTpcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCB0b3VjaCB1c2VyLWNvcHkgYm91bmRhcmllcyBvciBuZXRsaW5rL2lvY3RsIG91dHB1dCBidWZmZXJzLCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgYWxsIG5ldyBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAoYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS5cblxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG5pbmRleCA3NDI1YTg1NDgxNDFhLi5iYWNhNmIwOWU5YWMyIDEwMDY0NFxuLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gICpcbiAgKiBCYXNlZCBvbiBWaXJ0aW8gTU1JTyBkcml2ZXIgYnkgUGF3ZWwgTW9sbCwgY29weXJpZ2h0IDIwMTEtMjAxNCwgQVJNIEx0ZC5cbiAgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuQEAgLTg2OSw2ICYjNDM7ODcwLDE0IEBAIHN0YXRpYyB2b2lkIHZ1X3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0dnVfZGV2LVx1MDAzZXN0YXR1cyA9IDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB2dV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmlydGlvX3VtbF9kZXZpY2UgKnZ1X2RldiA9IHRvX3ZpcnRpb191bWxfZGV2aWNlKHZkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodnVfZGV2LVx1MDAzZWlycSBcdTAwM2U9IDApXG4mIzQzO1x0XHRzeW5jaHJvbml6ZV9pcnEodnVfZGV2LVx1MDAzZWlycSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cdTAwM2Vwcml2O1xuQEAgLTExMjEsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb191bWxfY29uZmlnX29wcyA9IHtcbiBcdC5yZXNldCA9IHZ1X3Jlc2V0LFxuIFx0LmZpbmRfdnFzID0gdnVfZmluZF92cXMsXG4gXHQuZGVsX3ZxcyA9IHZ1X2RlbF92cXMsXG4mIzQzO1x0LnN5bmNocm9uaXplX2NicyA9IHZ1X3N5bmNocm9uaXplX2NicyxcbiBcdC5nZXRfZmVhdHVyZXMgPSB2dV9nZXRfZmVhdHVyZXMsXG4gXHQuZmluYWxpemVfZmVhdHVyZXMgPSB2dV9maW5hbGl6ZV9mZWF0dXJlcyxcbiBcdC5idXNfbmFtZSA9IHZ1X2J1c19uYW1lLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jXG5pbmRleCAzYzY0MDg1ODEzNzNiLi5jMjYwZTNhMTU0NGVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuQEAgLTExMzUsNiAmIzQzOzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHRtX3ZkZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XG4mIzQzO1x0c3RydWN0IG1seGJmX3RtZmlmbyAqZmlmbyA9IHRtX3ZkZXYtXHUwMDNldnJpbmdzWzBdLmZpZm87XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmaWZvLVx1MDAzZXNwaW5fbG9jayk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXG4gc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcbkBAIC0xMTc5LDYgJiM0MzsxMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBtbHhiZl90bWZpZm9fdmlydGlvX2NvbmZpZ19vcHMgPSB7XG4gXHQuZmluZF92cXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2ZpbmRfdnFzLFxuIFx0LmRlbF92cXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2RlbF92cXMsXG4gXHQucmVzZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0LFxuJiM0MztcdC5zeW5jaHJvbml6ZV9jYnMgPSBtbHhiZl90bWZpZm9fdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0ID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG5pbmRleCAxZWQ0MDY3MTQ4NDkxLi4xYjEzOWQyNWFiMmJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNcbkBAIC0yNDEwLDYgJiM0MzsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCYjMzQ7cmVsZWFzaW5nICVzXFxuXCYjMzQ7LCBycHJvYy1cdTAwM2VuYW1lKTtcbiBcbiYjNDM7XHRjbGVhbnVwX3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuIFx0aWRyX2Rlc3Ryb3koXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzKTtcbiBcbiBcdGlmIChycHJvYy1cdTAwM2VpbmRleCBcdTAwM2U9IDApXG5AQCAtMjUwNyw2ICYjNDM7MjUwOCwxMSBAQCBzdHJ1Y3QgcnByb2MgKnJwcm9jX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmICghcnByb2MpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGlmIChpbml0X3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpKSB7XG4mIzQzO1x0XHRrZnJlZShycHJvYyk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnByb2MtXHUwMDNlcHJpdiA9IFx1MDAyNnJwcm9jWzFdO1xuIFx0cnByb2MtXHUwMDNlYXV0b19ib290ID0gdHJ1ZTtcbiBcdHJwcm9jLVx1MDAzZWVsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTtcbkBAIC0yNTcxLDYgJiM0MzsyNTc3LDggQEAgRVhQT1JUX1NZTUJPTChycHJvY19hbGxvYyk7XG4gICpcbiAgKiBJZiBubyBvbmUgaG9sZHMgYW55IHJlZmVyZW5jZSB0byBycHJvYyBhbnltb3JlLCB0aGVuIGl0cyByZWZjb3VudCB3b3VsZFxuICAqIG5vdyBkcm9wIHRvIHplcm8sIGFuZCBpdCB3b3VsZCBiZSBmcmVlZC5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxuICAqL1xuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuIHtcbkBAIC0yNTg2LDYgJiM0MzsyNTk0LDggQEAgRVhQT1JUX1NZTUJPTChycHJvY19mcmVlKTtcbiAgKlxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXG4gICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuXG4gICovXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3JjdS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmVtb3RlcHJvY19pbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtODksMTQgJiM0Mzs5MCwxOSBAQCBzdGF0aWMgYm9vbCBycHJvY192aXJ0aW9fbm90aWZ5KHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIGlycXJldHVybl90IHJwcm9jX3ZxX2ludGVycnVwdChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBpbnQgbm90aWZ5aWQpXG4ge1xuIFx0c3RydWN0IHJwcm9jX3ZyaW5nICpydnJpbmc7XG4mIzQzO1x0aW50IHNyY3VfaWR4O1xuJiM0MztcdGlycXJldHVybl90IHJldDtcbiYjNDM7XG4mIzQzO1x0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KTtcbiBcbiBcdGRldl9kYmcoXHUwMDI2cnByb2MtXHUwMDNlZGV2LCBcJiMzNDt2cSBpbmRleCAlZCBpcyBpbnRlcnJ1cHRlZFxcblwmIzM0Oywgbm90aWZ5aWQpO1xuIFxuIFx0cnZyaW5nID0gaWRyX2ZpbmQoXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzLCBub3RpZnlpZCk7XG4tXHRpZiAoIXJ2cmluZyB8fCAhcnZyaW5nLVx1MDAzZXZxKVxuLVx0XHRyZXR1cm4gSVJRX05PTkU7XG4mIzQzO1x0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuJiM0MztcbiYjNDM7XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UsIHNyY3VfaWR4KTtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gXG5AQCAtMjQyLDYgJiM0MzsyNDgsMTMgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0ZGV2X2RiZyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgXCYjMzQ7cmVzZXQgIVxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJwcm9jICpycHJvYyA9IHZkZXZfdG9fcnByb2ModmRldik7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3NyY3UoXHUwMDI2cnByb2MtXHUwMDNldnFfc3JjdSk7XG4mIzQzO31cbiYjNDM7XG4gLyogcHJvdmlkZSB0aGUgdmRldiBmZWF0dXJlcyBhcyByZXRyaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUgKi9cbiBzdGF0aWMgdTY0IHJwcm9jX3ZpcnRpb19nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4ge1xuQEAgLTMzMCw2ICYjNDM7MzQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBycHJvY192aXJ0aW9fY29uZmlnX29wcyA9IHtcbiBcdC5maW5kX3Zxc1x0PSBycHJvY192aXJ0aW9fZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSBycHJvY192aXJ0aW9fZGVsX3ZxcyxcbiBcdC5yZXNldFx0XHQ9IHJwcm9jX3ZpcnRpb19yZXNldCxcbiYjNDM7XHQuc3luY2hyb25pemVfY2JzID0gcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzXHQ9IHJwcm9jX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXNcdD0gcnByb2NfdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0XHRcdD0gcnByb2NfdmlydGlvX2dldCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5pbmRleCBiYWI2Y2FkM2ZkNWNlLi41NTJkNzc5OTgwMTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5AQCAtMTA2Miw3ICYjNDM7MTA2Miw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0c3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiA9IHRvX3ZjX2RldmljZSh2ZGV2KTtcbiBcdHN0cnVjdCBhaXJxX2luZm8gKmluZm8gPSB2Y2Rldi1cdTAwM2VhaXJxX2luZm87XG4gXG4tXHRpZiAoaW5mbykge1xuJiM0MztcdGlmICh2Y2Rldi1cdTAwM2Vpc190aGluaW50IFx1MDAyNlx1MDAyNiBpbmZvKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgZGV2aWNlIHVzZXMgYWRhcHRlciBpbnRlcnJ1cHRzOiBzeW5jaHJvbml6ZSB3aXRoXG4gXHRcdCAqIHZyaW5nX2ludGVycnVwdCgpIGNhbGxlZCBieSB2aXJ0aW9fYWlycV9oYW5kbGVyKClcbkBAIC0xMjA0LDEzICYjNDM7MTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHRcdHZjZGV2LVx1MDAzZWVyciA9IC1FSU87XG4gXHR9XG4gXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XG4tI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuIFx0LypcbiBcdCAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlXG4gXHQgKiBkaXNhYmxlZCBoZXJlLlxuIFx0ICovXG4gXHRyZWFkX2xvY2soXHUwMDI2dmNkZXYtXHUwMDNlaXJxX2xvY2spO1xuLSNlbmRpZlxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSxcbiBcdFx0XHQgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7XG4gXHRcdC8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqL1xuQEAgLTEyMTksOSAmIzQzOzEyMTcsNyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHR2cSA9IHZpcnRpb19jY3dfdnFfYnlfaW5kKHZjZGV2LCBpKTtcbiBcdFx0dnJpbmdfaW50ZXJydXB0KDAsIHZxKTtcbiBcdH1cbi0jaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXG4gXHRyZWFkX3VubG9jayhcdTAwMjZ2Y2Rldi1cdTAwM2VpcnFfbG9jayk7XG4tI2VuZGlmXG4gXHRpZiAodGVzdF9iaXQoMCwgaW5kaWNhdG9yczIodmNkZXYpKSkge1xuIFx0XHR2aXJ0aW9fY29uZmlnX2NoYW5nZWQoXHUwMDI2dmNkZXYtXHUwMDNldmRldik7XG4gXHRcdGNsZWFyX2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcbmluZGV4IDc1YmI0ZmZlM2I4NzcuLmFkMWM1MGI4YTk0ZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcbkBAIC0yNjQsNiAmIzQzOzI2NCw3IEBAIHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuICNlbmRpZlxuIFxuIFx0ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VyZXNldChkZXYpO1xuJiM0MztcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XG4gXG5AQCAtNDI0LDYgJiM0Mzs0MjUsNyBAQCB2b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbiBcdCAqIFNvbWUgZGV2aWNlcyBnZXQgd2VkZ2VkIGlmIHRoaXMgaGFwcGVucywgc28gcmVzZXQgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90LlxuIFx0ICovXG4gXHRkZXYtXHUwMDNlY29uZmlnLVx1MDAzZXJlc2V0KGRldik7XG4mIzQzO1x0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3NodXRkb3duKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG5pbmRleCBkZWVjMjRlOGU2ODI4Li43YjY1NGFmMGE0MmNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG5AQCAtNDksOSAmIzQzOzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShldmVudC1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShldmVudC1cdTAwM2V2YWx1ZSkpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKCF2aS1cdTAwM2VyZWFkeSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR2aXJ0aW5wdXRfcXVldWVfZXZ0YnVmKHZpLCBldmVudCk7XG4gXHRcdH1cbi1cdFx0dmlydHF1ZXVlX2tpY2sodnEpO1xuJiM0MztcdFx0aWYgKHZpLVx1MDAzZXJlYWR5KVxuJiM0MztcdFx0XHR2aXJ0cXVldWVfa2ljayh2cSk7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMzUwLDggJiM0MzszNTMsOSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0dmktXHUwMDNlcmVhZHkgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXHUwMDNlaWRldik7XG4mIzQzO1x0LyogQ2FsbGJhY2tzIHVzZSB2aS1cdTAwM2VpZGV2LiAqL1xuIFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcbiYjNDM7XHRpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh2aS1cdTAwM2VpZGV2KTtcbiBcdHdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZpLVx1MDAzZXN0cykpICE9IE5VTEwpXG4gXHRcdGtmcmVlKGJ1Zik7XG4gXHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG5pbmRleCBkOWNiYjAyYjM1YTExLi44MTE1YWEzOWUwMWU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xuQEAgLTk4LDggJiM0Mzs5OCw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0LyogRmx1c2ggb3V0IHRoZSBzdGF0dXMgd3JpdGUsIGFuZCBmbHVzaCBpbiBkZXZpY2Ugd3JpdGVzLFxuIFx0ICogaW5jbHVkaW5nIE1TaS1YIGludGVycnVwdHMsIGlmIGFueS4gKi9cbiBcdHZwX2xlZ2FjeV9nZXRfc3RhdHVzKFx1MDAyNnZwX2Rldi1cdTAwM2VsZGV2KTtcbi1cdC8qIEZsdXNoIHBlbmRpbmcgVlEvY29uZmlndXJhdGlvbiBjYWxsYmFja3MuICovXG4tXHR2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdTE2IHZwX2NvbmZpZ192ZWN0b3Ioc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYsIHUxNiB2ZWN0b3IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmNcbmluZGV4IDZkOGFlMmE2YThjYWYuLmM5ZTIxMzE3YzUxYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG5AQCAtNTU5LDkgJiM0Mzs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdFx0bXNsZWVwKDEpO1xuIFxuIFx0dnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpO1xuLVxuLVx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cbi1cdHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiBzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlIHtcbiBcdHN0cnVjdCB2aXJ0aW9fZGV2aWNlIHZkZXY7XG4gXHRzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGE7XG4mIzQzO1x0cndsb2NrX3QgY2FsbGJhY2tfbG9jaztcbiBcdHU2NCBmZWF0dXJlcztcbiB9O1xuIFxuQEAgLTEyMyw4ICYjNDM7MTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlO1xuJiM0MztcdHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGlycXJldHVybl90IHJldDtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuJiM0MztcdHZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2cS1cdTAwM2V2ZGV2KTtcbiYjNDM7XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jaywgZmxhZ3MpO1xuJiM0MztcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4mIzQzO1x0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodmRldik7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrKTtcbiYjNDM7XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKlxuQEAgLTQzOSw2ICYjNDM7NDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0XHRcdD0gdmlydGlvX3ZkcGFfcmVzZXQsXG4gXHQuZmluZF92cXNcdD0gdmlydGlvX3ZkcGFfZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSB2aXJ0aW9fdmRwYV9kZWxfdnFzLFxuJiM0MztcdC5zeW5jaHJvbml6ZV9jYnMgPSB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMsXG4gXHQuZ2V0X2ZlYXR1cmVzXHQ9IHZpcnRpb192ZHBhX2dldF9mZWF0dXJlcyxcbiBcdC5maW5hbGl6ZV9mZWF0dXJlcyA9IHZpcnRpb192ZHBhX2ZpbmFsaXplX2ZlYXR1cmVzLFxuIFx0LmJ1c19uYW1lXHQ9IHZpcnRpb192ZHBhX2J1c19uYW1lLFxuQEAgLTQ3Miw2ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCB2aXJ0aW9fdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXG4gXHR2ZF9kZXYtXHUwMDNldmRldi5jb25maWcgPSBcdTAwMjZ2aXJ0aW9fdmRwYV9jb25maWdfb3BzO1xuIFx0dmRfZGV2LVx1MDAzZXZkZXYubWFwID0gdmRwYS1cdTAwM2VtYXA7XG4gXHR2ZF9kZXYtXHUwMDNldmRwYSA9IHZkcGE7XG4mIzQzO1x0cndsb2NrX2luaXQoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIFxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID0gb3BzLVx1MDAzZWdldF9kZXZpY2VfaWQodmRwYSk7XG4gXHRpZiAodmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID09IDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZpcnRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG5AQCAtMjMwLDYgJiM0MzsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHtcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xuICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZVxuICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHNcbiYjNDM7ICogQHZxX3NyY3U6IFNSQ1UgZG9tYWluIGZvciB2aXJ0cXVldWUgY2FsbGJhY2tzXG4gICogQGluZGV4OiBpbmRleCBvZiB0aGlzIHJwcm9jIGRldmljZVxuICAqIEBhdHRhY2hfd29yazogd29ya3F1ZXVlIGZvciBhdHRhY2hpbmcgcnByb2NcbiAgKiBAY3Jhc2hfaGFuZGxlcjogd29ya3F1ZXVlIGZvciBoYW5kbGluZyBhIGNyYXNoXG5AQCAtMjc2LDYgJiM0MzsyNzgsNyBAQCBzdHJ1Y3QgcnByb2Mge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBydmRldnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7XG4gXHRzdHJ1Y3QgaWRyIG5vdGlmeWlkcztcbiYjNDM7XHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcbiBcdGludCBpbmRleDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbkBAIC03MSw5ICYjNDM7NzEsOSBAQCBzdHJ1Y3QgdmlydHF1ZXVlX2luZm8ge1xuICAqXHRSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvciBzdGF0dXNcbiAgKiBAZGVsX3ZxczogZnJlZSB2aXJ0cXVldWVzIGZvdW5kIGJ5IGZpbmRfdnFzKCkuXG4gICogQHN5bmNocm9uaXplX2Niczogc3luY2hyb25pemUgd2l0aCB0aGUgdmlydHF1ZXVlIGNhbGxiYWNrcyAob3B0aW9uYWwpXG4tICogICAgICBUaGUgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGVcbi0gKiAgICAgIHF1ZXVlIGJlZm9yZSBpdCBhcmUgdmlzaWJsZSB0byB0aGUgdnJpbmdfaW50ZXJydXB0KCkgdGhhdCBpc1xuLSAqICAgICAgY2FsbGVkIGFmdGVyIGl0LlxuJiM0MzsgKiAgICAgIFdhaXQgZm9yIHJ1bm5pbmcgY2FsbGJhY2tzIHRvIGNvbXBsZXRlLiBNZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGVcbiYjNDM7ICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsc1xuJiM0MzsgKiAgICAgIHRoYXQgZm9sbG93IGl0LlxuICAqICAgICAgdmRldjogdGhlIHZpcnRpb19kZXZpY2VcbiAgKiBAZ2V0X2ZlYXR1cmVzOiBnZXQgdGhlIGFycmF5IG9mIGZlYXR1cmUgYml0cyBmb3IgdGhpcyBkZXZpY2UuXG4gICpcdHZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVElPJiMzNDssCiAgICAmIzM0O1ZJUlRJT19QQ0kmIzM0OywKICAgICYjMzQ7VklSVElPX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWSVJUSU9fSU5QVVQmIzM0OywKICAgICYjMzQ7UkVNT1RFUFJPQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb19yZXNldF9kZXZpY2UmIzM0OywKICAgICYjMzQ7dmlydGlvX2RldmljZV9zaHV0ZG93biYjMzQ7LAogICAgJiMzNDt2aXJ0aW5wdXRfcmVjdl9ldmVudHMmIzM0OywKICAgICYjMzQ7dmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICAgJiMzNDtycHJvY192cV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICAgJiMzNDtycHJvY19hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMKaW5kZXggNzQyNWE4NTQ4MTQxYS4uYmFjYTZiMDllOWFjMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogICoKICAqIEJhc2VkIG9uIFZpcnRpbyBNTUlPIGRyaXZlciBieSBQYXdlbCBNb2xsLCBjb3B5cmlnaHQgMjAxMS0yMDE0LCBBUk0gTHRkLgogICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CkBAIC04NjksNiAmIzQzOzg3MCwxNCBAQCBzdGF0aWMgdm9pZCB2dV9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAl2dV9kZXYtJmd0O3N0YXR1cyA9IDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB2dV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmlydGlvX3VtbF9kZXZpY2UgKnZ1X2RldiA9IHRvX3ZpcnRpb191bWxfZGV2aWNlKHZkZXYpOwomIzQzOwomIzQzOwlpZiAodnVfZGV2LSZndDtpcnEgJmd0Oz0gMCkKJiM0MzsJCXN5bmNocm9uaXplX2lycSh2dV9kZXYtJmd0O2lycSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS0mZ3Q7cHJpdjsKQEAgLTExMjEsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb191bWxfY29uZmlnX29wcyA9IHsKIAkucmVzZXQgPSB2dV9yZXNldCwKIAkuZmluZF92cXMgPSB2dV9maW5kX3ZxcywKIAkuZGVsX3ZxcyA9IHZ1X2RlbF92cXMsCiYjNDM7CS5zeW5jaHJvbml6ZV9jYnMgPSB2dV9zeW5jaHJvbml6ZV9jYnMsCiAJLmdldF9mZWF0dXJlcyA9IHZ1X2dldF9mZWF0dXJlcywKIAkuZmluYWxpemVfZmVhdHVyZXMgPSB2dV9maW5hbGl6ZV9mZWF0dXJlcywKIAkuYnVzX25hbWUgPSB2dV9idXNfbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jCmluZGV4IDNjNjQwODU4MTM3M2IuLmMyNjBlM2ExNTQ0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uYwpAQCAtMTEzNSw2ICYjNDM7MTEzNSwxOSBAQCBzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXRtX3ZkZXYtJmd0O3N0YXR1cyA9IDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbHhiZl90bWZpZm9fdmRldiAqdG1fdmRldiA9IG1seGJmX3ZkZXZfdG9fdG1maWZvKHZkZXYpOwomIzQzOwlzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvID0gdG1fdmRldi0mZ3Q7dnJpbmdzWzBdLmZpZm87CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmaWZvLSZndDtzcGluX2xvY2spOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtmaWZvLSZndDtzcGluX2xvY2tbaV0sIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmaWZvLSZndDtzcGluX2xvY2tbaV0sIGZsYWdzKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIFJlYWQgdGhlIHZhbHVlIG9mIGEgY29uZmlndXJhdGlvbiBmaWVsZC4gKi8KIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LApAQCAtMTE3OSw2ICYjNDM7MTE5Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgbWx4YmZfdG1maWZvX3ZpcnRpb19jb25maWdfb3BzID0gewogCS5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsCiAJLmRlbF92cXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2RlbF92cXMsCiAJLnJlc2V0ID0gbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldCwKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzLAogCS5zZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzLAogCS5nZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfc3RhdHVzLAogCS5nZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX2dldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYwppbmRleCAxZWQ0MDY3MTQ4NDkxLi4xYjEzOWQyNWFiMmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCkBAIC0yNDEwLDYgJiM0MzsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCWRldl9pbmZvKCZhbXA7cnByb2MtJmd0O2RldiwgJiMzNDtyZWxlYXNpbmcgJXNcbiYjMzQ7LCBycHJvYy0mZ3Q7bmFtZSk7CiAKJiM0MzsJY2xlYW51cF9zcmN1X3N0cnVjdCgmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KTsKIAlpZHJfZGVzdHJveSgmYW1wO3Jwcm9jLSZndDtub3RpZnlpZHMpOwogCiAJaWYgKHJwcm9jLSZndDtpbmRleCAmZ3Q7PSAwKQpAQCAtMjUwNyw2ICYjNDM7MjUwOCwxMSBAQCBzdHJ1Y3QgcnByb2MgKnJwcm9jX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAlpZiAoIXJwcm9jKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlpZiAoaW5pdF9zcmN1X3N0cnVjdCgmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KSkgewomIzQzOwkJa2ZyZWUocnByb2MpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlycHJvYy0mZ3Q7cHJpdiA9ICZhbXA7cnByb2NbMV07CiAJcnByb2MtJmd0O2F1dG9fYm9vdCA9IHRydWU7CiAJcnByb2MtJmd0O2VsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTsKQEAgLTI1NzEsNiAmIzQzOzI1NzcsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2FsbG9jKTsKICAqCiAgKiBJZiBubyBvbmUgaG9sZHMgYW55IHJlZmVyZW5jZSB0byBycHJvYyBhbnltb3JlLCB0aGVuIGl0cyByZWZjb3VudCB3b3VsZAogICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLgogICovCiB2b2lkIHJwcm9jX2ZyZWUoc3RydWN0IHJwcm9jICpycHJvYykKIHsKQEAgLTI1ODYsNiAmIzQzOzI1OTQsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2ZyZWUpOwogICoKICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkCiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuCiAgKi8KIHZvaWQgcnByb2NfcHV0KHN0cnVjdCBycHJvYyAqcnByb2MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCmluZGV4IGQ1ZTlmZjA0NWEyOGEuLmVjYzAyMmUzNTRkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vyci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NyY3UuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZW1vdGVwcm9jX2ludGVybmFsLmgmIzM0OwogCkBAIC04OSwxNCAmIzQzOzkwLDE5IEBAIHN0YXRpYyBib29sIHJwcm9jX3ZpcnRpb19ub3RpZnkoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKQogewogCXN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nOwomIzQzOwlpbnQgc3JjdV9pZHg7CiYjNDM7CWlycXJldHVybl90IHJldDsKJiM0MzsKJiM0MzsJc3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KTsKIAogCWRldl9kYmcoJmFtcDtycHJvYy0mZ3Q7ZGV2LCAmIzM0O3ZxIGluZGV4ICVkIGlzIGludGVycnVwdGVkXG4mIzM0Oywgbm90aWZ5aWQpOwogCiAJcnZyaW5nID0gaWRyX2ZpbmQoJmFtcDtycHJvYy0mZ3Q7bm90aWZ5aWRzLCBub3RpZnlpZCk7Ci0JaWYgKCFydnJpbmcgfHwgIXJ2cmluZy0mZ3Q7dnEpCi0JCXJldHVybiBJUlFfTk9ORTsKJiM0MzsJcmV0ID0gcnZyaW5nICZhbXA7JmFtcDsgcnZyaW5nLSZndDt2cSA/IHZyaW5nX2ludGVycnVwdCgwLCBydnJpbmctJmd0O3ZxKSA6IElSUV9OT05FOwomIzQzOwomIzQzOwlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UsIHNyY3VfaWR4KTsKIAotCXJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLSZndDt2cSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7CiAKQEAgLTI0Miw2ICYjNDM7MjQ4LDEzIEBAIHN0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAlkZXZfZGJnKCZhbXA7dmRldi0mZ3Q7ZGV2LCAmIzM0O3Jlc2V0ICFcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTsKJiM0MzsKJiM0MzsJc3luY2hyb25pemVfc3JjdSgmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KTsKJiM0Mzt9CiYjNDM7CiAvKiBwcm92aWRlIHRoZSB2ZGV2IGZlYXR1cmVzIGFzIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZSAqLwogc3RhdGljIHU2NCBycHJvY192aXJ0aW9fZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewpAQCAtMzMwLDYgJiM0MzszNDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHJwcm9jX3ZpcnRpb19jb25maWdfb3BzID0gewogCS5maW5kX3Zxcwk9IHJwcm9jX3ZpcnRpb19maW5kX3ZxcywKIAkuZGVsX3Zxcwk9IHJwcm9jX3ZpcnRpb19kZWxfdnFzLAogCS5yZXNldAkJPSBycHJvY192aXJ0aW9fcmVzZXQsCiYjNDM7CS5zeW5jaHJvbml6ZV9jYnMgPSBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzLAogCS5zZXRfc3RhdHVzCT0gcnByb2NfdmlydGlvX3NldF9zdGF0dXMsCiAJLmdldF9zdGF0dXMJPSBycHJvY192aXJ0aW9fZ2V0X3N0YXR1cywKIAkuZ2V0CQk9IHJwcm9jX3ZpcnRpb19nZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCmluZGV4IGJhYjZjYWQzZmQ1Y2UuLjU1MmQ3Nzk5ODAxMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCkBAIC0xMDYyLDcgJiM0MzsxMDYyLDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJc3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiA9IHRvX3ZjX2RldmljZSh2ZGV2KTsKIAlzdHJ1Y3QgYWlycV9pbmZvICppbmZvID0gdmNkZXYtJmd0O2FpcnFfaW5mbzsKIAotCWlmIChpbmZvKSB7CiYjNDM7CWlmICh2Y2Rldi0mZ3Q7aXNfdGhpbmludCAmYW1wOyZhbXA7IGluZm8pIHsKIAkJLyoKIAkJICogVGhpcyBkZXZpY2UgdXNlcyBhZGFwdGVyIGludGVycnVwdHM6IHN5bmNocm9uaXplIHdpdGgKIAkJICogdnJpbmdfaW50ZXJydXB0KCkgY2FsbGVkIGJ5IHZpcnRpb19haXJxX2hhbmRsZXIoKQpAQCAtMTIwNCwxMyAmIzQzOzEyMDQsMTEgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19pbnRfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJCXZjZGV2LSZndDtlcnIgPSAtRUlPOwogCX0KIAl2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7Ci0jaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OCiAJLyoKIAkgKiBQYWlyZWQgd2l0aCB2aXJ0aW9fY2N3X3N5bmNocm9uaXplX2NicygpIGFuZCBpbnRlcnJ1cHRzIGFyZQogCSAqIGRpc2FibGVkIGhlcmUuCiAJICovCiAJcmVhZF9sb2NrKCZhbXA7dmNkZXYtJmd0O2lycV9sb2NrKTsKLSNlbmRpZgogCWZvcl9lYWNoX3NldF9iaXQoaSwgaW5kaWNhdG9ycyh2Y2RldiksCiAJCQkgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7CiAJCS8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqLwpAQCAtMTIxOSw5ICYjNDM7MTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCiAJCXZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpOwogCQl2cmluZ19pbnRlcnJ1cHQoMCwgdnEpOwogCX0KLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT04KIAlyZWFkX3VubG9jaygmYW1wO3ZjZGV2LSZndDtpcnFfbG9jayk7Ci0jZW5kaWYKIAlpZiAodGVzdF9iaXQoMCwgaW5kaWNhdG9yczIodmNkZXYpKSkgewogCQl2aXJ0aW9fY29uZmlnX2NoYW5nZWQoJmFtcDt2Y2Rldi0mZ3Q7dmRldik7CiAJCWNsZWFyX2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwppbmRleCA3NWJiNGZmZTNiODc3Li5hZDFjNTBiOGE5NGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwpAQCAtMjY0LDYgJiM0MzsyNjQsNyBAQCB2b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldikKICNlbmRpZgogCiAJZGV2LSZndDtjb25maWctJmd0O3Jlc2V0KGRldik7CiYjNDM7CXZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19yZXNldF9kZXZpY2UpOwogCkBAIC00MjQsNiAmIzQzOzQyNSw3IEBAIHZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KQogCSAqIFNvbWUgZGV2aWNlcyBnZXQgd2VkZ2VkIGlmIHRoaXMgaGFwcGVucywgc28gcmVzZXQgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90LgogCSAqLwogCWRldi0mZ3Q7Y29uZmlnLSZndDtyZXNldChkZXYpOwomIzQzOwl2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3NodXRkb3duKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYwppbmRleCBkZWVjMjRlOGU2ODI4Li43YjY1NGFmMGE0MmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYwpAQCAtNDksOSAmIzQzOzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIAkJCQkgICAgbGUxNl90b19jcHUoZXZlbnQtJmd0O2NvZGUpLAogCQkJCSAgICBsZTMyX3RvX2NwdShldmVudC0mZ3Q7dmFsdWUpKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlpZiAoIXZpLSZndDtyZWFkeSkKJiM0MzsJCQkJY29udGludWU7CiAJCQl2aXJ0aW5wdXRfcXVldWVfZXZ0YnVmKHZpLCBldmVudCk7CiAJCX0KLQkJdmlydHF1ZXVlX2tpY2sodnEpOwomIzQzOwkJaWYgKHZpLSZndDtyZWFkeSkKJiM0MzsJCQl2aXJ0cXVldWVfa2ljayh2cSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2aS0mZ3Q7bG9jaywgZmxhZ3MpOwogfQpAQCAtMzUwLDggJiM0MzszNTMsOSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXZpLSZndDtyZWFkeSA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2aS0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktJmd0O2lkZXYpOwomIzQzOwkvKiBDYWxsYmFja3MgdXNlIHZpLSZndDtpZGV2LiAqLwogCXZpcnRpb19yZXNldF9kZXZpY2UodmRldik7CiYjNDM7CWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLSZndDtpZGV2KTsKIAl3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2aS0mZ3Q7c3RzKSkgIT0gTlVMTCkKIAkJa2ZyZWUoYnVmKTsKIAl2ZGV2LSZndDtjb25maWctJmd0O2RlbF92cXModmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwppbmRleCBkOWNiYjAyYjM1YTExLi44MTE1YWEzOWUwMWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKQEAgLTk4LDggJiM0Mzs5OCw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCS8qIEZsdXNoIG91dCB0aGUgc3RhdHVzIHdyaXRlLCBhbmQgZmx1c2ggaW4gZGV2aWNlIHdyaXRlcywKIAkgKiBpbmNsdWRpbmcgTVNpLVggaW50ZXJydXB0cywgaWYgYW55LiAqLwogCXZwX2xlZ2FjeV9nZXRfc3RhdHVzKCZhbXA7dnBfZGV2LSZndDtsZGV2KTsKLQkvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqLwotCXZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7CiB9CiAKIHN0YXRpYyB1MTYgdnBfY29uZmlnX3ZlY3RvcihzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiwgdTE2IHZlY3RvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jCmluZGV4IDZkOGFlMmE2YThjYWYuLmM5ZTIxMzE3YzUxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYwpAQCAtNTU5LDkgJiM0Mzs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAkJbXNsZWVwKDEpOwogCiAJdnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpOwotCi0JLyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi8KLQl2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpOwogfQogCiBzdGF0aWMgaW50IHZwX2FjdGl2ZV92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdTE2IG1zaXhfdmVjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmMKaW5kZXggZGUyYWY2OTZkZTZjYS4uNGY5ZTcwYzEzMzJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQAogc3RydWN0IHZpcnRpb192ZHBhX2RldmljZSB7CiAJc3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjsKIAlzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGE7CiYjNDM7CXJ3bG9ja190IGNhbGxiYWNrX2xvY2s7CiAJdTY0IGZlYXR1cmVzOwogfTsKIApAQCAtMTIzLDggJiM0MzsxMjQsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKQogc3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKQogewogCXN0cnVjdCB2aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTsKJiM0MzsJc3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpcnFyZXR1cm5fdCByZXQ7CiAKLQlyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHZxKTsKJiM0MzsJdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLSZndDt2ZGV2KTsKJiM0MzsJcmVhZF9sb2NrX2lycXNhdmUoJmFtcDt2ZF9kZXYtJmd0O2NhbGxiYWNrX2xvY2ssIGZsYWdzKTsKJiM0MzsJcmV0ID0gdnJpbmdfaW50ZXJydXB0KDAsIHZxKTsKJiM0MzsJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZkX2Rldi0mZ3Q7Y2FsbGJhY2tfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodmRldik7CiYjNDM7CiYjNDM7CXdyaXRlX2xvY2tfaXJxKCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrKTsKJiM0MzsJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3ZkX2Rldi0mZ3Q7Y2FsbGJhY2tfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICoKQEAgLTQzOSw2ICYjNDM7NDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0gewogCS5yZXNldAkJPSB2aXJ0aW9fdmRwYV9yZXNldCwKIAkuZmluZF92cXMJPSB2aXJ0aW9fdmRwYV9maW5kX3ZxcywKIAkuZGVsX3Zxcwk9IHZpcnRpb192ZHBhX2RlbF92cXMsCiYjNDM7CS5zeW5jaHJvbml6ZV9jYnMgPSB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMsCiAJLmdldF9mZWF0dXJlcwk9IHZpcnRpb192ZHBhX2dldF9mZWF0dXJlcywKIAkuZmluYWxpemVfZmVhdHVyZXMgPSB2aXJ0aW9fdmRwYV9maW5hbGl6ZV9mZWF0dXJlcywKIAkuYnVzX25hbWUJPSB2aXJ0aW9fdmRwYV9idXNfbmFtZSwKQEAgLTQ3Miw2ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCB2aXJ0aW9fdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCiAJdmRfZGV2LSZndDt2ZGV2LmNvbmZpZyA9ICZhbXA7dmlydGlvX3ZkcGFfY29uZmlnX29wczsKIAl2ZF9kZXYtJmd0O3ZkZXYubWFwID0gdmRwYS0mZ3Q7bWFwOwogCXZkX2Rldi0mZ3Q7dmRwYSA9IHZkcGE7CiYjNDM7CXJ3bG9ja19pbml0KCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrKTsKIAogCXZkX2Rldi0mZ3Q7dmRldi5pZC5kZXZpY2UgPSBvcHMtJmd0O2dldF9kZXZpY2VfaWQodmRwYSk7CiAJaWYgKHZkX2Rldi0mZ3Q7dmRldi5pZC5kZXZpY2UgPT0gMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oIGIvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmgKaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmgKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NyY3UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92aXJ0aW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwpAQCAtMjMwLDYgJiM0MzsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHsKICAqIEBydmRldnM6IGxpc3Qgb2YgcmVtb3RlIHZpcnRpbyBkZXZpY2VzCiAgKiBAc3ViZGV2czogbGlzdCBvZiBzdWJkZXZpY2VzLCB0byBmb2xsb3dpbmcgdGhlIHJ1bm5pbmcgc3RhdGUKICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHMKJiM0MzsgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3MKICAqIEBpbmRleDogaW5kZXggb2YgdGhpcyBycHJvYyBkZXZpY2UKICAqIEBhdHRhY2hfd29yazogd29ya3F1ZXVlIGZvciBhdHRhY2hpbmcgcnByb2MKICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2gKQEAgLTI3Niw2ICYjNDM7Mjc4LDcgQEAgc3RydWN0IHJwcm9jIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJ2ZGV2czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7CiAJc3RydWN0IGlkciBub3RpZnlpZHM7CiYjNDM7CXN0cnVjdCBzcmN1X3N0cnVjdCB2cV9zcmN1OwogCWludCBpbmRleDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXR0YWNoX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGNyYXNoX2hhbmRsZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC03MSw5ICYjNDM7NzEsOSBAQCBzdHJ1Y3QgdmlydHF1ZXVlX2luZm8gewogICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Igc3RhdHVzCiAgKiBAZGVsX3ZxczogZnJlZSB2aXJ0cXVldWVzIGZvdW5kIGJ5IGZpbmRfdnFzKCkuCiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbCkKLSAqICAgICAgVGhlIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlCi0gKiAgICAgIHF1ZXVlIGJlZm9yZSBpdCBhcmUgdmlzaWJsZSB0byB0aGUgdnJpbmdfaW50ZXJydXB0KCkgdGhhdCBpcwotICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuCiYjNDM7ICogICAgICBXYWl0IGZvciBydW5uaW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4gTWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlCiYjNDM7ICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxscwomIzQzOyAqICAgICAgdGhhdCBmb2xsb3cgaXQuCiAgKiAgICAgIHZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlCiAgKiBAZ2V0X2ZlYXR1cmVzOiBnZXQgdGhlIGFycmF5IG9mIGZlYXR1cmUgYml0cyBmb3IgdGhpcyBkZXZpY2UuCiAgKgl2ZGV2OiB0aGUgdmlydGlvX2RldmljZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzMxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogVmlydGlvIFN5bmNocm9uaXphdGlvbiBvbiBhbWQ2NCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBnaXZlbiB0aGUgc3RhdGVkIHRhcmdldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBhbmQgaWYgdGhlc2UgbW9kaWZpY2F0aW9ucyBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHBsYXRmb3JtIEkmIzM5O20gbW9zdCBmYW1pbGlhciB3aXRoLgoKSSBzZWUgYSB2YXJpZXR5IG9mIGRyaXZlcnMgYXJlIGFmZmVjdGVkLCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duOgoKKiAgIEZpcnN0LCBgYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY2AgYWRkcyBgdnVfc3luY2hyb25pemVfY2JzYCBjYWxsaW5nIGBzeW5jaHJvbml6ZV9pcnFgLiBUaGUgVXNlci1Nb2RlIExpbnV4IHBhcnQgaXMgbm90IHJlbGV2YW50IGFzIHRoZSB0YXJnZXQgaXMgYW1kNjQuCiogICBgZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY2AgYWRkcyBhIHNwaW5sb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gTWVsbGFub3ggQmx1ZUZpZWxkIFNvQyBzcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIsIHNvIHRoaXMgd29uJiMzOTt0IGltcGFjdCBhbWQ2NCBlaXRoZXIuCiogICBUaGUgYHJlbW90ZXByb2NgIGNoYW5nZXMgaW50cm9kdWNlIGFuIGBzcmN1YCBtZWNoYW5pc20gd2l0aCBgdnFfc3JjdWAgaW4gYHJlbW90ZXByb2NfY29yZS5jYCBhbmQgYHJlbW90ZXByb2NfdmlydGlvLmNgLCBhbG9uZyB3aXRoIGEgbmV3IGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYC4gVGhpcyBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgSSBuZWVkIHRvIGNoZWNrIGhvdyB3aWRlc3ByZWFkIGByZW1vdGVwcm9jYCBpcyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGFtZDY0LiBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIGl0cyBpbnRlZ3JhdGlvbi4KKiAgIGBkcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuY2AgaXMgczM5MC1zcGVjaWZpYywgc28gaXQmIzM5O3Mgbm90IHJlbGV2YW50IHRvIG15IGV2YWx1YXRpb24uCiogICBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VyaWVzLCBpdCBzZWVtcywgaXMgaW4gYGRyaXZlcnMvdmlydGlvL3ZpcnRpby5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgdmlydGlvX3N5bmNocm9uaXplX2Nic2AgY2FsbGVkIGJ5IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBhbmQgYHZpcnRpb19kZXZpY2Vfc2h1dGRvd25gIGlzIHNpZ25pZmljYW50LiBUaGUgZmFjdCB0aGF0IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBpcyB0aGUgY29yZSB2aXJ0aW8gYnVzIHJlc2V0IGZ1bmN0aW9uIG1lYW5zIHRoaXMgaXMgYSBjZW50cmFsIHBpZWNlLiBUaGlzIHdpbGwgaW1wYWN0IGFsbCB2aXJ0aW8gZHJpdmVycyBvbiByZXNldCAobmV0LCBibGssIGNvbnNvbGUsIGlucHV0LCBldGMuKS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBoZXJlLgoqICAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jYCBtb2RpZmllcyB0aGUgaW5wdXQgaGFuZGxpbmcgYW5kIGFkZHMgc3luY2hyb25pemF0aW9uIGFyb3VuZCBgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2VgIGFuZCByZWFkeW5lc3MgY2hlY2tzLiBUaGlzIGlzIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcmVzZXQgYW5kIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIGNoYW5nZXMgaW4gYHZpcnRpby5jYC4KKiAgIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jYCBhbmQgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmNgIHJlbW92ZSByZWR1bmRhbnQgY2FsbHMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBzaW1wbGlmeWluZyB0aGUgY29kZS4gVGhpcyBpcyBsaWtlbHkgYW4gYXJ0aWZhY3Qgb2YgdGhlIG5ldyBgdmlydGlvX3Jlc2V0X2RldmljZWAgY2FsbC4KKiAgIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jYCBpbnRyb2R1Y2VzIGEgcmVhZC13cml0ZSBsb2NrLCBgY2FsbGJhY2tfbG9ja2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBUaGlzIGlzIGFub3RoZXIgYXJlYSBvZiBjb25jZXJuLCBhcyBpbnRyb2R1Y2luZyBsb2NrcyBjYW4gYmUgdHJpY2t5LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGNvbnRlbnRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggSVJRIGNvbnRleHQuCiogICBGaW5hbGx5LCB0aGVyZSBpcyBhIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBpcyBhY3R1YWxseSByZWFjaGFibGUgb24gYW1kNjQ6IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGEgY29yZSBmdW5jdGlvbi4gYHZpcnRpb192ZHBhLmNgIGFuZCBgdmlydGlvX2lucHV0LmNgIGFyZSBhbHNvIGRyaXZlcnMgSSBuZWVkIHRvIHJldmlldyBpbiBkZXRhaWwgYmVjYXVzZSBvZiB0aGVpciBpbmNsdXNpb24gb2YgbG9ja3Mvc3luY2hyb25pemF0aW9uLiBUaGUgYHJlbW90ZXByb2NgIHN1YnN5c3RlbSBpcyBhbm90aGVyIGFyZWEgdGhhdCBtaWdodCBiZSByZWxldmFudCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZSBgdmlydGlvX3BjaWAgZHJpdmVycyBhcmUgYWxzbyBjcml0aWNhbCBjb21wb25lbnRzIGFzIHRoZXkgYXJlIGludm9sdmVkIGluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAgb24gdGhpcywgSSYjMzk7bGwgdXNlIGBnaXQgZ3JlcGAgYW5kIHJlYWQgdGhlIGNvZGUgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9ucyBhbmQgaG93IGNhbGxlcnMgaW50ZXJhY3QgaW4gdGhlIGFtZDY0IGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgY29ycmVjdGx5IHBsYWNlZCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgZGVhZGxvY2tzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBJUlEgY29udGV4dCBzeW5jaHJvbml6YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTI1Mz12b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNTYtXHQvKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6MjU3Olx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNTgtXHQgKiBpbnRlcnJ1cHQgZm9yIHRoaXMgbGluZSBhcnJpdmluZyBhZnRlclxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTI2Mi1cdHZpcnRpb19icmVha19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjI2MzpcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTI2NC0jZW5kaWZcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNjYtXHRkZXYtXHUwMDNlY29uZmlnLVx1MDAzZXJlc2V0KGRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzoyNjc6XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNjgtfVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQxMj12b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00MjEtXHQgKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQyMjpcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQyMy1cdC8qXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI3LVx0ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VyZXNldChkZXYpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NDI4Olx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGluIExpbnV4IEtlcm5lbCBTb3VyY2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFZpcnRJTyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcyBhcmUgc3luY2hyb25pemVkLiBXaGVyZSB3b3VsZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBiZSwgYW5kIGhvdyB3b3VsZCBJIGJlc3QgZ2FpbiBpbnNpZ2h0PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGRlZmluZXMgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBmdW5jdGlvbnMuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAgZmlyc3QuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFZpcnRJTyBmcmFtZXdvcmsuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0cyB1c2FnZSBvciBkZWx2ZSBkZWVwZXIgaW50byB0aGUgcmVsZXZhbnQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYmFzZWQgb24gd2hhdCBJIGZpbmQgaW4gdGhhdCBoZWFkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMwMj1zdHJ1Y3QgdmlydHF1ZXVlICp2aXJ0aW9fZmluZF9zaW5nbGVfdnEoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgtMzE2LS8qKlxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzE3OiAqIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMgLSBzeW5jaHJvbml6ZSB3aXRoIHZpcnRxdWV1ZSBjYWxsYmFja3NcbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oLTMxOC0gKiBAZGV2OiB0aGUgdmlydGlvIGRldmljZVxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMyMD1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaDozMjE6dm9pZCB2aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zMjIte1xuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTM0ND12b2lkIHZpcnRpb19kZXZpY2VfcmVhZHkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTEtXHQvKlxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzUyOlx0ICogVGhlIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBtYWtlcyBzdXJlIHZyaW5nX2ludGVycnVwdCgpXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTMtXHQgKiB3aWxsIHNlZSB0aGUgZHJpdmVyIHNwZWNpZmljIHNldHVwIGlmIGl0IHNlZXMgdnEtXHUwMDNlYnJva2VuXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgtMzU1LVx0ICovXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaDozNTY6XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTctXHRfX3ZpcnRpb191bmJyZWFrX2RldmljZShkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gVmlydGlvIERldmljZSBSZXNldCBhbmQgU2h1dGRvd24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBWaXJ0aW8gZGV2aWNlcyBhcmUgcmVzZXQgYW5kIHNodXQgZG93biB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBmb3IgYSBzcGVjaWZpYyBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZy4gTXkgbWluZCBpbW1lZGlhdGVseSBoZWFkcyBmb3IgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgbGlrZWx5IGN1bHByaXRzIGFyZSBpbiBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZSBkb2luZyB3aXRoIHRoZSBkZXZpY2UmIzM5O3Mgc3RhdGUgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9ucyB0byBmdWxseSBjb21wcmVoZW5kIHRoZSBpc3N1ZS4gSSBrbm93IHRoZXJlIGFyZSBsaWtlbHkgaW50cmljYWNpZXMgd2l0aCB0aGUgTU1JTyByZWdpc3RlcnMsIGV2ZW50IGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFZpcnRxdWV1ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vdmlydGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdCAqIGNhbGwvd29ya3F1ZXVlL2JoLiAgSW52b2tpbmcgdmlydGlvX2JyZWFrX2RldmljZSB0aGVuIGZsdXNoaW5nIGFueSBzdWNoXG4gMjUxOlx0ICogY29udGV4dHMgaXMgb25lIHdheSB0byBoYW5kbGUgdGhhdC5cbiAyNTI6XHQgKiAqL1xuIDI1MzpcdHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuIDI1NDpcdHtcbiAyNTU6XHQjaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXG4gMjU2Olx0XHQvKlxuIDI1NzpcdFx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XG4gMjU4Olx0XHQgKiBpbnRlcnJ1cHQgZm9yIHRoaXMgbGluZSBhcnJpdmluZyBhZnRlclxuIDI1OTpcdFx0ICogdmlydGlvX3N5bmNocm9uaXplX3ZxcygpIGhhcyBjb21wbGV0ZWQgaXMgZ3VhcmFudGVlZCB0byBzZWVcbiAyNjA6XHRcdCAqIHZxLVx1MDAzZWJyb2tlbiBhcyB0cnVlLlxuIDI2MTpcdFx0ICovXG4gMjYyOlx0XHR2aXJ0aW9fYnJlYWtfZGV2aWNlKGRldik7XG4gMjYzOlx0XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG4gMjY0Olx0I2VuZGlmXG4gMjY1Olx0XG4gMjY2Olx0XHRkZXYtXHUwMDNlY29uZmlnLVx1MDAzZXJlc2V0KGRldik7XG4gMjY3Olx0XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG4gMjY4Olx0fVxuIDI2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19yZXNldF9kZXZpY2UpO1xuIDI3MDpcdFxuIDI3MTpcdHN0YXRpYyBpbnQgdmlydGlvX2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZClcbiAyNzI6XHR7XG4gMjczOlx0XHRpbnQgZXJyLCBpO1xuIDI3NDpcdFx0c3RydWN0IHZpcnRpb19kZXZpY2UgKmRldiA9IGRldl90b192aXJ0aW8oX2QpO1xuIDI3NTpcdFx0c3RydWN0IHZpcnRpb19kcml2ZXIgKmRydiA9IGRydl90b192aXJ0aW8oZGV2LVx1MDAzZWRldi5kcml2ZXIpO1xuIDI3NjpcdFx0dTY0IGRldmljZV9mZWF0dXJlc1tWSVJUSU9fRkVBVFVSRVNfVTY0U107XG4gMjc3Olx0XHR1NjQgZHJpdmVyX2ZlYXR1cmVzW1ZJUlRJT19GRUFUVVJFU19VNjRTXTtcbiAyNzg6XHRcdHU2NCBkcml2ZXJfZmVhdHVyZXNfbGVnYWN5O1xuIDI3OTpcdFxuIDI4MDpcdFx0LyogV2UgaGF2ZSBhIGRyaXZlciEgKi9cbiAyODE6XHRcdHZpcnRpb19hZGRfc3RhdHVzKGRldiwgVklSVElPX0NPTkZJR19TX0RSSVZFUik7XG4gMjgyOlx0XG4gMjgzOlx0XHQvKiBGaWd1cmUgb3V0IHdoYXQgZmVhdHVyZXMgdGhlIGRldmljZSBzdXBwb3J0cy4gKi9cbiAyODQ6XHRcdHZpcnRpb19nZXRfZmVhdHVyZXMoZGV2LCBkZXZpY2VfZmVhdHVyZXMpO1xuIDI4NTpcdFxuIDI4NjpcdFx0LyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHRoZSBkcml2ZXIgc3VwcG9ydHMuICovXG4gMjg3Olx0XHR2aXJ0aW9fZmVhdHVyZXNfemVybyhkcml2ZXJfZmVhdHVyZXMpO1xuIDI4ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHJ2LVx1MDAzZWZlYXR1cmVfdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiAyODk6XHRcdFx0dW5zaWduZWQgaW50IGYgPSBkcnYtXHUwMDNlZmVhdHVyZV90YWJsZVtpXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZpcnRpbyBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpc+KApiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIHdvdWxkIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlPyYjMzQ7IEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIFZpcnRpbyBkcml2ZXJzLiAmIzM0O0xldCYjMzk7cyBzZWUsIHdoZXJlIGFyZSB0aGUga2V5IGltcGxlbWVudGF0aW9ucz8mIzM0OyBJIGltbWVkaWF0ZWx5IHRoaW5rLCB0aGUgYGRyaXZlcnMvdmlydGlvYCBkaXJlY3RvcnkgaXMgYSBnb2xkIG1pbmUgZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLiBUaGVuLCB0byB6ZXJvIGluIG9uIHNwZWNpZmljcywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIHJlbGV2YW50IGRldmljZSB0eXBlczogdGhlIGB2aXJ0aW9fdmRwYS5jYCBkcml2ZXIsIGJlY2F1c2UgaXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIHNwZWNpZmljIHZpcnR1YWwgZGF0YSBwYXRoIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgYW5kIHRoZW4gdGhlIGB2aXJ0aW9faW5wdXQuY2AgZHJpdmVyLCB3aGljaCwgZ2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGlzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBzb21laG93LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgVmlydGlvIGRldmljZXMgYXJlIGZ1bmN0aW9uaW5nIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsLiBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBpbiB0aGVzZSB0d28gZmlyc3QsIGFuZCBzZWUgd2hhdCBJIGNhbiBsZWFybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuIDM0MTpcdGVycl9pbml0X3ZxOlxuIDM0MjpcdFx0a2ZyZWUodmkpO1xuIDM0MzpcdFx0cmV0dXJuIGVycjtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHZvaWQgdmlydGlucHV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiAzNDc6XHR7XG4gMzQ4Olx0XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZkZXYtXHUwMDNlcHJpdjtcbiAzNDk6XHRcdHZvaWQgKmJ1ZjtcbiAzNTA6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzUxOlx0XG4gMzUyOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzUzOlx0XHR2aS1cdTAwM2VyZWFkeSA9IGZhbHNlO1xuIDM1NDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzU1Olx0XG4gMzU2Olx0XHQvKiBDYWxsYmFja3MgdXNlIHZpLVx1MDAzZWlkZXYuICovXG4gMzU3Olx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuIDM1ODpcdFx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXHUwMDNlaWRldik7XG4gMzU5Olx0XHR3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2aS1cdTAwM2VzdHMpKSAhPSBOVUxMKVxuIDM2MDpcdFx0XHRrZnJlZShidWYpO1xuIDM2MTpcdFx0dmRldi1cdTAwM2Vjb25maWctXHUwMDNlZGVsX3Zxcyh2ZGV2KTtcbiAzNjI6XHRcdGtmcmVlKHZpKTtcbiAzNjM6XHR9XG4gMzY0Olx0XG4gMzY1Olx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuIDM2NjpcdHN0YXRpYyBpbnQgdmlydGlucHV0X2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiAzNjc6XHR7XG4gMzY4Olx0XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZkZXYtXHUwMDNlcHJpdjtcbiAzNjk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzcwOlx0XHR2b2lkICpidWY7XG4gMzcxOlx0XG4gMzcyOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzczOlx0XHR2aS1cdTAwM2VyZWFkeSA9IGZhbHNlO1xuIDM3NDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzc1Olx0XG4gMzc2Olx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuIDM3NzpcdFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXHUwMDNlc3RzKSkgIT0gTlVMTClcbiAzNzg6XHRcdFx0a2ZyZWUoYnVmKTtcbiAzNzk6XHRcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0LCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZS4KCioqRGl2aW5nIERlZXBlciBpbnRvIEV2ZW50IEhhbmRsaW5nKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBjaXJjbGUgYmFjayB0byBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIGJlaGF2aW5nLCBlc3BlY2lhbGx5IGluIHRoaXMgY29udGV4dC4gV2UgbmVlZCB0byBkaXNzZWN0IGl0cyByb2xlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmlydHVhbCBpbnB1dCBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgbWlnaHQgYmUgbWFuaWZlc3RpbmcuIElzIGl0IGhhbmRsaW5nIGV2ZW50cyBlZmZpY2llbnRseT8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoYXQgYXJlYT8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIHRoaXMgZnVuY3Rpb24gdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIG9yIGEgZG93bnN0cmVhbSBlZmZlY3Q/IExldCYjMzk7cyB0cmVhdCBpdCBhcyBhIHN1c3BlY3QgYW5kIGludGVycm9nYXRlIGl0IHdpdGggYSBkZXRhaWxlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYW55IHNpZ24gdGhhdCB0aGUgcHJvY2Vzc2luZyBpcyBub3QgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTtcbiAgMzE6XHRcbiAgMzI6XHRcdHNnX2luaXRfb25lKHNnLCBldnRidWYsIHNpemVvZigqZXZ0YnVmKSk7XG4gIDMzOlx0XHR2aXJ0cXVldWVfYWRkX2luYnVmX2NhY2hlX2NsZWFuKHZpLVx1MDAzZWV2dCwgc2csIDEsIGV2dGJ1ZiwgR0ZQX0FUT01JQyk7XG4gIDM0Olx0fVxuICAzNTpcdFxuICAzNjpcdHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiAgMzc6XHR7XG4gIDM4Olx0XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVx1MDAzZXZkZXYtXHUwMDNlcHJpdjtcbiAgMzk6XHRcdHN0cnVjdCB2aXJ0aW9faW5wdXRfZXZlbnQgKmV2ZW50O1xuICA0MDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgNDE6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gIDQyOlx0XG4gIDQzOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDQ0Olx0XHRpZiAodmktXHUwMDNlcmVhZHkpIHtcbiAgNDU6XHRcdFx0d2hpbGUgKChldmVudCA9IHZpcnRxdWV1ZV9nZXRfYnVmKHZpLVx1MDAzZWV2dCwgXHUwMDI2bGVuKSkgIT0gTlVMTCkge1xuICA0NjpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA0NzpcdFx0XHRcdGlucHV0X2V2ZW50KHZpLVx1MDAzZWlkZXYsXG4gIDQ4Olx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZXZlbnQtXHUwMDNldHlwZSksXG4gIDQ5Olx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZXZlbnQtXHUwMDNlY29kZSksXG4gIDUwOlx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZXZlbnQtXHUwMDNldmFsdWUpKTtcbiAgNTE6XHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDUyOlx0XHRcdFx0aWYgKCF2aS1cdTAwM2VyZWFkeSlcbiAgNTM6XHRcdFx0XHRcdGNvbnRpbnVlO1xuICA1NDpcdFx0XHRcdHZpcnRpbnB1dF9xdWV1ZV9ldnRidWYodmksIGV2ZW50KTtcbiAgNTU6XHRcdFx0fVxuICA1NjpcdFx0XHRpZiAodmktXHUwMDNlcmVhZHkpXG4gIDU3Olx0XHRcdFx0dmlydHF1ZXVlX2tpY2sodnEpO1xuICA1ODpcdFx0fVxuICA1OTpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qXG4gIDYzOlx0ICogT24gZXJyb3Igd2UgYXJlIGxvc2luZyB0aGUgc3RhdHVzIHVwZGF0ZSwgd2hpY2ggaXNuJiMzOTt0IGNyaXRpY2FsIGFzXG4gIDY0Olx0ICogdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3Igc3R1ZmYgbGlrZSBrZXlib2FyZCBsZWRzLlxuICA2NTpcdCAqL1xuICA2NjpcdHN0YXRpYyBpbnQgdmlydGlucHV0X3NlbmRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpLFxuICA2NzpcdFx0XHRcdFx0IHUxNiB0eXBlLCB1MTYgY29kZSwgczMyIHZhbHVlKVxuICA2ODpcdHtcbiAgNjk6XHRcdHN0cnVjdCB2aXJ0aW9faW5wdXRfZXZlbnQgKnN0c2J1ZjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCB0aGlua2luZyBhcyBJIHdvdWxkIGluIHRoZSBtaWRzdCBvZiB0aGlzIHdvcms6CgoqKkludmVzdGlnYXRpbmcgVmlydGlvIGFuZCBSZW1vdGUgUHJvY2Vzc29yIEludGVyYWN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmaWxlcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBGaXJzdCwgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNg4oCmIFJpZ2h0LCBWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRpb24uIFRoYXQmIzM5O3Mga2V5IGZvciBwZXJmb3JtYW5jZSwgc28gSSBzaG91bGQgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGF0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIFZEUEEtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBicm9hZGVyIHZpcnRpbyBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBwYXRocyBhcmUgb3B0aW1pemVkLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4KCk5leHQgdXAsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgUmVtb3RlIFByb2Nlc3NvciBzdHVmZi4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNgIGRvZXMuIE9rYXksIGl0JiMzOTtzIHRoZSBjb3JlIHJlbW90ZXByb2MgZnJhbWV3b3JrLiBUaGlzIG1lYW5zIGl0IGNvbnRhaW5zIHRoZSBlc3NlbnRpYWwgbWVjaGFuaWNzIGZvciBtYW5hZ2luZyByZW1vdGUgcHJvY2Vzc29ycywgdGhlaXIgcmVzb3VyY2VzLCBjb21tdW5pY2F0aW9uLCBhbmQgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBoYW5kbGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVzc2FnaW5nLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgYmFzaWMgc3RhdGUgbWFjaGluZXMgdGhhdCBkcml2ZSB0aGUgcmVtb3RlcHJvYyBvcGVyYXRpb24uCgpGaW5hbGx5LCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiByZW1vdGVwcm9jIGFuZCB2aXJ0aW8uIFNvLCBJIGV4cGVjdCB0byBzZWUgdGhlIHZpcnRpbyB0cmFuc3BvcnQgbWVjaGFuaXNtcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzb3IuIFRoaXMgZmlsZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZW1vdGUgcHJvY2Vzc29yJiMzOTtzIGhhcmR3YXJlIGlzIGFjY2Vzc2VkIGFuZCBjb250cm9sbGVkIHRocm91Z2ggdGhlIHZpcnRpbyBpbnRlcmZhY2UuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGNvbnRyb2wgbWVzc2FnZXMgYW5kIGRhdGEgYXJlIGV4Y2hhbmdlZCBiZXR3ZWVuIHRoZSBob3N0IGFuZCByZW1vdGUgcHJvY2Vzc29yIHRocm91Z2ggdmlydGlvIHF1ZXVlcy4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpXG4gMTE2Olx0e1xuIDExNzpcdFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gcHJpdmF0ZTtcbiAxMTg6XHRcbiAxMTk6XHRcdHZpcnRpb19jb25maWdfY2hhbmdlZChcdTAwMjZ2ZF9kZXYtXHUwMDNldmRldik7XG4gMTIwOlx0XG4gMTIxOlx0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gMTIyOlx0fVxuIDEyMzpcdFxuIDEyNDpcdHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcbiAxMjU6XHR7XG4gMTI2Olx0XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHByaXZhdGU7XG4gMTI3Olx0XHRzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXY7XG4gMTI4Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEyOTpcdFx0aXJxcmV0dXJuX3QgcmV0O1xuIDEzMDpcdFxuIDEzMTpcdFx0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVx1MDAzZXZkZXYpO1xuIDEzMjpcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcbiAxMzM6XHRcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4gMTM0Olx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XG4gMTM1Olx0XG4gMTM2Olx0XHRyZXR1cm4gcmV0O1xuIDEzNzpcdH1cbiAxMzg6XHRcbiAxMzk6XHRzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gMTQwOlx0e1xuIDE0MTpcdFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZkZXYpO1xuIDE0MjpcdFxuIDE0MzpcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIDE0NDpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jayk7XG4gMTQ1Olx0fVxuIDE0NjpcdFxuIDE0NzpcdHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpcbiAxNDg6XHR2aXJ0aW9fdmRwYV9zZXR1cF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGluZGV4LFxuIDE0OTpcdFx0XHQgICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpLFxuIDE1MDpcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgY3R4KVxuIDE1MTpcdHtcbiAxNTI6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHZkX2dldF92ZHBhKHZkZXYpO1xuIDE1MzpcdFx0Y29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyAqb3BzID0gdmRwYS1cdTAwM2Vjb25maWc7XG4gMTU0Olx0XHRib29sICgqbm90aWZ5KShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkgPSB2aXJ0aW9fdmRwYV9ub3RpZnk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byByZW1vdGVwcm9jX3ZpcnRpby5jKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgYGRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jYC4gVGhpcyBmaWxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB2aXJ0aW8gdHJhbnNwb3J0IHdvcmtzIHdpdGggcmVtb3RlIHByb2Nlc3NvcnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSByZW1vdGVwcm9jIGZyYW1ld29yayBhcyBhIHdob2xlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB2aXJ0aW8gZGV2aWNlIGludGVyYWN0aW9uOiB0aGUgbmVnb3RpYXRpb24sIHRoZSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMsIGFuZCBob3cgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHNldCB1cC4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIHN0dWZmIGluIHRoZXJlIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byBob3cgaXQgaXNvbGF0ZXMgdGhlIHJlbW90ZSBwcm9jZXNzb3ImIzM5O3Mgd29ybGQuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkIGluIHRoZSByZW1vdGVwcm9jIHN5c3RlbSwgdG9vLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0ICogbWVzc2FnZXMgYXZhaWxhYmxlLlxuICA4NjpcdCAqXG4gIDg3Olx0ICogUmV0dXJuOiBJUlFfTk9ORSBpZiBubyBtZXNzYWdlIHdhcyBmb3VuZCBpbiB0aGUgQG5vdGlmeWlkIHZpcnRxdWV1ZSxcbiAgODg6XHQgKiBhbmQgb3RoZXJ3aXNlIHJldHVybnMgSVJRX0hBTkRMRUQuXG4gIDg5Olx0ICovXG4gIDkwOlx0aXJxcmV0dXJuX3QgcnByb2NfdnFfaW50ZXJydXB0KHN0cnVjdCBycHJvYyAqcnByb2MsIGludCBub3RpZnlpZClcbiAgOTE6XHR7XG4gIDkyOlx0XHRzdHJ1Y3QgcnByb2NfdnJpbmcgKnJ2cmluZztcbiAgOTM6XHRcdGludCBzcmN1X2lkeDtcbiAgOTQ6XHRcdGlycXJldHVybl90IHJldDtcbiAgOTU6XHRcbiAgOTY6XHRcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2cnByb2MtXHUwMDNldnFfc3JjdSk7XG4gIDk3Olx0XG4gIDk4Olx0XHRkZXZfZGJnKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCYjMzQ7dnEgaW5kZXggJWQgaXMgaW50ZXJydXB0ZWRcXG5cJiMzNDssIG5vdGlmeWlkKTtcbiAgOTk6XHRcbiAxMDA6XHRcdHJ2cmluZyA9IGlkcl9maW5kKFx1MDAyNnJwcm9jLVx1MDAzZW5vdGlmeWlkcywgbm90aWZ5aWQpO1xuIDEwMTpcdFx0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuIDEwMjpcdFxuIDEwMzpcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XG4gMTA0Olx0XG4gMTA1Olx0XHRyZXR1cm4gcmV0O1xuIDEwNjpcdH1cbiAxMDc6XHRFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gMTA4Olx0XG4gMTA5Olx0c3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKnJwX2ZpbmRfdnEoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gMTEwOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGlkLFxuIDExMTpcdFx0XHRcdFx0ICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpLFxuIDExMjpcdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgY3R4KVxuIDExMzpcdHtcbiAxMTQ6XHRcdHN0cnVjdCBycHJvY192ZGV2ICpydmRldiA9IHZkZXZfdG9fcnZkZXYodmRldik7XG4gMTE1Olx0XHRzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTtcbiAxMTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnJwcm9jLVx1MDAzZWRldjtcbiAxMTc6XHRcdHN0cnVjdCBycHJvY19tZW1fZW50cnkgKm1lbTtcbiAxMTg6XHRcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xuIDExOTpcdFx0c3RydWN0IGZ3X3JzY192ZGV2ICpyc2M7XG4gMTIwOlx0XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cTtcbiAxMjE6XHRcdHZvaWQgKmFkZHI7XG4gMTIyOlx0XHRpbnQgbnVtLCBzaXplO1xuIDEyMzpcdFxuIDEyNDpcdFx0Lyogd2UmIzM5O3JlIHRlbXBvcmFyaWx5IGxpbWl0ZWQgdG8gdHdvIHZpcnRxdWV1ZXMgcGVyIHJ2ZGV2ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIEluc3BlY3Rpb24gVGltZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgaXQuIEJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoaXMgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIGF0IHRoaXMgcG9pbnQg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IEtjb25maWdzIGFyZSBwcm9wZXJseSBzZXQgZm9yIHRoZXNlIGZpbGVzIHRvIGJlIGluY2x1ZGVkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBObyBwb2ludCBpbiBkZWJ1Z2dpbmcgc29tZXRoaW5nIHRoYXQmIzM5O3Mgc2ltcGx5IGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgb3IsIGV2ZW4gd29yc2UsIG1pc2JlaGF2aW5nIGJlY2F1c2UgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSAqb24qLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSBjaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZXNlIHBhcnRpY3VsYXIgbW9kdWxlcy4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGNvbmZsaWN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZsYWdzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoYXQgd291bGQgaW1wYWN0IG15IGFuYWx5c2lzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBhdCBhIGNvcnJlY3QgYW5kIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYnVpbGQuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIGNoYXNpbmcgdGhlIHJpZ2h0IHJhYmJpdCBkb3duIHRoZSBob2xlLiBTbywgS2NvbmZpZ3MsIGxldCYjMzk7cyBzZWUgd2hhdCB5b3UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX1ZJUlRJT19CQUxMT09OKSAmIzQzOz0gdmlydGlvX2JhbGxvb24ub1xuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1ZJUlRJT19JTlBVVCkgJiM0Mzs9IHZpcnRpb19pbnB1dC5vXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfVklSVElPX1ZEUEEpICYjNDM7PSB2aXJ0aW9fdmRwYS5vXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtOS0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3ZpcnRpb19pZHMuaFx1MDAzZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTA6I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC92aXJ0aW9faW5wdXQuaFx1MDAzZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvaW5wdXQvbXQuaFx1MDAzZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTItXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMzpzdHJ1Y3QgdmlydGlvX2lucHV0IHtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE0LVx0c3RydWN0IHZpcnRpb19kZXZpY2UgICAgICAgKnZkZXY7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjAtXHRfX2RtYV9mcm9tX2RldmljZV9ncm91cF9iZWdpbigpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjE6XHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICBldnRzWzY0XTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTIyLVx0X19kbWFfZnJvbV9kZXZpY2VfZ3JvdXBfZW5kKCk7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjYtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNzpzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcXVldWVfZXZ0YnVmKHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpLFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjg6XHRcdFx0XHQgICBzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpldnRidWYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yOS17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MzY9c3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3ZfZXZlbnRzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzcte1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mzg6XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVx1MDAzZXZkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjM5Olx0c3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqZXZlbnQ7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MC1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjUtICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo2NjpzdGF0aWMgaW50IHZpcnRpbnB1dF9zZW5kX3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTY3LVx0XHRcdFx0IHUxNiB0eXBlLCB1MTYgY29kZSwgczMyIHZhbHVlKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjgte1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Njk6XHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpzdHNidWY7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy03MC1cdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0xMTI9c3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3Zfc3RhdHVzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTEzLXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjExNDpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdnEtXHUwMDNldmRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTE1Olx0c3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqc3RzYnVmO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTE2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0xMjU9c3RhdGljIGludCB2aXJ0aW5wdXRfc3RhdHVzKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHVuc2lnbmVkIGludCB0eXBlLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEyNy17XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMjg6XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTI5LVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEzMi1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzMzpzdGF0aWMgdTggdmlydGlucHV0X2NmZ19zZWxlY3Qoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMzQtXHRcdFx0ICAgICAgIHU4IHNlbGVjdCwgdTggc3Vic2VsKVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEzNy1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzODpcdHZpcnRpb19jd3JpdGVfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHNlbGVjdCwgXHUwMDI2c2VsZWN0KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzOTpcdHZpcnRpb19jd3JpdGVfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHN1YnNlbCwgXHUwMDI2c3Vic2VsKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE0MDpcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgc2l6ZSwgXHUwMDI2c2l6ZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDEtXHRyZXR1cm4gc2l6ZTtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDMtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNDQ6c3RhdGljIHZvaWQgdmlydGlucHV0X2NmZ19iaXRzKHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpLCBpbnQgc2VsZWN0LCBpbnQgc3Vic2VsLFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTQ1LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpiaXRzLCB1bnNpZ25lZCBpbnQgYml0Y291bnQpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTY0LVx0XHRyZXR1cm47XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNjU6XHR2aXJ0aW9fY3JlYWRfYnl0ZXModmktXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNjYtXHRcdFx0XHRcdCAgICAgIHUuYml0bWFwKSxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNzctXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNzg6c3RhdGljIHZvaWQgdmlydGlucHV0X2NmZ19hYnMoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksIGludCBhYnMpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNzkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE4Mi1cdHZpcnRpbnB1dF9jZmdfc2VsZWN0KHZpLCBWSVJUSU9fSU5QVVRfQ0ZHX0FCU19JTkZPLCBhYnMpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTgzOlx0dmlydGlvX2NyZWFkX2xlKHZpLVx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLCB1LmFicy5taW4sIFx1MDAyNm1pKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE4NDpcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMubWF4LCBcdTAwMjZtYSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODU6XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHUuYWJzLnJlcywgXHUwMDI2cmUpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTg2Olx0dmlydGlvX2NyZWFkX2xlKHZpLVx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLCB1LmFicy5mdXp6LCBcdTAwMjZmdSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODc6XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHUuYWJzLmZsYXQsIFx1MDAyNmZsKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE4OC1cdGlucHV0X3NldF9hYnNfcGFyYW1zKHZpLVx1MDAzZWlkZXYsIGFicywgbWksIG1hLCBmdSwgZmwpO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE5MS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE5MjpzdGF0aWMgaW50IHZpcnRpbnB1dF9pbml0X3ZxcyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE5My17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjA5LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjEwOnN0YXRpYyB2b2lkIHZpcnRpbnB1dF9maWxsX2V2dChzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTIxMS17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MjI1PXN0YXRpYyBpbnQgdmlydGlucHV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjI2LXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjIyNzpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjI4LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNTQtXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfTkFNRSwgMCk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNTU6XHR2aXJ0aW9fY3JlYWRfYnl0ZXModmktXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNTYtXHRcdFx0XHRcdCAgICAgIHUuc3RyaW5nKSxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNTgtXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfU0VSSUFMLCAwKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI1OTpcdHZpcnRpb19jcmVhZF9ieXRlcyh2aS1cdTAwM2V2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI2MC1cdFx0XHRcdFx0ICAgICAgdS5zdHJpbmcpLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI2OC1cdHNpemUgPSB2aXJ0aW5wdXRfY2ZnX3NlbGVjdCh2aSwgVklSVElPX0lOUFVUX0NGR19JRF9ERVZJRFMsIDApO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjY5Olx0aWYgKHNpemUgXHUwMDNlPSBzaXplb2Yoc3RydWN0IHZpcnRpb19pbnB1dF9kZXZpZHMpKSB7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNzA6XHRcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3MS1cdFx0XHRcdHUuaWRzLmJ1c3R5cGUsIFx1MDAyNnZpLVx1MDAzZWlkZXYtXHUwMDNlaWQuYnVzdHlwZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNzI6XHRcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3My1cdFx0XHRcdHUuaWRzLnZlbmRvciwgXHUwMDI2dmktXHUwMDNlaWRldi1cdTAwM2VpZC52ZW5kb3IpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjc0Olx0XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNzUtXHRcdFx0XHR1Lmlkcy5wcm9kdWN0LCBcdTAwMjZ2aS1cdTAwM2VpZGV2LVx1MDAzZWlkLnByb2R1Y3QpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjc2Olx0XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNzctXHRcdFx0XHR1Lmlkcy52ZXJzaW9uLCBcdTAwMjZ2aS1cdTAwM2VpZGV2LVx1MDAzZWlkLnZlcnNpb24pO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM0Nj1zdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzQ3LXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjM0ODpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzQ5LVx0dm9pZCAqYnVmO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM2Nj1zdGF0aWMgaW50IHZpcnRpbnB1dF9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNjcte1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MzY4Olx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNjktXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM4Mz1zdGF0aWMgaW50IHZpcnRpbnB1dF9yZXN0b3JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzg0LXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjM4NTpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzg2LVx0aW50IGVycjtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz00MDI9c3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNDA2LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6NDA3OnN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9faW5wdXRfZHJpdmVyID0ge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNDA4LVx0LmRyaXZlci5uYW1lICAgICAgICAgPSBLQlVJTERfTU9ETkFNRSxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MTktXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo0MjA6bW9kdWxlX3ZpcnRpb19kcml2ZXIodmlydGlvX2lucHV0X2RyaXZlcik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MjEtTU9EVUxFX0RFVklDRV9UQUJMRSh2aXJ0aW8sIGlkX3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVmlydGlvIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFZpcnRpbyBkcml2ZXJzIGFyZSBjb25maWd1cmVkLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIHN0YW5kYXJkIGtlcm5lbCBidWlsZCBzeXN0ZW0sIGlzIHRoZSBgZHJpdmVycy92aXJ0aW9gIGRpcmVjdG9yeS4gQW5kIHdpdGhpbiB0aGF0LCB0aGUgZmlsZSB0aGF0IGRpY3RhdGVzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGFsbW9zdCBjZXJ0YWlubHkgYEtjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgc2hvdWxkIGZpbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0cyB0aGF0IGRldGVybWluZSBob3cgdGhlIFZpcnRpbyBzdWJzeXN0ZW0gaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgdGhlIGNlbnRyYWwgaHViIGZvciBhbnkgY29uZmlndXJhdGlvbiBmbGFncyByZWxhdGVkIHRvIHRob3NlIHZpcnR1YWxpemVkIGRldmljZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIGZvciB0aGUgZGlmZmVyZW50IHZpcnRpbyBkZXZpY2UgdHlwZXMgKG5ldCwgYmxvY2ssIGV0Yy4pLCBhbmQgbWF5YmUgZXZlbiBzb21lIGdsb2JhbCBWaXJ0aW8gZmxhZ3MuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBleGFtaW5lIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFZJUlRJT19BTkNIT1JcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgVklSVElPXG4gICA2Olx0XHR0cmlzdGF0ZVxuICAgNzpcdFx0c2VsZWN0IFZJUlRJT19BTkNIT1JcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBpbXBsZW1lbnRzIHRoZSB2aXJ0aW9cbiAgMTA6XHRcdCAgYnVzLCBzdWNoIGFzIENPTkZJR19WSVJUSU9fUENJLCBDT05GSUdfVklSVElPX01NSU8sIENPTkZJR19SUE1TR1xuICAxMTpcdFx0ICBvciBDT05GSUdfUzM5MF9HVUVTVC5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgVklSVElPX1BDSV9MSUJcbiAgMTQ6XHRcdHRyaXN0YXRlXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIE1vZGVybiBQQ0kgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZVxuICAxNzpcdFx0ICBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgYmFzZWQgb24gbW9kZXJuXG4gIDE4Olx0XHQgIFBDSSBkZXZpY2Ugd2l0aCBwb3NzaWJsZSB2ZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucy4gQW55XG4gIDE5Olx0XHQgIG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpcyBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBWSVJUSU9fUENJX0xJQl9MRUdBQ1lcbiAgMjI6XHRcdHRyaXN0YXRlXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIExlZ2FjeSBQQ0kgZGV2aWNlIChWaXJ0aW8gUENJIENhcmQgMC45LnggRHJhZnQgYW5kIG9sZGVyIGRldmljZSlcbiAgMjU6XHRcdCAgaW1wbGVtZW50YXRpb24uXG4gIDI2Olx0XHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzXG4gIDI3Olx0XHQgIHdoaWNoIGFyZSBiYXNlZCBvbiBsZWdhY3kgUENJIGRldmljZS4gQW55IG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpc1xuICAyODpcdFx0ICBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxuICAyOTpcdFxuICAzMDpcdG1lbnVjb25maWcgVklSVElPX01FTlVcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7VmlydGlvIGRyaXZlcnNcJiMzNDtcbiAgMzI6XHRcdGRlZmF1bHQgeVxuICAzMzpcdFxuICAzNDpcdGlmIFZJUlRJT19NRU5VXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIFZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXG4gIDM3Olx0ICAgICAgICBib29sIFwmIzM0O0hhcmRlbiB2aXJ0aW8gbm90aWZpY2F0aW9uXCYjMzQ7XG4gIDM4Olx0ICAgICAgICBkZXBlbmRzIG9uIEJST0tFTlxuICAzOTpcdCAgICAgICAgaGVscFxuICA0MDpcdCAgICAgICAgICBFbmFibGUgdGhpcyB0byBoYXJkZW4gdGhlIGRldmljZSBub3RpZmljYXRpb25zIGFuZCBzdXBwcmVzc1xuICA0MTpcdCAgICAgICAgICB0aG9zZSB0aGF0IGhhcHBlbiBhdCBhIHRpbWUgd2hlcmUgbm90aWZpY2F0aW9ucyBhcmUgaWxsZWdhbC5cbiAgNDI6XHRcbiAgNDM6XHQgICAgICAgICAgRXhwZXJpbWVudGFsOiBOb3RlIHRoYXQgc2V2ZXJhbCBkcml2ZXJzIHN0aWxsIGhhdmUgaXNzdWVzIHRoYXRcbiAgNDQ6XHQgICAgICAgICAgbWF5IGNhdXNlIGNyYXNoZXMgb3IgaGFuZ3Mgd2hlbiBjb3JyZWN0IGhhbmRsaW5nIG9mXG4gIDQ1Olx0ICAgICAgICAgIG5vdGlmaWNhdGlvbnMgaXMgZW5mb3JjZWQ7IGRlcGVuZGluZyBvbiB0aGUgc3Vic2V0IG9mXG4gIDQ2Olx0ICAgICAgICAgIGRyaXZlcnMgYW5kIGRldmljZXMgeW91IHVzZSwgdGhpcyBtYXkgb3IgbWF5IG5vdCB3b3JrLlxuICA0NzpcdFxuICA0ODpcdCAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBWSVJUSU9fUENJXG4gIDUxOlx0XHR0cmlzdGF0ZSBcJiMzNDtQQ0kgZHJpdmVyIGZvciB2aXJ0aW8gZGV2aWNlc1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNTM6XHRcdHNlbGVjdCBWSVJUSU9fUENJX0xJQlxuICA1NDpcdFx0c2VsZWN0IFZJUlRJT1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWwgZGV2aWNlXG4gIDU3Olx0XHQgIGRyaXZlcnMgb3ZlciBQQ0kuICBUaGlzIHJlcXVpcmVzIHRoYXQgeW91ciBWTU0gaGFzIGFwcHJvcHJpYXRlIFBDSVxuICA1ODpcdFx0ICB2aXJ0aW8gYmFja2VuZHMuICBNb3N0IFFFTVUgYmFzZWQgVk1NcyBzaG91bGQgc3VwcG9ydCB0aGVzZSBkZXZpY2VzXG4gIDU5Olx0XHQgIChsaWtlIEtWTSBvciBYZW4pLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBNLlxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBWSVJUSU9fUENJX0FETUlOX0xFR0FDWVxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFx0ZGVwZW5kcyBvbiBWSVJUSU9fUENJIFx1MDAyNlx1MDAyNiAoWDg2IHx8IENPTVBJTEVfVEVTVClcbiAgNjY6XHRcdGRlZmF1bHQgeVxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBWSVJUSU9fUENJX0xFR0FDWVxuICA2OTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBsZWdhY3kgdmlydGlvIGRyYWZ0IDAuOS5YIGFuZCBvbGRlciBkZXZpY2VzXCYjMzQ7XG4gIDcwOlx0XHRkZWZhdWx0IHlcbiAgNzE6XHRcdGRlcGVuZHMgb24gVklSVElPX1BDSVxuICA3MjpcdFx0c2VsZWN0IFZJUlRJT19QQ0lfTElCX0xFR0FDWVxuICA3MzpcdFx0aGVscFxuICA3NDpcdCAgICAgICAgICBWaXJ0aW8gUENJIENhcmQgMC45LlggRHJhZnQgKGNpcmNhIDIwMTQpIGFuZCBvbGRlciBkZXZpY2Ugc3VwcG9ydC5cbiAgNzU6XHRcbiAgNzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBidWlsZGluZyBhIHRyYW5zaXRpb25hbCBkcml2ZXIsIHN1cHBvcnRpbmdcbiAgNzc6XHRcdCAgYm90aCBkZXZpY2VzIGNvbmZvcm1pbmcgdG8gVmlydGlvIDEgc3BlY2lmaWNhdGlvbiwgYW5kIGxlZ2FjeSBkZXZpY2VzLlxuICA3ODpcdFx0ICBJZiBkaXNhYmxlZCwgeW91IGdldCBhIHNsaWdodGx5IHNtYWxsZXIsIG5vbi10cmFuc2l0aW9uYWwgZHJpdmVyLFxuICA3OTpcdFx0ICB3aXRoIG5vIGxlZ2FjeSBjb21wYXRpYmlsaXR5LlxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIFZpcnRpbyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCBpdCYjMzk7cyB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlLiBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGUgVmlydGlvIHN1YnN5c3RlbSwgYW5kIHRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgY29uZmlndXJpbmcgd2hpY2ggVmlydGlvIGRyaXZlcnMgZ2V0IGJ1aWx0IGFuZCBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBzb2xpZCBncmFzcCBvZiB0aGUgVmlydGlvIGFyY2hpdGVjdHVyZSwgdGhlIGRpZmZlcmVudCBkZXZpY2VzLCBhbmQgdGhlIHZhcmlvdXMgaW50ZXJmYWNlcy4gQnV0LCB0byByZWFsbHkgZ2V0IG15IGhlYWQgYXJvdW5kIHRoZSBjb25maWd1cmF0aW9uIG51YW5jZXMsIGVzcGVjaWFsbHkgaWYgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcgYSBzcGVjaWZpYyBkcml2ZXIgb3IgdHJ5aW5nIHRvIGN1c3RvbWl6ZSBhIGJ1aWxkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBpbiB0aGUgS2NvbmZpZyBmaWxlLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgY2xhdXNlcywgdGhlIGNvbmRpdGlvbmFscyBiYXNlZCBvbiBoYXJkd2FyZSBwbGF0Zm9ybXMgb3Iga2VybmVsIGZlYXR1cmVzLCBhbmQgYWxsIHRob3NlIG1lbnUgc3RydWN0dXJlcy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBib3RoIHNlbGVjdGluZyB0aGUgY29ycmVjdCBkcml2ZXJzIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgVmlydGlvIHN1YnN5c3RlbSBpcyBidWlsdCBhbmQgY29uZmlndXJlZC4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZmxhZ3Mgb3Igb3B0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHNwZWNpZmljIGRyaXZlcnMgYXJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgYnVpbHQgYXMgbW9kdWxlcywgb3IgY29tcGxldGVseSBleGNsdWRlZC4gSSBhbnRpY2lwYXRlIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIHByb3BlciBoYXJkd2FyZSBkaXNjb3ZlcnksIGRldmljZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBhbmQgb3ZlcmFsbCBzeXN0ZW0gY29tcGF0aWJpbGl0eS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHRoZSBvcHRpb25zIHJlbGF0ZWQgdG8gc3BlY2lmaWMgVmlydGlvIGRldmljZXMsIHRoZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIFZpcnRpbyBidXMsIGFuZCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLiBLbm93aW5nIHRoZSBpbnMgYW5kIG91dHMgb2YgdGhpcyBLY29uZmlnIGZpbGUgaXMgZ29pbmcgdG8gYmUga2V5IHRvIG15IHdvcmsgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdCAgICAgICAgICBTbyBsb29rIG91dCBpbnRvIHlvdXIgZHJpdmV3YXkuICBEbyB5b3UgaGF2ZSBhIGZseWluZyBjYXI/ICBJZlxuICA4MjpcdCAgICAgICAgICBzbywgeW91IGNhbiBoYXBwaWx5IGRpc2FibGUgdGhpcyBvcHRpb24gYW5kIHZpcnRpbyB3aWxsIG5vdFxuICA4MzpcdCAgICAgICAgICBicmVhay4gIE90aGVyd2lzZSwgbGVhdmUgaXQgc2V0LiAgVW5sZXNzIHlvdSYjMzk7cmUgdGVzdGluZyB3aGF0XG4gIDg0Olx0ICAgICAgICAgIGxpZmUgd2lsbCBiZSBsaWtlIGluIFRoZSBGdXR1cmUuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIFZJUlRJT19WRFBBXG4gIDg5Olx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlciBmb3IgdmlydGlvIGRldmljZXNcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gVkRQQVxuICA5MTpcdFx0c2VsZWN0IFZJUlRJT1xuICA5MjpcdFx0aGVscFxuICA5MzpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWxcbiAgOTQ6XHRcdCAgZGV2aWNlIGRyaXZlciBvdmVyIHZEUEEgYnVzLiBGb3IgdGhpcyB0byBiZSB1c2VmdWwsIHlvdSBuZWVkXG4gIDk1Olx0XHQgIGFuIGFwcHJvcHJpYXRlIHZEUEEgZGV2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQgb3BlcmF0ZXMgb24gYVxuICA5NjpcdFx0ICBwaHlzaWNhbCBkZXZpY2UgdG8gYWxsb3cgdGhlIGRhdGFwYXRoIG9mIHZpcnRpbyB0byBiZVxuICA5NzpcdFx0ICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXG4gIDk4Olx0XG4gIDk5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE0uXG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIFZJUlRJT19QTUVNXG4gMTAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciB2aXJ0aW8gcG1lbSBkcml2ZXJcJiMzNDtcbiAxMDM6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTA0Olx0XHRkZXBlbmRzIG9uIExJQk5WRElNTVxuIDEwNTpcdFx0aGVscFxuIDEwNjpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBhY2Nlc3MgdG8gdmlydGlvLXBtZW0gZGV2aWNlcywgc3RvcmFnZSBkZXZpY2VzXG4gMTA3Olx0XHQgIHRoYXQgYXJlIG1hcHBlZCBpbnRvIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIC0gc2ltaWxhciB0byBOVkRJTU1zXG4gMTA4Olx0XHQgICAtIHdpdGggYSB2aXJ0aW8tYmFzZWQgZmx1c2hpbmcgaW50ZXJmYWNlLlxuIDEwOTpcdFxuIDExMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDExMTpcdFxuIDExMjpcdGNvbmZpZyBWSVJUSU9fQkFMTE9PTlxuIDExMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIGJhbGxvb24gZHJpdmVyXCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIFZJUlRJT1xuIDExNTpcdFx0c2VsZWN0IEJBTExPT05cbiAxMTY6XHRcdHNlbGVjdCBQQUdFX1JFUE9SVElOR1xuIDExNzpcdFx0aGVscFxuIDExODpcdFx0IFRoaXMgZHJpdmVyIHN1cHBvcnRzIGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgdGhlIGFtb3VudFxuIDExOTpcdFx0IG9mIG1lbW9yeSB3aXRoaW4gYSBLVk0gZ3Vlc3QuXG4gMTIwOlx0XG4gMTIxOlx0XHQgSWYgdW5zdXJlLCBzYXkgTS5cbiAxMjI6XHRcbiAxMjM6XHRjb25maWcgVklSVElPX01FTVxuIDEyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG1lbSBkcml2ZXJcJiMzNDtcbiAxMjU6XHRcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcbiAxMjY6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4gMTI4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbiAxMjk6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4gMTMwOlx0XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gMTMxOlx0XHRoZWxwXG4gMTMyOlx0XHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxuIDEzMzpcdFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXG4gMTM0Olx0XG4gMTM1Olx0XHQgVGhpcyBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHg4Ni02NCwgYXJtNjQsIHJpc2N2IGFuZCBzMzkwLlxuIDEzNjpcdFx0IEFsdGhvdWdoIGl0IHNob3VsZCBjb21waWxlIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBpbXBsZW1lbnRcbiAxMzc6XHRcdCBtZW1vcnkgaG90KHVuKXBsdWcsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhbmQvb3IgY29tbW9uXG4gMTM4Olx0XHQgY29kZSBjaGFuZ2VzIG1heSBiZSByZXF1aXJlZCBmb3IgdmlydGlvLW1lbSwga2R1bXAgYW5kIGtleGVjIHRvXG4gMTM5Olx0XHQgd29yayBhcyBleHBlY3RlZC5cbiAxNDA6XHRcbiAxNDE6XHRcdCBJZiB1bnN1cmUsIHNheSBNLlxuIDE0MjpcdFxuIDE0MzpcdGNvbmZpZyBWSVJUSU9fSU5QVVRcbiAxNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnRpbyBpbnB1dCBkcml2ZXJcJiMzNDtcbiAxNDU6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTQ2Olx0XHRkZXBlbmRzIG9uIElOUFVUXG4gMTQ3Olx0XHRoZWxwXG4gMTQ4Olx0XHQgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydGlvIGlucHV0IGRldmljZXMgc3VjaCBhc1xuIDE0OTpcdFx0IGtleWJvYXJkcywgbWljZSBhbmQgdGFibGV0cy5cbiAxNTA6XHRcbiAxNTE6XHRcdCBJZiB1bnN1cmUsIHNheSBNLlxuIDE1MjpcdFxuIDE1MzpcdGNvbmZpZyBWSVJUSU9fTU1JT1xuIDE1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UGxhdGZvcm0gYnVzIGRyaXZlciBmb3IgbWVtb3J5IG1hcHBlZCB2aXJ0aW8gZGV2aWNlc1wmIzM0O1xuIDE1NTpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAxNTY6XHRcdHNlbGVjdCBWSVJUSU9cbiAxNTc6XHRcdGhlbHBcbiAxNTg6XHRcdCBUaGlzIGRyaXZlcnMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgbWVtb3J5IG1hcHBlZCB2aXJ0aW9cbiAxNTk6XHRcdCBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLlxuIDE2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBSZW1vdGUgUHJvY2Vzc29yIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcmVtb3RlIHByb2Nlc3NvcnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnN5c3RlbS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgYW5kIGl0cyBzdXBwb3J0ZWQgZGV2aWNlcy4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBgQ09ORklHX1JFTU9URVBST0NgLCBvZiBjb3Vyc2UsIGJ1dCBhbHNvIGFueSBkZXZpY2Utc3BlY2lmaWMgb3B0aW9ucyB0aGF0IG1pZ2h0IHJlc2lkZSB0aGVyZTogb3B0aW9ucyBmb3IgZW5hYmxpbmcgc3BlY2lmaWMgZmlybXdhcmUgbG9hZGluZyBtZWNoYW5pc21zLCByZXNvdXJjZSB0YWJsZSBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb25zLCBvciBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgcXVpcmtzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGR1cmluZyBjb25maWd1cmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBjb25maWd1cmFibGUgYW5kIGhvdyB0aGV5IGFyZSBleHBvc2VkIHRvIHRoZSBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRU1PVEVQUk9DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9yZW1vdGVwcm9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnPTI9bWVudSBcJiMzNDtSZW1vdGVwcm9jIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTMtXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzo0OmNvbmZpZyBSRU1PVEVQUk9DXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy01LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBSZW1vdGUgUHJvY2Vzc29yIHN1YnN5c3RlbVwmIzM0O1xuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnPTE1PWlmIFJFTU9URVBST0NcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTE2LVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6MTc6Y29uZmlnIFJFTU9URVBST0NfQ0RFVlxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMTgtXHRib29sIFwmIzM0O1JlbW90ZXByb2MgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBWaXJ0aW8gU3luY2hyb25pemF0aW9uIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBhbGwgYWJvdXQgc3luY2hyb25pemluZyBjYWxsYmFja3MgZHVyaW5nIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCBzbyBpdCYjMzk7cyB3b3J0aCBhIGNsb3NlIGxvb2suCgpGaXJzdGx5LCB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgdmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpYCBjYWxsZWQgZnJvbSBgdmlydGlvX3Jlc2V0X2RldmljZWAgYW5kIGB2aXJ0aW9fZGV2aWNlX3NodXRkb3duYC4gVGhpcyBzaWduYWxzIHRoZSBpbnRlbnQgdG8gc3luY2hyb25pemUgYWxsIHZpcnRpbyBjYWxsYmFja3Mgb24gcmVzZXQgb3Igc2h1dGRvd24uCgpMb29raW5nIGRlZXBlciwgdGhlIHNlcmllcyB0aGVuIGFwcGxpZXMgdGhpcyB0byBpbmRpdmlkdWFsIGRyaXZlcnMuIGB2aXJ0aW9fdmRwYWAgbm93IHVzZXMgYSBgY2FsbGJhY2tfbG9ja2Agcndsb2NrLiBUaGF0IG1ha2VzIHNlbnNlIGZvciBlbnN1cmluZyBleGNsdXNpdmUgYWNjZXNzIGR1cmluZyBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFuZCByZXNldCBvcGVyYXRpb25zLiBgdmlydGlvX2lucHV0YCBoYXMgc29tZSBjaGVja3Mgb24gYHZpLSZndDtyZWFkeWAgaW4gYHZpcnRpbnB1dF9yZWN2X2V2ZW50c2AgYmVmb3JlIGNhbGxpbmcgYHZpcnRpbnB1dF9xdWV1ZV9ldnRidWZgIGFuZCBgdmlydHF1ZXVlX2tpY2tgLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgd2F5IHRvIHByZXZlbnQgc2VuZGluZyBldmVudHMgd2hlbiB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZWFkeS4gVGhlIHJlb3JkZXJpbmcgb2YgYHZpcnRpb19yZXNldF9kZXZpY2VgIGJlZm9yZSBgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2VgIGluIGB2aXJ0aW5wdXRfcmVtb3ZlYCBhbHNvIHNlZW1zIGNvcnJlY3QgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4KClRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGByZW1vdGVwcm9jYCBjaGFuZ2VzLiBUaGV5JiMzOTt2ZSBhZGRlZCBTUkNVIHN5bmNocm9uaXphdGlvbiBmb3IgdmlydHF1ZXVlIGludGVycnVwdCBjYWxsYmFja3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSByZW1vdGVwcm9jIGlzIG9mdGVuIHVzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyB3aXRoIGNvbXBsZXggaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBTUkNVIGlzIGEgZ29vZCBjaG9pY2UgaWYgcmVhZCBhY2Nlc3MgaXMgZnJlcXVlbnQgYW5kIHdyaXRlIGFjY2VzcyBpcyBpbmZyZXF1ZW50LgoKVGhlIFBDSSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIHJlbW92YWwgb2YgYHZwX3N5bmNocm9uaXplX3ZlY3RvcnNgIGZyb20gYHZwX3Jlc2V0YCwgaW5kaWNhdGVzIHRoYXQgdGhlIHN5bmNocm9uaXphdGlvbiBpcyBiZWluZyBoYW5kbGVkIGF0IGEgaGlnaGVyIGxldmVsLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGUgcmVmYWN0b3JpbmcmIzM5O3MgaW50ZW50LiBUaGUgZm9jdXMgb24gY2xlYW5pbmcgdXAgdGhlIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGZvY3VzaW5nIG9uIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaXMgZ29vZCwgaXQgY291bGQgYmUgYSBsYXJnZSBpbXBhY3QuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBUaGFua2Z1bGx5LCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAmIzM0O3llcyYjMzQ7LiBgdmlydGlvX3Jlc2V0X2RldmljZWAgaXMgY2FsbGVkIG9uIHZpcnRpbyByZXNldHMgYWNyb3NzIGFsbCBkcml2ZXJzLiBUaGUgYHZpcnRpb19pbnB1dGAgZXZlbnQgcXVldWUgaXMgYWxzbyBhIHZlcnkgYWN0aXZlIHBhcnQgb2YgdGhlIHN5c3RlbS4gV2Uga25vdyBgdmlydGlvX3ZkcGFgIGlzIHByZXNlbnQuIGByZW1vdGVwcm9jYCBhbHNvIGludm9sdmVzIGludGVycnVwdCBhbmQgZGV2aWNlIGNhbGxiYWNrcy4gYHZpcnRpb19wY2lgIGFuZCBgdnBfcmVzZXRgIGFyZSBvYnZpb3VzbHkgaW52b2tlZCBkdXJpbmcgUENJIHZpcnRpbyByZXNldC4KCkdpdmVuIHRoZSBjcml0ZXJpYSBvZiAmIzM0O1dvcnRoRnV6emluZywmIzM0OyB0aGlzIHBhdGNoIHNlcmllcyBkZWZpbml0ZWx5IHF1YWxpZmllcy4gSXQgdG91Y2hlcyBjb3JlIHZpcnRpbyBidXMgcmVzZXQgbG9naWMsIG11bHRpcGxlIGRyaXZlcnMsIGFuZCBpbnRyb2R1Y2VzIGxvY2tpbmcgcHJpbWl0aXZlcy4gSXQgaGl0cyBjb3JlIHN1YnN5c3RlbXMsIHJlYWNoYWJsZSBkcml2ZXJzICh2aXJ0aW8pLCBhbmQgaW50cm9kdWNlcyByZWZhY3RvcmluZy9jb2RlIGNsZWFudXAuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluY2x1ZGU6CjEuIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYAoyLiBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAKMy4gYHZpcnRpbnB1dF9yZWN2X2V2ZW50c2AKNC4gYHZpcnRpbnB1dF9yZW1vdmVgCjUuIGB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JgCjYuIGB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNgCjcuIGBycHJvY192cV9pbnRlcnJ1cHRgCjguIGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYAo5LiBgcnByb2NfdHlwZV9yZWxlYXNlYAoxMC4gYHJwcm9jX2FsbG9jYAphbG9uZyB3aXRoIHBvdGVudGlhbGx5IGB2cF9yZXNldGAsIGV2ZW4gaWYgdGhleSBtYXkgYmUgYHN0YXRpY2AuCgpUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgd2VsbC1kZWZpbmVkIHBhdGNoIHNlcmllcyB0aGF0IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgdGhlIHJlc2lsaWVuY2Ugb2YgdGhlIHZpcnRpbyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZwX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYz04NT1zdGF0aWMgdm9pZCB2cF9zZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1OCBzdGF0dXMpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYy05Mi1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmM6OTM6c3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTk0LXtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jPTE4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb19wY2lfY29uZmlnX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTE5MS1cdC5zZXRfc3RhdHVzXHQ9IHZwX3NldF9zdGF0dXMsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jOjE5MjpcdC5yZXNldFx0XHQ9IHZwX3Jlc2V0LFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYy0xOTMtXHQuZmluZF92cXNcdD0gdnBfZmluZF92cXMsXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz01MzU9c3RhdGljIHZvaWQgdnBfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtNTQ1LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYzo1NDY6c3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jLTU0Ny17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz0xMjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfbm9kZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTIyOS1cdC5zZXRfc3RhdHVzXHQ9IHZwX3NldF9zdGF0dXMsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jOjEyMzA6XHQucmVzZXRcdFx0PSB2cF9yZXNldCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTIzMS1cdC5maW5kX3Zxc1x0PSB2cF9tb2Rlcm5fZmluZF92cXMsXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz0xMjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTI0OS1cdC5zZXRfc3RhdHVzXHQ9IHZwX3NldF9zdGF0dXMsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jOjEyNTA6XHQucmVzZXRcdFx0PSB2cF9yZXNldCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTI1MS1cdC5maW5kX3Zxc1x0PSB2cF9tb2Rlcm5fZmluZF92cXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDQyCgkJCQkJCQlvdXRwdXQ6IDI0MQoJCQkJCQkJdGhvdWdodHM6IDU0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBUcnVlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoZSByZWxldmFudCBkcml2ZXJzLiBJIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIGVuYWJsZWQgYnkgYFZJUlRJT2AsIGBWSVJUSU9fUENJYCwgYFZJUlRJT19WRFBBYCwgYFZJUlRJT19JTlBVVGAsIGFuZCBgUkVNT1RFUFJPQ2AuIFRvIGJlIGNlcnRhaW4sIEkgZG92ZSBhIGxpdHRsZSBkZWVwZXIgdG8gY2hlY2sgZGVwZW5kZW5jaWVzLiBgVklSVElPX1ZEUEFgIGRlcGVuZHMgb24gYFZEUEFgIGFuZCBzZWxlY3RzIGBWSVJUSU9gLCBgVklSVElPX0lOUFVUYCBkZXBlbmRzIG9uIGBWSVJUSU9gLCBgSU5QVVRgLCBhbmQgYFZJUlRJT19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIHNlbGVjdHMgYm90aCBgVklSVElPX1BDSV9MSUJgIGFuZCBgVklSVElPYC4gYFJFTU9URVBST0NgIGlzIGEgYm9vbGVhbiBjb25maWcuIFdpdGggdGhpcyBJIGhhZCBhIHZlcmlmaWVkIGxpc3Qgb2YgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nOiBgVklSVElPYCwgYFZJUlRJT19QQ0lgLCBgVklSVElPX1ZEUEFgLCBgVkRQQWAsIGBWSVJUSU9fSU5QVVRgLCBhbmQgYFJFTU9URVBST0NgLgoKVGhlbiwgSSBsb29rZWQgYXQgYSBzZWxlY3Rpb24gb2Yga2V5IHN5bWJvbHMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb2RlIHdlIGFyZSBsaWtlbHkgdG8gZXhwbG9yZS4gSSBwaWNrZWQgb3V0IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCwgYHZpcnRpb19kZXZpY2Vfc2h1dGRvd25gLCBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYCwgYHZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYmAsIGB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNgLCBgcnByb2NfdnFfaW50ZXJydXB0YCwgYHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnNgLCBhbmQgYHJwcm9jX2FsbG9jYCBhcyBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyZXN0LiBCdXQgYWZ0ZXIgYSBxdWljayByZXZpZXcsIGl0JiMzOTtzIGNsZWFyIHRoZXNlIGFyZSBzcGVjaWZpYyBjYWxsYmFja3MgYW5kIGVudHJ5cG9pbnRzLCByYXRoZXIgdGhhbiBhIGJyb2FkLCB1YmlxdWl0b3VzIGhvdCBwYXRocyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIGRyaXZlcnMuCgpBZnRlciB0aGlzIHF1aWNrIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIG9taXNzaW9ucyBvciByZWR1bmRhbmNpZXMuIEdpdmVuIHRoaXMgaW5mb3JtYXRpb24sIG15IHZlcmRpY3QgaXMgdGhhdCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJiMzOTttIHJlYWR5IHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VklSVElPX0lOUFVUJiMzNDssCiAgICAmIzM0O1JFTU9URVBST0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fcmVzZXRfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZpcnRpb19kZXZpY2Vfc2h1dGRvd24mIzM0OywKICAgICYjMzQ7dmlydGlucHV0X3JlY3ZfZXZlbnRzJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYiYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfdnFfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3Jwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgdmlydGlvIGRldmljZSByZXNldCBhbmQgc2h1dGRvd24gaGFuZGxpbmcgYWNyb3NzIGNvcmUgdmlydGlvLCB2aXJ0aW8taW5wdXQsIHZpcnRpby12ZHBhLCBhbmQgcmVtb3RlcHJvYyB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgdXNpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgKFNSQ1UgaW4gcmVtb3RlcHJvYywgcndsb2NrIGluIHZpcnRpb192ZHBhLCBhbmQgc3luY2hyb25pemVfY2JzIGluIHZpcnRpbyBjb3JlKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWwgYnVzIGRyaXZlcnMgYW5kIHN1YnN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VklSVElPX0lOUFVUJiMzNDssCiAgICAmIzM0O1JFTU9URVBST0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fcmVzZXRfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZpcnRpb19kZXZpY2Vfc2h1dGRvd24mIzM0OywKICAgICYjMzQ7dmlydGlucHV0X3JlY3ZfZXZlbnRzJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYiYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfdnFfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3Jwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgdmlydGlvIGRldmljZSByZXNldCBhbmQgc2h1dGRvd24gaGFuZGxpbmcgYWNyb3NzIGNvcmUgdmlydGlvLCB2aXJ0aW8taW5wdXQsIHZpcnRpby12ZHBhLCBhbmQgcmVtb3RlcHJvYyB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgdXNpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgKFNSQ1UgaW4gcmVtb3RlcHJvYywgcndsb2NrIGluIHZpcnRpb192ZHBhLCBhbmQgc3luY2hyb25pemVfY2JzIGluIHZpcnRpbyBjb3JlKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWwgYnVzIGRyaXZlcnMgYW5kIHN1YnN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cblxuS2V5IHBvaW50cyByZWdhcmRpbmcgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTpcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCB0b3VjaCB1c2VyLWNvcHkgYm91bmRhcmllcyBvciBuZXRsaW5rL2lvY3RsIG91dHB1dCBidWZmZXJzLCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgYWxsIG5ldyBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAoYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS5cblxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzVjMDgzMTZiNjNkYTkyMzExYjZjY2Y4ZWNjY2MwNGJiMDk5Y2RmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTU6MDc6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jIGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYwppbmRleCA3NDI1YTg1NDgxNDFhLi5iYWNhNmIwOWU5YWMyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAgKgogICogQmFzZWQgb24gVmlydGlvIE1NSU8gZHJpdmVyIGJ5IFBhd2VsIE1vbGwsIGNvcHlyaWdodCAyMDExLTIwMTQsIEFSTSBMdGQuCiAgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKQEAgLTg2OSw2ICYjNDM7ODcwLDE0IEBAIHN0YXRpYyB2b2lkIHZ1X3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXZ1X2Rldi0mZ3Q7c3RhdHVzID0gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHZ1X3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7CiYjNDM7CiYjNDM7CWlmICh2dV9kZXYtJmd0O2lycSAmZ3Q7PSAwKQomIzQzOwkJc3luY2hyb25pemVfaXJxKHZ1X2Rldi0mZ3Q7aXJxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2dV9kZWxfdnEoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHZpcnRpb191bWxfdnFfaW5mbyAqaW5mbyA9IHZxLSZndDtwcml2OwpAQCAtMTEyMSw2ICYjNDM7MTEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3VtbF9jb25maWdfb3BzID0gewogCS5yZXNldCA9IHZ1X3Jlc2V0LAogCS5maW5kX3ZxcyA9IHZ1X2ZpbmRfdnFzLAogCS5kZWxfdnFzID0gdnVfZGVsX3ZxcywKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IHZ1X3N5bmNocm9uaXplX2NicywKIAkuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLAogCS5maW5hbGl6ZV9mZWF0dXJlcyA9IHZ1X2ZpbmFsaXplX2ZlYXR1cmVzLAogCS5idXNfbmFtZSA9IHZ1X2J1c19uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uYyBiL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMKaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jCkBAIC0xMTM1LDYgJiM0MzsxMTM1LDE5IEBAIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJdG1fdmRldi0mZ3Q7c3RhdHVzID0gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7CiYjNDM7CXN0cnVjdCBtbHhiZl90bWZpZm8gKmZpZm8gPSB0bV92ZGV2LSZndDt2cmluZ3NbMF0uZmlmbzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZpZm8tJmd0O3NwaW5fbG9jayk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2ZpZm8tJmd0O3NwaW5fbG9ja1tpXSwgZmxhZ3MpOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2ZpZm8tJmd0O3NwaW5fbG9ja1tpXSwgZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogUmVhZCB0aGUgdmFsdWUgb2YgYSBjb25maWd1cmF0aW9uIGZpZWxkLiAqLwogc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsCiAJCQkJICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCkBAIC0xMTc5LDYgJiM0MzsxMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBtbHhiZl90bWZpZm9fdmlydGlvX2NvbmZpZ19vcHMgPSB7CiAJLmZpbmRfdnFzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19maW5kX3ZxcywKIAkuZGVsX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZGVsX3ZxcywKIAkucmVzZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0LAomIzQzOwkuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsCiAJLnNldF9zdGF0dXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX3NldF9zdGF0dXMsCiAJLmdldF9zdGF0dXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2dldF9zdGF0dXMsCiAJLmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCmluZGV4IDFlZDQwNjcxNDg0OTEuLjFiMTM5ZDI1YWIyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMKQEAgLTI0MTAsNiAmIzQzOzI0MTAsNyBAQCBzdGF0aWMgdm9pZCBycHJvY190eXBlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogCiAJZGV2X2luZm8oJmFtcDtycHJvYy0mZ3Q7ZGV2LCAmIzM0O3JlbGVhc2luZyAlc1xuJiMzNDssIHJwcm9jLSZndDtuYW1lKTsKIAomIzQzOwljbGVhbnVwX3NyY3Vfc3RydWN0KCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpOwogCWlkcl9kZXN0cm95KCZhbXA7cnByb2MtJmd0O25vdGlmeWlkcyk7CiAKIAlpZiAocnByb2MtJmd0O2luZGV4ICZndDs9IDApCkBAIC0yNTA3LDYgJiM0MzsyNTA4LDExIEBAIHN0cnVjdCBycHJvYyAqcnByb2NfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCWlmICghcnByb2MpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChpbml0X3NyY3Vfc3RydWN0KCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpKSB7CiYjNDM7CQlrZnJlZShycHJvYyk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCXJwcm9jLSZndDtwcml2ID0gJmFtcDtycHJvY1sxXTsKIAlycHJvYy0mZ3Q7YXV0b19ib290ID0gdHJ1ZTsKIAlycHJvYy0mZ3Q7ZWxmX2NsYXNzID0gRUxGQ0xBU1NOT05FOwpAQCAtMjU3MSw2ICYjNDM7MjU3Nyw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfYWxsb2MpOwogICoKICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkCiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuCiAgKi8KIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQogewpAQCAtMjU4Niw2ICYjNDM7MjU5NCw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfZnJlZSk7CiAgKgogICogSWYgbm8gb25lIGhvbGRzIGFueSByZWZlcmVuY2UgdG8gcnByb2MgYW55bW9yZSwgdGhlbiBpdHMgcmVmY291bnQgd291bGQKICAqIG5vdyBkcm9wIHRvIHplcm8sIGFuZCBpdCB3b3VsZCBiZSBmcmVlZC4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IE1heSBzbGVlcCBpZiB0aGlzIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAqLwogdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3JlZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3JjdS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JlbW90ZXByb2NfaW50ZXJuYWwuaCYjMzQ7CiAKQEAgLTg5LDE0ICYjNDM7OTAsMTkgQEAgc3RhdGljIGJvb2wgcnByb2NfdmlydGlvX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIGlycXJldHVybl90IHJwcm9jX3ZxX2ludGVycnVwdChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBpbnQgbm90aWZ5aWQpCiB7CiAJc3RydWN0IHJwcm9jX3ZyaW5nICpydnJpbmc7CiYjNDM7CWludCBzcmN1X2lkeDsKJiM0MzsJaXJxcmV0dXJuX3QgcmV0OwomIzQzOwomIzQzOwlzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpOwogCiAJZGV2X2RiZygmYW1wO3Jwcm9jLSZndDtkZXYsICYjMzQ7dnEgaW5kZXggJWQgaXMgaW50ZXJydXB0ZWRcbiYjMzQ7LCBub3RpZnlpZCk7CiAKIAlydnJpbmcgPSBpZHJfZmluZCgmYW1wO3Jwcm9jLSZndDtub3RpZnlpZHMsIG5vdGlmeWlkKTsKLQlpZiAoIXJ2cmluZyB8fCAhcnZyaW5nLSZndDt2cSkKLQkJcmV0dXJuIElSUV9OT05FOwomIzQzOwlyZXQgPSBydnJpbmcgJmFtcDsmYW1wOyBydnJpbmctJmd0O3ZxID8gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy0mZ3Q7dnEpIDogSVJRX05PTkU7CiYjNDM7CiYjNDM7CXNyY3VfcmVhZF91bmxvY2soJmFtcDtycHJvYy0mZ3Q7dnFfc3JjdSwgc3JjdV9pZHgpOwogCi0JcmV0dXJuIHZyaW5nX2ludGVycnVwdCgwLCBydnJpbmctJmd0O3ZxKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocnByb2NfdnFfaW50ZXJydXB0KTsKIApAQCAtMjQyLDYgJiM0MzsyNDgsMTMgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCWRldl9kYmcoJmFtcDt2ZGV2LSZndDtkZXYsICYjMzQ7cmVzZXQgIVxuJiMzNDspOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBycHJvYyAqcnByb2MgPSB2ZGV2X3RvX3Jwcm9jKHZkZXYpOwomIzQzOwomIzQzOwlzeW5jaHJvbml6ZV9zcmN1KCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpOwomIzQzO30KJiM0MzsKIC8qIHByb3ZpZGUgdGhlIHZkZXYgZmVhdHVyZXMgYXMgcmV0cmlldmVkIGZyb20gdGhlIGZpcm13YXJlICovCiBzdGF0aWMgdTY0IHJwcm9jX3ZpcnRpb19nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CkBAIC0zMzAsNiAmIzQzOzM0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgcnByb2NfdmlydGlvX2NvbmZpZ19vcHMgPSB7CiAJLmZpbmRfdnFzCT0gcnByb2NfdmlydGlvX2ZpbmRfdnFzLAogCS5kZWxfdnFzCT0gcnByb2NfdmlydGlvX2RlbF92cXMsCiAJLnJlc2V0CQk9IHJwcm9jX3ZpcnRpb19yZXNldCwKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsCiAJLnNldF9zdGF0dXMJPSBycHJvY192aXJ0aW9fc2V0X3N0YXR1cywKIAkuZ2V0X3N0YXR1cwk9IHJwcm9jX3ZpcnRpb19nZXRfc3RhdHVzLAogCS5nZXQJCT0gcnByb2NfdmlydGlvX2dldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jIGIvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKaW5kZXggYmFiNmNhZDNmZDVjZS4uNTUyZDc3OTk4MDEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKQEAgLTEwNjIsNyAmIzQzOzEwNjIsNyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAlzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpOwogCXN0cnVjdCBhaXJxX2luZm8gKmluZm8gPSB2Y2Rldi0mZ3Q7YWlycV9pbmZvOwogCi0JaWYgKGluZm8pIHsKJiM0MzsJaWYgKHZjZGV2LSZndDtpc190aGluaW50ICZhbXA7JmFtcDsgaW5mbykgewogCQkvKgogCQkgKiBUaGlzIGRldmljZSB1c2VzIGFkYXB0ZXIgaW50ZXJydXB0czogc3luY2hyb25pemUgd2l0aAogCQkgKiB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsZWQgYnkgdmlydGlvX2FpcnFfaGFuZGxlcigpCkBAIC0xMjA0LDEzICYjNDM7MTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAogCQkJdmNkZXYtJmd0O2VyciA9IC1FSU87CiAJfQogCXZpcnRpb19jY3dfY2hlY2tfYWN0aXZpdHkodmNkZXYsIGFjdGl2aXR5KTsKLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT04KIAkvKgogCSAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlCiAJICogZGlzYWJsZWQgaGVyZS4KIAkgKi8KIAlyZWFkX2xvY2soJmFtcDt2Y2Rldi0mZ3Q7aXJxX2xvY2spOwotI2VuZGlmCiAJZm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSwKIAkJCSBzaXplb2YoKmluZGljYXRvcnModmNkZXYpKSAqIEJJVFNfUEVSX0JZVEUpIHsKIAkJLyogVGhlIGJpdCBjbGVhciBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIHZyaW5nIGtpY2suICovCkBAIC0xMjE5LDkgJiM0MzsxMjE3LDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19pbnRfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJdnEgPSB2aXJ0aW9fY2N3X3ZxX2J5X2luZCh2Y2RldiwgaSk7CiAJCXZyaW5nX2ludGVycnVwdCgwLCB2cSk7CiAJfQotI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTgogCXJlYWRfdW5sb2NrKCZhbXA7dmNkZXYtJmd0O2lycV9sb2NrKTsKLSNlbmRpZgogCWlmICh0ZXN0X2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpKSB7CiAJCXZpcnRpb19jb25maWdfY2hhbmdlZCgmYW1wO3ZjZGV2LSZndDt2ZGV2KTsKIAkJY2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCmluZGV4IDc1YmI0ZmZlM2I4NzcuLmFkMWM1MGI4YTk0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCkBAIC0yNjQsNiAmIzQzOzI2NCw3IEBAIHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KQogI2VuZGlmCiAKIAlkZXYtJmd0O2NvbmZpZy0mZ3Q7cmVzZXQoZGV2KTsKJiM0MzsJdmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7CiAKQEAgLTQyNCw2ICYjNDM7NDI1LDcgQEAgdm9pZCB2aXJ0aW9fZGV2aWNlX3NodXRkb3duKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCiAJICogU29tZSBkZXZpY2VzIGdldCB3ZWRnZWQgaWYgdGhpcyBoYXBwZW5zLCBzbyByZXNldCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QuCiAJICovCiAJZGV2LSZndDtjb25maWctJmd0O3Jlc2V0KGRldik7CiYjNDM7CXZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19kZXZpY2Vfc2h1dGRvd24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jCmluZGV4IGRlZWMyNGU4ZTY4MjguLjdiNjU0YWYwYTQyY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jCkBAIC00OSw5ICYjNDM7NDksMTIgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3ZfZXZlbnRzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogCQkJCSAgICBsZTE2X3RvX2NwdShldmVudC0mZ3Q7Y29kZSksCiAJCQkJICAgIGxlMzJfdG9fY3B1KGV2ZW50LSZndDt2YWx1ZSkpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2aS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJCWlmICghdmktJmd0O3JlYWR5KQomIzQzOwkJCQljb250aW51ZTsKIAkJCXZpcnRpbnB1dF9xdWV1ZV9ldnRidWYodmksIGV2ZW50KTsKIAkJfQotCQl2aXJ0cXVldWVfa2ljayh2cSk7CiYjNDM7CQlpZiAodmktJmd0O3JlYWR5KQomIzQzOwkJCXZpcnRxdWV1ZV9raWNrKHZxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZpLSZndDtsb2NrLCBmbGFncyk7CiB9CkBAIC0zNTAsOCAmIzQzOzM1Myw5IEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJdmktJmd0O3JlYWR5ID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZpLSZndDtsb2NrLCBmbGFncyk7CiAKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh2aS0mZ3Q7aWRldik7CiYjNDM7CS8qIENhbGxiYWNrcyB1c2UgdmktJmd0O2lkZXYuICovCiAJdmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTsKJiM0MzsJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktJmd0O2lkZXYpOwogCXdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZpLSZndDtzdHMpKSAhPSBOVUxMKQogCQlrZnJlZShidWYpOwogCXZkZXYtJmd0O2NvbmZpZy0mZ3Q7ZGVsX3Zxcyh2ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jCmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwpAQCAtOTgsOCAmIzQzOzk4LDYgQEAgc3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJLyogRmx1c2ggb3V0IHRoZSBzdGF0dXMgd3JpdGUsIGFuZCBmbHVzaCBpbiBkZXZpY2Ugd3JpdGVzLAogCSAqIGluY2x1ZGluZyBNU2ktWCBpbnRlcnJ1cHRzLCBpZiBhbnkuICovCiAJdnBfbGVnYWN5X2dldF9zdGF0dXMoJmFtcDt2cF9kZXYtJmd0O2xkZXYpOwotCS8qIEZsdXNoIHBlbmRpbmcgVlEvY29uZmlndXJhdGlvbiBjYWxsYmFja3MuICovCi0JdnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTsKIH0KIAogc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKaW5kZXggNmQ4YWUyYTZhOGNhZi4uYzllMjEzMTdjNTFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jCkBAIC01NTksOSAmIzQzOzU1OSw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCQltc2xlZXAoMSk7CiAKIAl2cF9tb2Rlcm5fYXZxX2NsZWFudXAodmRldik7Ci0KLQkvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqLwotCXZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7CiB9CiAKIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwppbmRleCBkZTJhZjY5NmRlNmNhLi40ZjllNzBjMTMzMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiBzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlIHsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSB2ZGV2OwogCXN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYTsKJiM0MzsJcndsb2NrX3QgY2FsbGJhY2tfbG9jazsKIAl1NjQgZmVhdHVyZXM7CiB9OwogCkBAIC0xMjMsOCAmIzQzOzEyNCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpCiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpCiB7CiAJc3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlOwomIzQzOwlzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWlycXJldHVybl90IHJldDsKIAotCXJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpOwomIzQzOwl2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodnEtJmd0O3ZkZXYpOwomIzQzOwlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO3ZkX2Rldi0mZ3Q7Y2FsbGJhY2tfbG9jaywgZmxhZ3MpOwomIzQzOwlyZXQgPSB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpOwomIzQzOwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2ZGV2KTsKJiM0MzsKJiM0MzsJd3JpdGVfbG9ja19pcnEoJmFtcDt2ZF9kZXYtJmd0O2NhbGxiYWNrX2xvY2spOwomIzQzOwl3cml0ZV91bmxvY2tfaXJxKCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKgpAQCAtNDM5LDYgJiM0Mzs0NTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb192ZHBhX2NvbmZpZ19vcHMgPSB7CiAJLnJlc2V0CQk9IHZpcnRpb192ZHBhX3Jlc2V0LAogCS5maW5kX3Zxcwk9IHZpcnRpb192ZHBhX2ZpbmRfdnFzLAogCS5kZWxfdnFzCT0gdmlydGlvX3ZkcGFfZGVsX3ZxcywKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicywKIAkuZ2V0X2ZlYXR1cmVzCT0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLAogCS5maW5hbGl6ZV9mZWF0dXJlcyA9IHZpcnRpb192ZHBhX2ZpbmFsaXplX2ZlYXR1cmVzLAogCS5idXNfbmFtZQk9IHZpcnRpb192ZHBhX2J1c19uYW1lLApAQCAtNDcyLDYgJiM0Mzs0OTAsNyBAQCBzdGF0aWMgaW50IHZpcnRpb192ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKIAl2ZF9kZXYtJmd0O3ZkZXYuY29uZmlnID0gJmFtcDt2aXJ0aW9fdmRwYV9jb25maWdfb3BzOwogCXZkX2Rldi0mZ3Q7dmRldi5tYXAgPSB2ZHBhLSZndDttYXA7CiAJdmRfZGV2LSZndDt2ZHBhID0gdmRwYTsKJiM0MzsJcndsb2NrX2luaXQoJmFtcDt2ZF9kZXYtJmd0O2NhbGxiYWNrX2xvY2spOwogCiAJdmRfZGV2LSZndDt2ZGV2LmlkLmRldmljZSA9IG9wcy0mZ3Q7Z2V0X2RldmljZV9pZCh2ZHBhKTsKIAlpZiAodmRfZGV2LSZndDt2ZGV2LmlkLmRldmljZSA9PSAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaAppbmRleCBhNDQzNjg3MzdiMzlhLi5hZDZiY2NiZGZhYmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3JjdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZpcnRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIGVudW0gcnByb2NfZmVhdHVyZXMgewogICogQHJ2ZGV2czogbGlzdCBvZiByZW1vdGUgdmlydGlvIGRldmljZXMKICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZQogICogQG5vdGlmeWlkczogaWRyIGZvciBkeW5hbWljYWxseSBhc3NpZ25pbmcgcnByb2Mtd2lkZSB1bmlxdWUgbm90aWZ5IGlkcwomIzQzOyAqIEB2cV9zcmN1OiBTUkNVIGRvbWFpbiBmb3IgdmlydHF1ZXVlIGNhbGxiYWNrcwogICogQGluZGV4OiBpbmRleCBvZiB0aGlzIHJwcm9jIGRldmljZQogICogQGF0dGFjaF93b3JrOiB3b3JrcXVldWUgZm9yIGF0dGFjaGluZyBycHJvYwogICogQGNyYXNoX2hhbmRsZXI6IHdvcmtxdWV1ZSBmb3IgaGFuZGxpbmcgYSBjcmFzaApAQCAtMjc2LDYgJiM0MzsyNzgsNyBAQCBzdHJ1Y3QgcnByb2MgewogCXN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzOwogCXN0cnVjdCBsaXN0X2hlYWQgc3ViZGV2czsKIAlzdHJ1Y3QgaWRyIG5vdGlmeWlkczsKJiM0MzsJc3RydWN0IHNyY3Vfc3RydWN0IHZxX3NyY3U7CiAJaW50IGluZGV4OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3Jhc2hfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKaW5kZXggNjlmODRlYTg1ZDcxYS4uODY4NGExZTI2OGVlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKQEAgLTcxLDkgJiM0Mzs3MSw5IEBAIHN0cnVjdCB2aXJ0cXVldWVfaW5mbyB7CiAgKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvciBzdGF0dXMKICAqIEBkZWxfdnFzOiBmcmVlIHZpcnRxdWV1ZXMgZm91bmQgYnkgZmluZF92cXMoKS4KICAqIEBzeW5jaHJvbml6ZV9jYnM6IHN5bmNocm9uaXplIHdpdGggdGhlIHZpcnRxdWV1ZSBjYWxsYmFja3MgKG9wdGlvbmFsKQotICogICAgICBUaGUgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGUKLSAqICAgICAgcXVldWUgYmVmb3JlIGl0IGFyZSB2aXNpYmxlIHRvIHRoZSB2cmluZ19pbnRlcnJ1cHQoKSB0aGF0IGlzCi0gKiAgICAgIGNhbGxlZCBhZnRlciBpdC4KJiM0MzsgKiAgICAgIFdhaXQgZm9yIHJ1bm5pbmcgY2FsbGJhY2tzIHRvIGNvbXBsZXRlLiBNZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGUKJiM0MzsgKiAgICAgIHF1ZXVlIGJlZm9yZSB0aGlzIGNhbGwgbXVzdCBiZSB2aXNpYmxlIHRvIHZyaW5nX2ludGVycnVwdCgpIGNhbGxzCiYjNDM7ICogICAgICB0aGF0IGZvbGxvdyBpdC4KICAqICAgICAgdmRldjogdGhlIHZpcnRpb19kZXZpY2UKICAqIEBnZXRfZmVhdHVyZXM6IGdldCB0aGUgYXJyYXkgb2YgZmVhdHVyZSBiaXRzIGZvciB0aGlzIGRldmljZS4KICAqCXZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQzCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDE1MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0aW8gU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZml4IGZvciB0aGUgdmlydGlvIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGRldmljZSByZXNldCwgc2h1dGRvd24sIGFuZCByZW1vdmFsIHNjZW5hcmlvcy4gSXQgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHZhcmlldHkgb2YgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gdmlydHF1ZXVlIGNhbGxiYWNrcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCBkZXZpY2UgbGlmZWN5Y2xlIGV2ZW50cy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgYXJlYXM6CgoxLiAgYGFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNgOiBUaGlzIGFkZHMgYSBgdnVfc3luY2hyb25pemVfY2JzYCBjYWxsYmFjayB3aGljaCBjYWxscyBgc3luY2hyb25pemVfaXJxYC4gU3RyYWlnaHRmb3J3YXJkIElSUSBzeW5jaHJvbml6YXRpb24uCjIuICBgZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY2A6ICBUaGlzIG9uZSBhZGRzIGBtbHhiZl90bWZpZm9fdmlydGlvX3N5bmNocm9uaXplX2Nic2AgdGhhdCB0YWtlcyBhbmQgcmVsZWFzZXMgc3BpbmxvY2tzLiBTZWVtcyBsaWtlIHN0YW5kYXJkIHNwaW5sb2NrIHVzYWdlIHdpdGhpbiB0aGlzIGRyaXZlci4KMy4gIGBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNgLCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oYDogIFRoZSByZW1vdGVwcm9jIGNoYW5nZXMgYXJlIGludGVyZXN0aW5nLiBJdCBpbnRyb2R1Y2VzIGFuIGBzcmN1X3N0cnVjdGAgKGB2cV9zcmN1YCkgdG8gdGhlIGBycHJvY2Agc3RydWN0dXJlLCBpbml0aWFsaXppbmcgYW5kIGNsZWFuaW5nIGl0IHVwIGFwcHJvcHJpYXRlbHkuICBJdCB1c2VzIGBzcmN1X3JlYWRfbG9ja2AvYHVubG9ja2Agd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYWRkcyBhIGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYCB0aGF0IGNhbGxzIGBzeW5jaHJvbml6ZV9zcmN1YC4gVGhpcyBpcyBhIGNsYXNzaWMgU1JDVSB1c2FnZSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByZWFkcyBkdXJpbmcgcmVzZXQuCjQuICBgZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNgOiAgU29tZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnNgIGNoZWNrLCBhbmQgdGhlIHJlbW92YWwgb2YgYSBgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OYCBndWFyZCBhcm91bmQgc29tZSBsb2NraW5nLiAgSXQmIzM5O3MgbGlrZWx5IHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IHN5bmNocm9uaXphdGlvbiBsb2dpYyBnaXZlbiB0aGUgb3RoZXIgY2hhbmdlcy4KNS4gIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW8uY2A6ICBUaGUgY29yZSBjaGFuZ2UgaGVyZTogYWRkcyBhIGNhbGwgdG8gYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIHdpdGhpbiBgdmlydGlvX3Jlc2V0X2RldmljZWAgYW5kIGB2aXJ0aW9fZGV2aWNlX3NodXRkb3duYC4gVGhpcyBpcyB0aGUgaG9vayBmb3IgYWxsIHRoZSBvdGhlciBkcml2ZXJzIHRvIHJlZ2lzdGVyIHRoZWlyIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMuCjYuICBgZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNgOiAgQ2hhbmdlcyB0byB0aGUgZXZlbnQgaGFuZGxpbmcgdG8gY2hlY2sgdGhlIGB2aS0mZ3Q7cmVhZHlgIGZsYWcgYW5kIGVuc3VyZSBgdmlydHF1ZXVlX2tpY2tgIGlzIGNhbGxlZCBpbiB0aGUgcmlnaHQgb3JkZXIgYW5kIG1vZGlmaWVzIGRldmljZSB1bnJlZ2lzdHJhdGlvbiB0byB1c2UgYHZpcnRpb19yZXNldF9kZXZpY2VgLiBUaGlzIGZpeGVzIG9yZGVyaW5nIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIGRldmljZSByZXNldCBhbmQgaGVscHMgd2l0aCBlbnN1cmluZyB3ZSBkbyBub3QgdW5yZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlIHRvbyBlYXJseS4KNy4gIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jYCAmYW1wOyBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY2A6IFJlbW92aW5nIGNhbGxzIHRvIGB2cF9zeW5jaHJvbml6ZV92ZWN0b3JzYCBiZWNhdXNlIHRoZSBuZXcgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGhhbmRsZXMgaXQuCjguICBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY2A6IEFkZHMgYW4gYHJ3bG9ja190YCB0byB0aGUgYHZpcnRpb192ZHBhX2RldmljZWAgc3RydWN0LiAgSXQgcHJvdGVjdHMgYHZyaW5nX2ludGVycnVwdGAgd2l0aGluIGB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JgIHVzaW5nIGByZWFkX2xvY2tfaXJxc2F2ZWAvYHJlYWRfdW5sb2NrX2lycXJlc3RvcmVgIGFuZCBpbXBsZW1lbnRzIGB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNgIHVzaW5nIGB3cml0ZV9sb2NrX2lycWAvYHdyaXRlX3VubG9ja19pcnFgLiBTdGFuZGFyZCByZWFkLXdyaXRlIGxvY2sgdG8gbWFrZSBzdXJlIGNhbGxiYWNrcyBzeW5jaHJvbml6ZS4KOS4gIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGA6ICBBIHNpbXBsZSBjb21tZW50IHVwZGF0ZS4KCk5vdywgZnJvbSBhIHNhZmV0eSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBpbXBvcnRhbnQ6IHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFib3V0ICpzeW5jaHJvbml6YXRpb24qLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBkaXJlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS4gSXTigJlzIGFsbCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIElSUSBzeW5jaHJvbml6YXRpb24uCgpTbywgZG9lcyBpdCBuZWVkIEtNU0FOPyBObywgYmVjYXVzZSBLTVNBTiBpcyBiZXN0IHN1aXRlZCB0byBmaW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgaGVyZSBhcmUgS0FTQU4vTE9DS0RFUCByZWxhdGVkLCBpbiB0aGF0IEtBU0FOIGRldGVjdHMgdGhlIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUsIHdoaWxlIExPQ0tERVAgZGV0ZWN0cyB0aGUgbG9ja2luZyBpc3N1ZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKSGVyZSYjMzk7cyBteSByZWFzb25pbmcgZm9yIHRoZSBgS01TQU5SZWFzb25pbmdgOgoKJmd0OyBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gdmlydGlvIGRldmljZSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlc2V0LCBzaHV0ZG93biwgYW5kIHRlYXJkb3duIGFjcm9zcyB2YXJpb3VzIHZpcnRpbyB0cmFuc3BvcnRzIGFuZCBzdWJzeXN0ZW1zIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpLiBJdCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvbgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGNhbGxiYWNrIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIChzeW5jaHJvbml6ZV9jYnMpIGFjcm9zcyB2YXJpb3VzIFZpcnRJTyB0cmFuc3BvcnRzIGFuZCBkcml2ZXJzIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpIHRvIGVuc3VyZSB0aGF0IHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyBjb21wbGV0ZSBiZWZvcmUgdmlydGlvIGRldmljZSByZXNldCwgc2h1dGRvd24sIG9yIHVucmVnaXN0cmF0aW9uLlxuXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxuMS4gU3luY2hyb25pemF0aW9uIGFuZCBDb25jdXJyZW5jeTogVGhlIGNoYW5nZXMgYWRkIFNSQ1UgKGB2cV9zcmN1YCksIHJ3bG9ja3MgKGBjYWxsYmFja19sb2NrYCksIHNwaW5sb2NrIGZsdXNoZXMsIGFuZCBJUlEgc3luY2hyb25pemF0aW9uIHRvIGVsaW1pbmF0ZSByYWNlcyB3aGVyZSB2aXJ0cXVldWUgY2FsbGJhY2tzIGV4ZWN1dGUgY29uY3VycmVudGx5IGR1cmluZyB0ZWFyZG93bi5cbjIuIEZhaWx1cmUgTW9kZXM6IFBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgaW52b2x2ZSBsb2NraW5nIGlzc3VlcyAoZS5nLiwgZGVhZGxvY2tzLCBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dCkgb3IgdXNlLWFmdGVyLWZyZWUvcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxuXG5Db25zZXF1ZW50bHksIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGZ1enppbmcgYnVpbGRzIGFyZSBmdWxseSBhZGVxdWF0ZSB0byB0ZXN0IHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cblxuS2V5IHBvaW50cyByZWdhcmRpbmcgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTpcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCB0b3VjaCB1c2VyLWNvcHkgYm91bmRhcmllcyBvciBuZXRsaW5rL2lvY3RsIG91dHB1dCBidWZmZXJzLCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgYWxsIG5ldyBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAoYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS5cblxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzowOC4xOTg2ODMyMzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzUxNzc1MDU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9cIixcbiAgICBcIlZJUlRJT19QQ0lcIixcbiAgICBcIlZJUlRJT19WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWSVJUSU9fSU5QVVRcIixcbiAgICBcIlJFTU9URVBST0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0aW9fcmVzZXRfZGV2aWNlXCIsXG4gICAgXCJ2aXJ0aW9fZGV2aWNlX3NodXRkb3duXCIsXG4gICAgXCJ2aXJ0aW5wdXRfcmVjdl9ldmVudHNcIixcbiAgICBcInZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYlwiLFxuICAgIFwidmlydGlvX3ZkcGFfc3luY2hyb25pemVfY2JzXCIsXG4gICAgXCJycHJvY192cV9pbnRlcnJ1cHRcIixcbiAgICBcInJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnNcIixcbiAgICBcInJwcm9jX2FsbG9jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cXG5cXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXFxuMi4gRmFpbHVyZSBNb2RlczogUG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBpbnZvbHZlIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBkZWFkbG9ja3MsIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KSBvciB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxcblxcbkNvbnNlcXVlbnRseSwgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZnV6emluZyBidWlsZHMgYXJlIGZ1bGx5IGFkZXF1YXRlIHRvIHRlc3QgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MDguMTk4Njg3NDE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyNTM1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzVjMDgzMTZiNjNkYTkyMzExYjZjY2Y4ZWNjY2MwNGJiMDk5Y2RmNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXFxuaW5kZXggNzQyNWE4NTQ4MTQxYS4uYmFjYTZiMDllOWFjMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXFxuKysrIGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICAqXFxuICAqIEJhc2VkIG9uIFZpcnRpbyBNTUlPIGRyaXZlciBieSBQYXdlbCBNb2xsLCBjb3B5cmlnaHQgMjAxMS0yMDE0LCBBUk0gTHRkLlxcbiAgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuQEAgLTg2OSw2ICs4NzAsMTQgQEAgc3RhdGljIHZvaWQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuIFxcdHZ1X2Rldi1cXHUwMDNlc3RhdHVzID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdnVfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7XFxuK1xcbitcXHRpZiAodnVfZGV2LVxcdTAwM2VpcnEgXFx1MDAzZT0gMClcXG4rXFx0XFx0c3luY2hyb25pemVfaXJxKHZ1X2Rldi1cXHUwMDNlaXJxKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxcbiB7XFxuIFxcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cXHUwMDNlcHJpdjtcXG5AQCAtMTEyMSw2ICsxMTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdW1sX2NvbmZpZ19vcHMgPSB7XFxuIFxcdC5yZXNldCA9IHZ1X3Jlc2V0LFxcbiBcXHQuZmluZF92cXMgPSB2dV9maW5kX3ZxcyxcXG4gXFx0LmRlbF92cXMgPSB2dV9kZWxfdnFzLFxcbitcXHQuc3luY2hyb25pemVfY2JzID0gdnVfc3luY2hyb25pemVfY2JzLFxcbiBcXHQuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLFxcbiBcXHQuZmluYWxpemVfZmVhdHVyZXMgPSB2dV9maW5hbGl6ZV9mZWF0dXJlcyxcXG4gXFx0LmJ1c19uYW1lID0gdnVfYnVzX25hbWUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jXFxuaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jXFxuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xcbkBAIC0xMTM1LDYgKzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gXFx0dG1fdmRldi1cXHUwMDNlc3RhdHVzID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XFxuK1xcdHN0cnVjdCBtbHhiZl90bWZpZm8gKmZpZm8gPSB0bV92ZGV2LVxcdTAwM2V2cmluZ3NbMF0uZmlmbztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmaWZvLVxcdTAwM2VzcGluX2xvY2spOyBpKyspIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmZpZm8tXFx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmaWZvLVxcdTAwM2VzcGluX2xvY2tbaV0sIGZsYWdzKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXFxuIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcXG5AQCAtMTE3OSw2ICsxMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBtbHhiZl90bWZpZm9fdmlydGlvX2NvbmZpZ19vcHMgPSB7XFxuIFxcdC5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsXFxuIFxcdC5kZWxfdnFzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19kZWxfdnFzLFxcbiBcXHQucmVzZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0LFxcbitcXHQuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXFxuIFxcdC5zZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzLFxcbiBcXHQuZ2V0X3N0YXR1cyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0X3N0YXR1cyxcXG4gXFx0LmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNcXG5pbmRleCAxZWQ0MDY3MTQ4NDkxLi4xYjEzOWQyNWFiMmJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xcbkBAIC0yNDEwLDYgKzI0MTAsNyBAQCBzdGF0aWMgdm9pZCBycHJvY190eXBlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXG4gXFx0ZGV2X2luZm8oXFx1MDAyNnJwcm9jLVxcdTAwM2VkZXYsIFxcXCJyZWxlYXNpbmcgJXNcXFxcblxcXCIsIHJwcm9jLVxcdTAwM2VuYW1lKTtcXG4gXFxuK1xcdGNsZWFudXBfc3JjdV9zdHJ1Y3QoXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KTtcXG4gXFx0aWRyX2Rlc3Ryb3koXFx1MDAyNnJwcm9jLVxcdTAwM2Vub3RpZnlpZHMpO1xcbiBcXG4gXFx0aWYgKHJwcm9jLVxcdTAwM2VpbmRleCBcXHUwMDNlPSAwKVxcbkBAIC0yNTA3LDYgKzI1MDgsMTEgQEAgc3RydWN0IHJwcm9jICpycHJvY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdGlmICghcnByb2MpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KSkge1xcbitcXHRcXHRrZnJlZShycHJvYyk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRycHJvYy1cXHUwMDNlcHJpdiA9IFxcdTAwMjZycHJvY1sxXTtcXG4gXFx0cnByb2MtXFx1MDAzZWF1dG9fYm9vdCA9IHRydWU7XFxuIFxcdHJwcm9jLVxcdTAwM2VlbGZfY2xhc3MgPSBFTEZDTEFTU05PTkU7XFxuQEAgLTI1NzEsNiArMjU3Nyw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfYWxsb2MpO1xcbiAgKlxcbiAgKiBJZiBubyBvbmUgaG9sZHMgYW55IHJlZmVyZW5jZSB0byBycHJvYyBhbnltb3JlLCB0aGVuIGl0cyByZWZjb3VudCB3b3VsZFxcbiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuXFxuKyAqXFxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCBpZiB0aGlzIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZS5cXG4gICovXFxuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxcbiB7XFxuQEAgLTI1ODYsNiArMjU5NCw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfZnJlZSk7XFxuICAqXFxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXFxuICAqIG5vdyBkcm9wIHRvIHplcm8sIGFuZCBpdCB3b3VsZCBiZSBmcmVlZC5cXG4rICpcXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxcbiAgKi9cXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcXG4ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXFxuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xcbisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3JjdS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInJlbW90ZXByb2NfaW50ZXJuYWwuaFxcXCJcXG4gXFxuQEAgLTg5LDE0ICs5MCwxOSBAQCBzdGF0aWMgYm9vbCBycHJvY192aXJ0aW9fbm90aWZ5KHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxcbiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKVxcbiB7XFxuIFxcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xcbitcXHRpbnQgc3JjdV9pZHg7XFxuK1xcdGlycXJldHVybl90IHJldDtcXG4rXFxuK1xcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KTtcXG4gXFxuIFxcdGRldl9kYmcoXFx1MDAyNnJwcm9jLVxcdTAwM2VkZXYsIFxcXCJ2cSBpbmRleCAlZCBpcyBpbnRlcnJ1cHRlZFxcXFxuXFxcIiwgbm90aWZ5aWQpO1xcbiBcXG4gXFx0cnZyaW5nID0gaWRyX2ZpbmQoXFx1MDAyNnJwcm9jLVxcdTAwM2Vub3RpZnlpZHMsIG5vdGlmeWlkKTtcXG4tXFx0aWYgKCFydnJpbmcgfHwgIXJ2cmluZy1cXHUwMDNldnEpXFxuLVxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFx0cmV0ID0gcnZyaW5nIFxcdTAwMjZcXHUwMDI2IHJ2cmluZy1cXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVxcdTAwM2V2cSkgOiBJUlFfTk9ORTtcXG4rXFxuK1xcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XFxuIFxcbi1cXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cXHUwMDNldnEpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocnByb2NfdnFfaW50ZXJydXB0KTtcXG4gXFxuQEAgLTI0Miw2ICsyNDgsMTMgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRkZXZfZGJnKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIFxcXCJyZXNldCAhXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTtcXG4rXFxuK1xcdHN5bmNocm9uaXplX3NyY3UoXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KTtcXG4rfVxcbitcXG4gLyogcHJvdmlkZSB0aGUgdmRldiBmZWF0dXJlcyBhcyByZXRyaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUgKi9cXG4gc3RhdGljIHU2NCBycHJvY192aXJ0aW9fZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiB7XFxuQEAgLTMzMCw2ICszNDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHJwcm9jX3ZpcnRpb19jb25maWdfb3BzID0ge1xcbiBcXHQuZmluZF92cXNcXHQ9IHJwcm9jX3ZpcnRpb19maW5kX3ZxcyxcXG4gXFx0LmRlbF92cXNcXHQ9IHJwcm9jX3ZpcnRpb19kZWxfdnFzLFxcbiBcXHQucmVzZXRcXHRcXHQ9IHJwcm9jX3ZpcnRpb19yZXNldCxcXG4rXFx0LnN5bmNocm9uaXplX2NicyA9IHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXFxuIFxcdC5zZXRfc3RhdHVzXFx0PSBycHJvY192aXJ0aW9fc2V0X3N0YXR1cyxcXG4gXFx0LmdldF9zdGF0dXNcXHQ9IHJwcm9jX3ZpcnRpb19nZXRfc3RhdHVzLFxcbiBcXHQuZ2V0XFx0XFx0PSBycHJvY192aXJ0aW9fZ2V0LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXFxuaW5kZXggYmFiNmNhZDNmZDVjZS4uNTUyZDc3OTk4MDEyOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuY1xcbisrKyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXFxuQEAgLTEwNjIsNyArMTA2Miw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlycV9pbmZvICppbmZvID0gdmNkZXYtXFx1MDAzZWFpcnFfaW5mbztcXG4gXFxuLVxcdGlmIChpbmZvKSB7XFxuK1xcdGlmICh2Y2Rldi1cXHUwMDNlaXNfdGhpbmludCBcXHUwMDI2XFx1MDAyNiBpbmZvKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoaXMgZGV2aWNlIHVzZXMgYWRhcHRlciBpbnRlcnJ1cHRzOiBzeW5jaHJvbml6ZSB3aXRoXFxuIFxcdFxcdCAqIHZyaW5nX2ludGVycnVwdCgpIGNhbGxlZCBieSB2aXJ0aW9fYWlycV9oYW5kbGVyKClcXG5AQCAtMTIwNCwxMyArMTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxcbiBcXHRcXHRcXHR2Y2Rldi1cXHUwMDNlZXJyID0gLUVJTztcXG4gXFx0fVxcbiBcXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XFxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4gXFx0LypcXG4gXFx0ICogUGFpcmVkIHdpdGggdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoKSBhbmQgaW50ZXJydXB0cyBhcmVcXG4gXFx0ICogZGlzYWJsZWQgaGVyZS5cXG4gXFx0ICovXFxuIFxcdHJlYWRfbG9jayhcXHUwMDI2dmNkZXYtXFx1MDAzZWlycV9sb2NrKTtcXG4tI2VuZGlmXFxuIFxcdGZvcl9lYWNoX3NldF9iaXQoaSwgaW5kaWNhdG9ycyh2Y2RldiksXFxuIFxcdFxcdFxcdCBzaXplb2YoKmluZGljYXRvcnModmNkZXYpKSAqIEJJVFNfUEVSX0JZVEUpIHtcXG4gXFx0XFx0LyogVGhlIGJpdCBjbGVhciBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIHZyaW5nIGtpY2suICovXFxuQEAgLTEyMTksOSArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsXFxuIFxcdFxcdHZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpO1xcbiBcXHRcXHR2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xcbiBcXHR9XFxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4gXFx0cmVhZF91bmxvY2soXFx1MDAyNnZjZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuLSNlbmRpZlxcbiBcXHRpZiAodGVzdF9iaXQoMCwgaW5kaWNhdG9yczIodmNkZXYpKSkge1xcbiBcXHRcXHR2aXJ0aW9fY29uZmlnX2NoYW5nZWQoXFx1MDAyNnZjZGV2LVxcdTAwM2V2ZGV2KTtcXG4gXFx0XFx0Y2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcXG5pbmRleCA3NWJiNGZmZTNiODc3Li5hZDFjNTBiOGE5NGVjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jXFxuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcXG5AQCAtMjY0LDYgKzI2NCw3IEBAIHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxcbiAjZW5kaWZcXG4gXFxuIFxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbitcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XFxuIFxcbkBAIC00MjQsNiArNDI1LDcgQEAgdm9pZCB2aXJ0aW9fZGV2aWNlX3NodXRkb3duKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuIFxcdCAqIFNvbWUgZGV2aWNlcyBnZXQgd2VkZ2VkIGlmIHRoaXMgaGFwcGVucywgc28gcmVzZXQgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90LlxcbiBcXHQgKi9cXG4gXFx0ZGV2LVxcdTAwM2Vjb25maWctXFx1MDAzZXJlc2V0KGRldik7XFxuK1xcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3NodXRkb3duKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNcXG5pbmRleCBkZWVjMjRlOGU2ODI4Li43YjY1NGFmMGE0MmNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXFxuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNcXG5AQCAtNDksOSArNDksMTIgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3ZfZXZlbnRzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxcbiBcXHRcXHRcXHRcXHQgICAgbGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZWNvZGUpLFxcbiBcXHRcXHRcXHRcXHQgICAgbGUzMl90b19jcHUoZXZlbnQtXFx1MDAzZXZhbHVlKSk7XFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAoIXZpLVxcdTAwM2VyZWFkeSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHZpcnRpbnB1dF9xdWV1ZV9ldnRidWYodmksIGV2ZW50KTtcXG4gXFx0XFx0fVxcbi1cXHRcXHR2aXJ0cXVldWVfa2ljayh2cSk7XFxuK1xcdFxcdGlmICh2aS1cXHUwMDNlcmVhZHkpXFxuK1xcdFxcdFxcdHZpcnRxdWV1ZV9raWNrKHZxKTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiB9XFxuQEAgLTM1MCw4ICszNTMsOSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHR2aS1cXHUwMDNlcmVhZHkgPSBmYWxzZTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVxcdTAwM2VpZGV2KTtcXG4rXFx0LyogQ2FsbGJhY2tzIHVzZSB2aS1cXHUwMDNlaWRldi4gKi9cXG4gXFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4rXFx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXFx1MDAzZWlkZXYpO1xcbiBcXHR3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2aS1cXHUwMDNlc3RzKSkgIT0gTlVMTClcXG4gXFx0XFx0a2ZyZWUoYnVmKTtcXG4gXFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xcbmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xcbisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNcXG5AQCAtOTgsOCArOTgsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gXFx0LyogRmx1c2ggb3V0IHRoZSBzdGF0dXMgd3JpdGUsIGFuZCBmbHVzaCBpbiBkZXZpY2Ugd3JpdGVzLFxcbiBcXHQgKiBpbmNsdWRpbmcgTVNpLVggaW50ZXJydXB0cywgaWYgYW55LiAqL1xcbiBcXHR2cF9sZWdhY3lfZ2V0X3N0YXR1cyhcXHUwMDI2dnBfZGV2LVxcdTAwM2VsZGV2KTtcXG4tXFx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cXG4tXFx0dnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xcbmluZGV4IDZkOGFlMmE2YThjYWYuLmM5ZTIxMzE3YzUxYTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xcbisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmNcXG5AQCAtNTU5LDkgKzU1OSw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRcXHRtc2xlZXAoMSk7XFxuIFxcbiBcXHR2cF9tb2Rlcm5fYXZxX2NsZWFudXAodmRldik7XFxuLVxcbi1cXHQvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqL1xcbi1cXHR2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZwX2FjdGl2ZV92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdTE2IG1zaXhfdmVjKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY1xcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiBzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlIHtcXG4gXFx0c3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjtcXG4gXFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhO1xcbitcXHRyd2xvY2tfdCBjYWxsYmFja19sb2NrO1xcbiBcXHR1NjQgZmVhdHVyZXM7XFxuIH07XFxuIFxcbkBAIC0xMjMsOCArMTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcXG4gc3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKVxcbiB7XFxuIFxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpcnFyZXR1cm5fdCByZXQ7XFxuIFxcbi1cXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHZxKTtcXG4rXFx0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVxcdTAwM2V2ZGV2KTtcXG4rXFx0cmVhZF9sb2NrX2lycXNhdmUoXFx1MDAyNnZkX2Rldi1cXHUwMDNlY2FsbGJhY2tfbG9jaywgZmxhZ3MpO1xcbitcXHRyZXQgPSB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xcbitcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodmRldik7XFxuK1xcbitcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrKTtcXG4rXFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKlxcbkBAIC00MzksNiArNDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xcbiBcXHQucmVzZXRcXHRcXHQ9IHZpcnRpb192ZHBhX3Jlc2V0LFxcbiBcXHQuZmluZF92cXNcXHQ9IHZpcnRpb192ZHBhX2ZpbmRfdnFzLFxcbiBcXHQuZGVsX3Zxc1xcdD0gdmlydGlvX3ZkcGFfZGVsX3ZxcyxcXG4rXFx0LnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyxcXG4gXFx0LmdldF9mZWF0dXJlc1xcdD0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLFxcbiBcXHQuZmluYWxpemVfZmVhdHVyZXMgPSB2aXJ0aW9fdmRwYV9maW5hbGl6ZV9mZWF0dXJlcyxcXG4gXFx0LmJ1c19uYW1lXFx0PSB2aXJ0aW9fdmRwYV9idXNfbmFtZSxcXG5AQCAtNDcyLDYgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxcbiBcXHR2ZF9kZXYtXFx1MDAzZXZkZXYuY29uZmlnID0gXFx1MDAyNnZpcnRpb192ZHBhX2NvbmZpZ19vcHM7XFxuIFxcdHZkX2Rldi1cXHUwMDNldmRldi5tYXAgPSB2ZHBhLVxcdTAwM2VtYXA7XFxuIFxcdHZkX2Rldi1cXHUwMDNldmRwYSA9IHZkcGE7XFxuK1xcdHJ3bG9ja19pbml0KFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZWNhbGxiYWNrX2xvY2spO1xcbiBcXG4gXFx0dmRfZGV2LVxcdTAwM2V2ZGV2LmlkLmRldmljZSA9IG9wcy1cXHUwMDNlZ2V0X2RldmljZV9pZCh2ZHBhKTtcXG4gXFx0aWYgKHZkX2Rldi1cXHUwMDNldmRldi5pZC5kZXZpY2UgPT0gMClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxcbmluZGV4IGE0NDM2ODczN2IzOWEuLmFkNmJjY2JkZmFiYzAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcmN1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92aXJ0aW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG5AQCAtMjMwLDYgKzIzMSw3IEBAIGVudW0gcnByb2NfZmVhdHVyZXMge1xcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xcbiAgKiBAc3ViZGV2czogbGlzdCBvZiBzdWJkZXZpY2VzLCB0byBmb2xsb3dpbmcgdGhlIHJ1bm5pbmcgc3RhdGVcXG4gICogQG5vdGlmeWlkczogaWRyIGZvciBkeW5hbWljYWxseSBhc3NpZ25pbmcgcnByb2Mtd2lkZSB1bmlxdWUgbm90aWZ5IGlkc1xcbisgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3NcXG4gICogQGluZGV4OiBpbmRleCBvZiB0aGlzIHJwcm9jIGRldmljZVxcbiAgKiBAYXR0YWNoX3dvcms6IHdvcmtxdWV1ZSBmb3IgYXR0YWNoaW5nIHJwcm9jXFxuICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2hcXG5AQCAtMjc2LDYgKzI3OCw3IEBAIHN0cnVjdCBycHJvYyB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7XFxuIFxcdHN0cnVjdCBpZHIgbm90aWZ5aWRzO1xcbitcXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcXG4gXFx0aW50IGluZGV4O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXR0YWNoX3dvcms7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oXFxuaW5kZXggNjlmODRlYTg1ZDcxYS4uODY4NGExZTI2OGVlMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oXFxuQEAgLTcxLDkgKzcxLDkgQEAgc3RydWN0IHZpcnRxdWV1ZV9pbmZvIHtcXG4gICpcXHRSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvciBzdGF0dXNcXG4gICogQGRlbF92cXM6IGZyZWUgdmlydHF1ZXVlcyBmb3VuZCBieSBmaW5kX3ZxcygpLlxcbiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbClcXG4tICogICAgICBUaGUgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGVcXG4tICogICAgICBxdWV1ZSBiZWZvcmUgaXQgYXJlIHZpc2libGUgdG8gdGhlIHZyaW5nX2ludGVycnVwdCgpIHRoYXQgaXNcXG4tICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuXFxuKyAqICAgICAgV2FpdCBmb3IgcnVubmluZyBjYWxsYmFja3MgdG8gY29tcGxldGUuIE1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZVxcbisgKiAgICAgIHF1ZXVlIGJlZm9yZSB0aGlzIGNhbGwgbXVzdCBiZSB2aXNpYmxlIHRvIHZyaW5nX2ludGVycnVwdCgpIGNhbGxzXFxuKyAqICAgICAgdGhhdCBmb2xsb3cgaXQuXFxuICAqICAgICAgdmRldjogdGhlIHZpcnRpb19kZXZpY2VcXG4gICogQGdldF9mZWF0dXJlczogZ2V0IHRoZSBhcnJheSBvZiBmZWF0dXJlIGJpdHMgZm9yIHRoaXMgZGV2aWNlLlxcbiAgKlxcdHZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjA5Ljc0MzA2MTE1NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTA1ODQ0NDIyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVElPXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJWSVJUSU9fVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVklSVElPX0lOUFVUXCIsXG4gICAgXCJSRU1PVEVQUk9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydGlvX3Jlc2V0X2RldmljZVwiLFxuICAgIFwidmlydGlvX2RldmljZV9zaHV0ZG93blwiLFxuICAgIFwidmlydGlucHV0X3JlY3ZfZXZlbnRzXCIsXG4gICAgXCJ2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JcIixcbiAgICBcInZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic1wiLFxuICAgIFwicnByb2NfdnFfaW50ZXJydXB0XCIsXG4gICAgXCJycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzXCIsXG4gICAgXCJycHJvY19hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duIGhhbmRsaW5nIGFjcm9zcyBjb3JlIHZpcnRpbywgdmlydGlvLWlucHV0LCB2aXJ0aW8tdmRwYSwgYW5kIHJlbW90ZXByb2MgdG8gcHJvcGVybHkgc3luY2hyb25pemUgcnVubmluZyB2aXJ0cXVldWUgY2FsbGJhY2tzIHVzaW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChTUkNVIGluIHJlbW90ZXByb2MsIHJ3bG9jayBpbiB2aXJ0aW9fdmRwYSwgYW5kIHN5bmNocm9uaXplX2NicyBpbiB2aXJ0aW8gY29yZSkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsIGJ1cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNcbmluZGV4IDc0MjVhODU0ODE0MWEuLmJhY2E2YjA5ZTlhYzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG4rKysgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICAqXG4gICogQmFzZWQgb24gVmlydGlvIE1NSU8gZHJpdmVyIGJ5IFBhd2VsIE1vbGwsIGNvcHlyaWdodCAyMDExLTIwMTQsIEFSTSBMdGQuXG4gICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuQEAgLTg2OSw2ICs4NzAsMTQgQEAgc3RhdGljIHZvaWQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHR2dV9kZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdnVfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuK3tcbitcdHN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7XG4rXG4rXHRpZiAodnVfZGV2LVx1MDAzZWlycSBcdTAwM2U9IDApXG4rXHRcdHN5bmNocm9uaXplX2lycSh2dV9kZXYtXHUwMDNlaXJxKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cdTAwM2Vwcml2O1xuQEAgLTExMjEsNiArMTEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3VtbF9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0ID0gdnVfcmVzZXQsXG4gXHQuZmluZF92cXMgPSB2dV9maW5kX3ZxcyxcbiBcdC5kZWxfdnFzID0gdnVfZGVsX3ZxcyxcbitcdC5zeW5jaHJvbml6ZV9jYnMgPSB2dV9zeW5jaHJvbml6ZV9jYnMsXG4gXHQuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdnVfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWUgPSB2dV9idXNfbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jIGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbkBAIC0xMTM1LDYgKzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHRtX3ZkZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XG4rXHRzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvID0gdG1fdmRldi1cdTAwM2V2cmluZ3NbMF0uZmlmbztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmlmby1cdTAwM2VzcGluX2xvY2spOyBpKyspIHtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmlmby1cdTAwM2VzcGluX2xvY2tbaV0sIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuK1x0fVxuK31cbitcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXG4gc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcbkBAIC0xMTc5LDYgKzExOTIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIG1seGJmX3RtZmlmb192aXJ0aW9fY29uZmlnX29wcyA9IHtcbiBcdC5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsXG4gXHQuZGVsX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZGVsX3ZxcyxcbiBcdC5yZXNldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXG4gXHQuc2V0X3N0YXR1cyA9IG1seGJmX3RtZmlmb192aXJ0aW9fc2V0X3N0YXR1cyxcbiBcdC5nZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfc3RhdHVzLFxuIFx0LmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuaW5kZXggMWVkNDA2NzE0ODQ5MS4uMWIxMzlkMjVhYjJiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG5AQCAtMjQxMCw2ICsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCJyZWxlYXNpbmcgJXNcXG5cIiwgcnByb2MtXHUwMDNlbmFtZSk7XG4gXG4rXHRjbGVhbnVwX3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuIFx0aWRyX2Rlc3Ryb3koXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzKTtcbiBcbiBcdGlmIChycHJvYy1cdTAwM2VpbmRleCBcdTAwM2U9IDApXG5AQCAtMjUwNyw2ICsyNTA4LDExIEBAIHN0cnVjdCBycHJvYyAqcnByb2NfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0aWYgKCFycHJvYylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KSkge1xuK1x0XHRrZnJlZShycHJvYyk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuIFx0cnByb2MtXHUwMDNlcHJpdiA9IFx1MDAyNnJwcm9jWzFdO1xuIFx0cnByb2MtXHUwMDNlYXV0b19ib290ID0gdHJ1ZTtcbiBcdHJwcm9jLVx1MDAzZWVsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTtcbkBAIC0yNTcxLDYgKzI1NzcsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2FsbG9jKTtcbiAgKlxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXG4gICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLlxuKyAqXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxuICAqL1xuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuIHtcbkBAIC0yNTg2LDYgKzI1OTQsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2ZyZWUpO1xuICAqXG4gICogSWYgbm8gb25lIGhvbGRzIGFueSByZWZlcmVuY2UgdG8gcnByb2MgYW55bW9yZSwgdGhlbiBpdHMgcmVmY291bnQgd291bGRcbiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuXG4rICpcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuXG4gICovXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVtb3RlcHJvY19pbnRlcm5hbC5oXCJcbiBcbkBAIC04OSwxNCArOTAsMTkgQEAgc3RhdGljIGJvb2wgcnByb2NfdmlydGlvX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKVxuIHtcbiBcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xuK1x0aW50IHNyY3VfaWR4O1xuK1x0aXJxcmV0dXJuX3QgcmV0O1xuK1xuK1x0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KTtcbiBcbiBcdGRldl9kYmcoXHUwMDI2cnByb2MtXHUwMDNlZGV2LCBcInZxIGluZGV4ICVkIGlzIGludGVycnVwdGVkXFxuXCIsIG5vdGlmeWlkKTtcbiBcbiBcdHJ2cmluZyA9IGlkcl9maW5kKFx1MDAyNnJwcm9jLVx1MDAzZW5vdGlmeWlkcywgbm90aWZ5aWQpO1xuLVx0aWYgKCFydnJpbmcgfHwgIXJ2cmluZy1cdTAwM2V2cSlcbi1cdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuK1xuK1x0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XG4gXG4tXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cdTAwM2V2cSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gXG5AQCAtMjQyLDYgKzI0OCwxMyBAQCBzdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRkZXZfZGJnKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCBcInJlc2V0ICFcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHJwcm9jICpycHJvYyA9IHZkZXZfdG9fcnByb2ModmRldik7XG4rXG4rXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuK31cbitcbiAvKiBwcm92aWRlIHRoZSB2ZGV2IGZlYXR1cmVzIGFzIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZSAqL1xuIHN0YXRpYyB1NjQgcnByb2NfdmlydGlvX2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiB7XG5AQCAtMzMwLDYgKzM0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgcnByb2NfdmlydGlvX2NvbmZpZ19vcHMgPSB7XG4gXHQuZmluZF92cXNcdD0gcnByb2NfdmlydGlvX2ZpbmRfdnFzLFxuIFx0LmRlbF92cXNcdD0gcnByb2NfdmlydGlvX2RlbF92cXMsXG4gXHQucmVzZXRcdFx0PSBycHJvY192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzXHQ9IHJwcm9jX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXNcdD0gcnByb2NfdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0XHRcdD0gcnByb2NfdmlydGlvX2dldCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5pbmRleCBiYWI2Y2FkM2ZkNWNlLi41NTJkNzc5OTgwMTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNcbisrKyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5AQCAtMTA2Miw3ICsxMDYyLDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpO1xuIFx0c3RydWN0IGFpcnFfaW5mbyAqaW5mbyA9IHZjZGV2LVx1MDAzZWFpcnFfaW5mbztcbiBcbi1cdGlmIChpbmZvKSB7XG4rXHRpZiAodmNkZXYtXHUwMDNlaXNfdGhpbmludCBcdTAwMjZcdTAwMjYgaW5mbykge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIGRldmljZSB1c2VzIGFkYXB0ZXIgaW50ZXJydXB0czogc3luY2hyb25pemUgd2l0aFxuIFx0XHQgKiB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsZWQgYnkgdmlydGlvX2FpcnFfaGFuZGxlcigpXG5AQCAtMTIwNCwxMyArMTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHRcdHZjZGV2LVx1MDAzZWVyciA9IC1FSU87XG4gXHR9XG4gXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XG4tI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuIFx0LypcbiBcdCAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlXG4gXHQgKiBkaXNhYmxlZCBoZXJlLlxuIFx0ICovXG4gXHRyZWFkX2xvY2soXHUwMDI2dmNkZXYtXHUwMDNlaXJxX2xvY2spO1xuLSNlbmRpZlxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSxcbiBcdFx0XHQgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7XG4gXHRcdC8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqL1xuQEAgLTEyMTksOSArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsXG4gXHRcdHZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpO1xuIFx0XHR2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnZjZGV2LVx1MDAzZWlycV9sb2NrKTtcbi0jZW5kaWZcbiBcdGlmICh0ZXN0X2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpKSB7XG4gXHRcdHZpcnRpb19jb25maWdfY2hhbmdlZChcdTAwMjZ2Y2Rldi1cdTAwM2V2ZGV2KTtcbiBcdFx0Y2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuaW5kZXggNzViYjRmZmUzYjg3Ny4uYWQxYzUwYjhhOTRlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuQEAgLTI2NCw2ICsyNjQsNyBAQCB2b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbiAjZW5kaWZcbiBcbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XG4gXG5AQCAtNDI0LDYgKzQyNSw3IEBAIHZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuIFx0ICogU29tZSBkZXZpY2VzIGdldCB3ZWRnZWQgaWYgdGhpcyBoYXBwZW5zLCBzbyByZXNldCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QuXG4gXHQgKi9cbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX2RldmljZV9zaHV0ZG93bik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuaW5kZXggZGVlYzI0ZThlNjgyOC4uN2I2NTRhZjBhNDJjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShldmVudC1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShldmVudC1cdTAwM2V2YWx1ZSkpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHRpZiAoIXZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0dmlydGlucHV0X3F1ZXVlX2V2dGJ1Zih2aSwgZXZlbnQpO1xuIFx0XHR9XG4tXHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbitcdFx0aWYgKHZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0zNTAsOCArMzUzLDkgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHZpLVx1MDAzZXJlYWR5ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuK1x0LyogQ2FsbGJhY2tzIHVzZSB2aS1cdTAwM2VpZGV2LiAqL1xuIFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcbitcdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuIFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXHUwMDNlc3RzKSkgIT0gTlVMTClcbiBcdFx0a2ZyZWUoYnVmKTtcbiBcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNcbmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG5AQCAtOTgsOCArOTgsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdC8qIEZsdXNoIG91dCB0aGUgc3RhdHVzIHdyaXRlLCBhbmQgZmx1c2ggaW4gZGV2aWNlIHdyaXRlcyxcbiBcdCAqIGluY2x1ZGluZyBNU2ktWCBpbnRlcnJ1cHRzLCBpZiBhbnkuICovXG4gXHR2cF9sZWdhY3lfZ2V0X3N0YXR1cyhcdTAwMjZ2cF9kZXYtXHUwMDNlbGRldik7XG4tXHQvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqL1xuLVx0dnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTtcbiB9XG4gXG4gc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG5pbmRleCA2ZDhhZTJhNmE4Y2FmLi5jOWUyMTMxN2M1MWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuQEAgLTU1OSw5ICs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdFx0bXNsZWVwKDEpO1xuIFxuIFx0dnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpO1xuLVxuLVx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cbi1cdHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG5AQCAtMjcsNiArMjcsNyBAQFxuIHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2Uge1xuIFx0c3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYTtcbitcdHJ3bG9ja190IGNhbGxiYWNrX2xvY2s7XG4gXHR1NjQgZmVhdHVyZXM7XG4gfTtcbiBcbkBAIC0xMjMsOCArMTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlO1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGlycXJldHVybl90IHJldDtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuK1x0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVx1MDAzZXZkZXYpO1xuK1x0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcbitcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4rXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZkZXYpO1xuK1xuK1x0d3JpdGVfbG9ja19pcnEoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuK1x0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpcbkBAIC00MzksNiArNDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0XHRcdD0gdmlydGlvX3ZkcGFfcmVzZXQsXG4gXHQuZmluZF92cXNcdD0gdmlydGlvX3ZkcGFfZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSB2aXJ0aW9fdmRwYV9kZWxfdnFzLFxuK1x0LnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyxcbiBcdC5nZXRfZmVhdHVyZXNcdD0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdmlydGlvX3ZkcGFfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWVcdD0gdmlydGlvX3ZkcGFfYnVzX25hbWUsXG5AQCAtNDcyLDYgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuY29uZmlnID0gXHUwMDI2dmlydGlvX3ZkcGFfY29uZmlnX29wcztcbiBcdHZkX2Rldi1cdTAwM2V2ZGV2Lm1hcCA9IHZkcGEtXHUwMDNlbWFwO1xuIFx0dmRfZGV2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuK1x0cndsb2NrX2luaXQoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIFxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID0gb3BzLVx1MDAzZWdldF9kZXZpY2VfaWQodmRwYSk7XG4gXHRpZiAodmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID09IDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcmN1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92aXJ0aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuQEAgLTIzMCw2ICsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHtcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xuICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZVxuICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHNcbisgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3NcbiAgKiBAaW5kZXg6IGluZGV4IG9mIHRoaXMgcnByb2MgZGV2aWNlXG4gICogQGF0dGFjaF93b3JrOiB3b3JrcXVldWUgZm9yIGF0dGFjaGluZyBycHJvY1xuICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2hcbkBAIC0yNzYsNiArMjc4LDcgQEAgc3RydWN0IHJwcm9jIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzO1xuIFx0c3RydWN0IGlkciBub3RpZnlpZHM7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcbiBcdGludCBpbmRleDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbkBAIC03MSw5ICs3MSw5IEBAIHN0cnVjdCB2aXJ0cXVldWVfaW5mbyB7XG4gICpcdFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yIHN0YXR1c1xuICAqIEBkZWxfdnFzOiBmcmVlIHZpcnRxdWV1ZXMgZm91bmQgYnkgZmluZF92cXMoKS5cbiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbClcbi0gKiAgICAgIFRoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZVxuLSAqICAgICAgcXVldWUgYmVmb3JlIGl0IGFyZSB2aXNpYmxlIHRvIHRoZSB2cmluZ19pbnRlcnJ1cHQoKSB0aGF0IGlzXG4tICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuXG4rICogICAgICBXYWl0IGZvciBydW5uaW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4gTWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlXG4rICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsc1xuKyAqICAgICAgdGhhdCBmb2xsb3cgaXQuXG4gICogICAgICB2ZGV2OiB0aGUgdmlydGlvX2RldmljZVxuICAqIEBnZXRfZmVhdHVyZXM6IGdldCB0aGUgYXJyYXkgb2YgZmVhdHVyZSBiaXRzIGZvciB0aGlzIGRldmljZS5cbiAgKlx0dmRldjogdGhlIHZpcnRpb19kZXZpY2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjA5Ljc0MzA2MzgwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NjQ4NjI4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggU2VyaWVzIEV2YWx1YXRpb246IFZpcnRpbyBTeW5jaHJvbml6YXRpb24gb24gYW1kNjQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIGdpdmVuIHRoZSBzdGF0ZWQgdGFyZ2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGFuZCBpZiB0aGVzZSBtb2RpZmljYXRpb25zIGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGZvciB0aGUgcGxhdGZvcm0gSSdtIG1vc3QgZmFtaWxpYXIgd2l0aC5cblxuSSBzZWUgYSB2YXJpZXR5IG9mIGRyaXZlcnMgYXJlIGFmZmVjdGVkLCBzbyBsZXQncyBicmVhayB0aGlzIGRvd246XG5cbiogICBGaXJzdCwgYGFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNgIGFkZHMgYHZ1X3N5bmNocm9uaXplX2Nic2AgY2FsbGluZyBgc3luY2hyb25pemVfaXJxYC4gVGhlIFVzZXItTW9kZSBMaW51eCBwYXJ0IGlzIG5vdCByZWxldmFudCBhcyB0aGUgdGFyZ2V0IGlzIGFtZDY0LlxuKiAgIGBkcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jYCBhZGRzIGEgc3BpbmxvY2sgYW5kIHN5bmNocm9uaXphdGlvbiBpbiBNZWxsYW5veCBCbHVlRmllbGQgU29DIHNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciwgc28gdGhpcyB3b24ndCBpbXBhY3QgYW1kNjQgZWl0aGVyLlxuKiAgIFRoZSBgcmVtb3RlcHJvY2AgY2hhbmdlcyBpbnRyb2R1Y2UgYW4gYHNyY3VgIG1lY2hhbmlzbSB3aXRoIGB2cV9zcmN1YCBpbiBgcmVtb3RlcHJvY19jb3JlLmNgIGFuZCBgcmVtb3RlcHJvY192aXJ0aW8uY2AsIGFsb25nIHdpdGggYSBuZXcgYHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnNgLiBUaGlzIGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgaG93IHdpZGVzcHJlYWQgYHJlbW90ZXByb2NgIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYW1kNjQuIEknbGwgbmVlZCB0byByZXNlYXJjaCBpdHMgaW50ZWdyYXRpb24uXG4qICAgYGRyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jYCBpcyBzMzkwLXNwZWNpZmljLCBzbyBpdCdzIG5vdCByZWxldmFudCB0byBteSBldmFsdWF0aW9uLlxuKiAgIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZXJpZXMsIGl0IHNlZW1zLCBpcyBpbiBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCBjYWxsZWQgYnkgYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAgaXMgc2lnbmlmaWNhbnQuIFRoZSBmYWN0IHRoYXQgYHZpcnRpb19yZXNldF9kZXZpY2VgIGlzIHRoZSBjb3JlIHZpcnRpbyBidXMgcmVzZXQgZnVuY3Rpb24gbWVhbnMgdGhpcyBpcyBhIGNlbnRyYWwgcGllY2UuIFRoaXMgd2lsbCBpbXBhY3QgYWxsIHZpcnRpbyBkcml2ZXJzIG9uIHJlc2V0IChuZXQsIGJsaywgY29uc29sZSwgaW5wdXQsIGV0Yy4pLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIGhlcmUuXG4qICAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jYCBtb2RpZmllcyB0aGUgaW5wdXQgaGFuZGxpbmcgYW5kIGFkZHMgc3luY2hyb25pemF0aW9uIGFyb3VuZCBgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2VgIGFuZCByZWFkeW5lc3MgY2hlY2tzLiBUaGlzIGlzIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcmVzZXQgYW5kIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIGNoYW5nZXMgaW4gYHZpcnRpby5jYC5cbiogICBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY2AgYW5kIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jYCByZW1vdmUgcmVkdW5kYW50IGNhbGxzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiwgc2ltcGxpZnlpbmcgdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IGFuIGFydGlmYWN0IG9mIHRoZSBuZXcgYHZpcnRpb19yZXNldF9kZXZpY2VgIGNhbGwuXG4qICAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNgIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIGxvY2ssIGBjYWxsYmFja19sb2NrYCwgYW5kIGNvcnJlc3BvbmRpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIFRoaXMgaXMgYW5vdGhlciBhcmVhIG9mIGNvbmNlcm4sIGFzIGludHJvZHVjaW5nIGxvY2tzIGNhbiBiZSB0cmlja3ksIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgY29udGVudGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBJUlEgY29udGV4dC5cbiogICBGaW5hbGx5LCB0aGVyZSBpcyBhIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBvbiBhbWQ2NDogYHZpcnRpb19yZXNldF9kZXZpY2VgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGJlY2F1c2UgaXQgaXMgYSBjb3JlIGZ1bmN0aW9uLiBgdmlydGlvX3ZkcGEuY2AgYW5kIGB2aXJ0aW9faW5wdXQuY2AgYXJlIGFsc28gZHJpdmVycyBJIG5lZWQgdG8gcmV2aWV3IGluIGRldGFpbCBiZWNhdXNlIG9mIHRoZWlyIGluY2x1c2lvbiBvZiBsb2Nrcy9zeW5jaHJvbml6YXRpb24uIFRoZSBgcmVtb3RlcHJvY2Agc3Vic3lzdGVtIGlzIGFub3RoZXIgYXJlYSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi4gVGhlIGB2aXJ0aW9fcGNpYCBkcml2ZXJzIGFyZSBhbHNvIGNyaXRpY2FsIGNvbXBvbmVudHMgYXMgdGhleSBhcmUgaW52b2x2ZWQgaW4gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaXMsIEknbGwgdXNlIGBnaXQgZ3JlcGAgYW5kIHJlYWQgdGhlIGNvZGUgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9ucyBhbmQgaG93IGNhbGxlcnMgaW50ZXJhY3QgaW4gdGhlIGFtZDY0IGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgY29ycmVjdGx5IHBsYWNlZCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgZGVhZGxvY2tzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBJUlEgY29udGV4dCBzeW5jaHJvbml6YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MTcuNjA3OTMwNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5NTIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX3N5bmNocm9uaXplX2Nic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz0yNTM9dm9pZCB2aXJ0aW9fcmVzZXRfZGV2aWNlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNTYtXFx0LypcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzoyNTc6XFx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjU4LVxcdCAqIGludGVycnVwdCBmb3IgdGhpcyBsaW5lIGFycml2aW5nIGFmdGVyXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNjItXFx0dmlydGlvX2JyZWFrX2RldmljZShkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjI2MzpcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjY0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjY2LVxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjI2NzpcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjY4LX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQxMj12b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQyMS1cXHQgKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0MjI6XFx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQyMy1cXHQvKlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI3LVxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQyODpcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MTcuNjY5ODg3MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI1ODkzNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCBpbiBMaW51eCBLZXJuZWwgU291cmNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFZpcnRJTyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcyBhcmUgc3luY2hyb25pemVkLiBXaGVyZSB3b3VsZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBiZSwgYW5kIGhvdyB3b3VsZCBJIGJlc3QgZ2FpbiBpbnNpZ2h0PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGRlZmluZXMgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBmdW5jdGlvbnMuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAgZmlyc3QuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGlzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBWaXJ0SU8gZnJhbWV3b3JrLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBpdHMgdXNhZ2Ugb3IgZGVsdmUgZGVlcGVyIGludG8gdGhlIHJlbGV2YW50IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGJhc2VkIG9uIHdoYXQgSSBmaW5kIGluIHRoYXQgaGVhZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY1OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjE5LjY5NTc4NTA3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjk4NTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fc3luY2hyb25pemVfY2JzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMwMj1zdHJ1Y3QgdmlydHF1ZXVlICp2aXJ0aW9fZmluZF9zaW5nbGVfdnEoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zMTYtLyoqXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzE3OiAqIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMgLSBzeW5jaHJvbml6ZSB3aXRoIHZpcnRxdWV1ZSBjYWxsYmFja3NcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zMTgtICogQGRldjogdGhlIHZpcnRpbyBkZXZpY2VcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMyMD1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzIxOnZvaWQgdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oLTMyMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaD0zNDQ9dm9pZCB2aXJ0aW9fZGV2aWNlX3JlYWR5KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTEtXFx0LypcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaDozNTI6XFx0ICogVGhlIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBtYWtlcyBzdXJlIHZyaW5nX2ludGVycnVwdCgpXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgtMzUzLVxcdCAqIHdpbGwgc2VlIHRoZSBkcml2ZXIgc3BlY2lmaWMgc2V0dXAgaWYgaXQgc2VlcyB2cS1cXHUwMDNlYnJva2VuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTUtXFx0ICovXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzU2OlxcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTctXFx0X192aXJ0aW9fdW5icmVha19kZXZpY2UoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MTkuNzY4Nzc4ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkzODcwOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBWaXJ0aW8gRGV2aWNlIFJlc2V0IGFuZCBTaHV0ZG93bioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBWaXJ0aW8gZGV2aWNlcyBhcmUgcmVzZXQgYW5kIHNodXQgZG93biB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBmb3IgYSBzcGVjaWZpYyBpc3N1ZSBJJ20gZGVidWdnaW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGhlYWRzIGZvciB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IHRoZSBsaWtlbHkgY3VscHJpdHMgYXJlIGluIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW8uY2AsIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgdmlydGlvX3Jlc2V0X2RldmljZWAgYW5kIGB2aXJ0aW9fZGV2aWNlX3NodXRkb3duYCBmdW5jdGlvbnMuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZSBkb2luZyB3aXRoIHRoZSBkZXZpY2UncyBzdGF0ZSBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIGlzc3VlLiBJIGtub3cgdGhlcmUgYXJlIGxpa2VseSBpbnRyaWNhY2llcyB3aXRoIHRoZSBNTUlPIHJlZ2lzdGVycywgZXZlbnQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVmlydHF1ZXVlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzoyMi4xNjI2NTIwMTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0ICogY2FsbC93b3JrcXVldWUvYmguICBJbnZva2luZyB2aXJ0aW9fYnJlYWtfZGV2aWNlIHRoZW4gZmx1c2hpbmcgYW55IHN1Y2hcXG4gMjUxOlxcdCAqIGNvbnRleHRzIGlzIG9uZSB3YXkgdG8gaGFuZGxlIHRoYXQuXFxuIDI1MjpcXHQgKiAqL1xcbiAyNTM6XFx0dm9pZCB2aXJ0aW9fcmVzZXRfZGV2aWNlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHQjaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXFxuIDI1NjpcXHRcXHQvKlxcbiAyNTc6XFx0XFx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XFxuIDI1ODpcXHRcXHQgKiBpbnRlcnJ1cHQgZm9yIHRoaXMgbGluZSBhcnJpdmluZyBhZnRlclxcbiAyNTk6XFx0XFx0ICogdmlydGlvX3N5bmNocm9uaXplX3ZxcygpIGhhcyBjb21wbGV0ZWQgaXMgZ3VhcmFudGVlZCB0byBzZWVcXG4gMjYwOlxcdFxcdCAqIHZxLVxcdTAwM2Vicm9rZW4gYXMgdHJ1ZS5cXG4gMjYxOlxcdFxcdCAqL1xcbiAyNjI6XFx0XFx0dmlydGlvX2JyZWFrX2RldmljZShkZXYpO1xcbiAyNjM6XFx0XFx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xcbiAyNjQ6XFx0I2VuZGlmXFxuIDI2NTpcXHRcXG4gMjY2OlxcdFxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbiAyNjc6XFx0XFx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xcbiAyNjg6XFx0fVxcbiAyNjk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdHN0YXRpYyBpbnQgdmlydGlvX2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZClcXG4gMjcyOlxcdHtcXG4gMjczOlxcdFxcdGludCBlcnIsIGk7XFxuIDI3NDpcXHRcXHRzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2ID0gZGV2X3RvX3ZpcnRpbyhfZCk7XFxuIDI3NTpcXHRcXHRzdHJ1Y3QgdmlydGlvX2RyaXZlciAqZHJ2ID0gZHJ2X3RvX3ZpcnRpbyhkZXYtXFx1MDAzZWRldi5kcml2ZXIpO1xcbiAyNzY6XFx0XFx0dTY0IGRldmljZV9mZWF0dXJlc1tWSVJUSU9fRkVBVFVSRVNfVTY0U107XFxuIDI3NzpcXHRcXHR1NjQgZHJpdmVyX2ZlYXR1cmVzW1ZJUlRJT19GRUFUVVJFU19VNjRTXTtcXG4gMjc4OlxcdFxcdHU2NCBkcml2ZXJfZmVhdHVyZXNfbGVnYWN5O1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHQvKiBXZSBoYXZlIGEgZHJpdmVyISAqL1xcbiAyODE6XFx0XFx0dmlydGlvX2FkZF9zdGF0dXMoZGV2LCBWSVJUSU9fQ09ORklHX1NfRFJJVkVSKTtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0LyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovXFxuIDI4NDpcXHRcXHR2aXJ0aW9fZ2V0X2ZlYXR1cmVzKGRldiwgZGV2aWNlX2ZlYXR1cmVzKTtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0LyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHRoZSBkcml2ZXIgc3VwcG9ydHMuICovXFxuIDI4NzpcXHRcXHR2aXJ0aW9fZmVhdHVyZXNfemVybyhkcml2ZXJfZmVhdHVyZXMpO1xcbiAyODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRydi1cXHUwMDNlZmVhdHVyZV90YWJsZV9zaXplOyBpKyspIHtcXG4gMjg5OlxcdFxcdFxcdHVuc2lnbmVkIGludCBmID0gZHJ2LVxcdTAwM2VmZWF0dXJlX3RhYmxlW2ldO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzoyMi4xNjI3NDU1NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODgyNjEzMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0aW8gRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpc+KApiBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgd291bGQgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGlzIHBhcnRpY3VsYXIgaXNzdWU/XCIgSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgVmlydGlvIGRyaXZlcnMuIFwiTGV0J3Mgc2VlLCB3aGVyZSBhcmUgdGhlIGtleSBpbXBsZW1lbnRhdGlvbnM/XCIgSSBpbW1lZGlhdGVseSB0aGluaywgdGhlIGBkcml2ZXJzL3ZpcnRpb2AgZGlyZWN0b3J5IGlzIGEgZ29sZCBtaW5lIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbi4gVGhlbiwgdG8gemVybyBpbiBvbiBzcGVjaWZpY3MsIEknbGwgZm9jdXMgb24gdGhlIHJlbGV2YW50IGRldmljZSB0eXBlczogdGhlIGB2aXJ0aW9fdmRwYS5jYCBkcml2ZXIsIGJlY2F1c2UgaXQncyBwcm9iYWJseSBoYW5kbGluZyB0aGUgc3BlY2lmaWMgdmlydHVhbCBkYXRhIHBhdGggSSdtIGludGVyZXN0ZWQgaW4sIGFuZCB0aGVuIHRoZSBgdmlydGlvX2lucHV0LmNgIGRyaXZlciwgd2hpY2gsIGdpdmVuIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGlzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBzb21laG93LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgVmlydGlvIGRldmljZXMgYXJlIGZ1bmN0aW9uaW5nIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsLiBJJ2xsIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGluIHRoZXNlIHR3byBmaXJzdCwgYW5kIHNlZSB3aGF0IEkgY2FuIGxlYXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MjUuMDQ1MzYxNTI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbiAzNDE6XFx0ZXJyX2luaXRfdnE6XFxuIDM0MjpcXHRcXHRrZnJlZSh2aSk7XFxuIDM0MzpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbiAzNDk6XFx0XFx0dm9pZCAqYnVmO1xcbiAzNTA6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDM1MzpcXHRcXHR2aS1cXHUwMDNlcmVhZHkgPSBmYWxzZTtcXG4gMzU0OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdC8qIENhbGxiYWNrcyB1c2UgdmktXFx1MDAzZWlkZXYuICovXFxuIDM1NzpcXHRcXHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xcbiAzNTg6XFx0XFx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXFx1MDAzZWlkZXYpO1xcbiAzNTk6XFx0XFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXFx1MDAzZXN0cykpICE9IE5VTEwpXFxuIDM2MDpcXHRcXHRcXHRrZnJlZShidWYpO1xcbiAzNjE6XFx0XFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbiAzNjI6XFx0XFx0a2ZyZWUodmkpO1xcbiAzNjM6XFx0fVxcbiAzNjQ6XFx0XFxuIDM2NTpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuIDM2NjpcXHRzdGF0aWMgaW50IHZpcnRpbnB1dF9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuIDM2NzpcXHR7XFxuIDM2ODpcXHRcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZkZXYtXFx1MDAzZXByaXY7XFxuIDM2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAzNzA6XFx0XFx0dm9pZCAqYnVmO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMzczOlxcdFxcdHZpLVxcdTAwM2VyZWFkeSA9IGZhbHNlO1xcbiAzNzQ6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMzc1OlxcdFxcbiAzNzY6XFx0XFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4gMzc3OlxcdFxcdHdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZpLVxcdTAwM2VzdHMpKSAhPSBOVUxMKVxcbiAzNzg6XFx0XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMzc5OlxcdFxcdHZkZXYtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZGVsX3Zxcyh2ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MjUuMDQ1NTA1NDc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjcxMTcyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQsIGFuZCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBFdmVudCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGB2aXJ0aW5wdXRfcmVjdl9ldmVudHNgLiBJdCdzIGNydWNpYWwgd2UgdW5kZXJzdGFuZCBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBiZWhhdmluZywgZXNwZWNpYWxseSBpbiB0aGlzIGNvbnRleHQuIFdlIG5lZWQgdG8gZGlzc2VjdCBpdHMgcm9sZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHZpcnR1YWwgaW5wdXQgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG1pZ2h0IGJlIG1hbmlmZXN0aW5nLiBJcyBpdCBoYW5kbGluZyBldmVudHMgZWZmaWNpZW50bHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGFyZWE/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBpcyB0aGlzIGZ1bmN0aW9uIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLCBvciBhIGRvd25zdHJlYW0gZWZmZWN0PyBMZXQncyB0cmVhdCBpdCBhcyBhIHN1c3BlY3QgYW5kIGludGVycm9nYXRlIGl0IHdpdGggYSBkZXRhaWxlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYW55IHNpZ24gdGhhdCB0aGUgcHJvY2Vzc2luZyBpcyBub3QgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjI3LjM3MjYyNDkxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdHNnX2luaXRfb25lKHNnLCBldnRidWYsIHNpemVvZigqZXZ0YnVmKSk7XFxuICAzMzpcXHRcXHR2aXJ0cXVldWVfYWRkX2luYnVmX2NhY2hlX2NsZWFuKHZpLVxcdTAwM2VldnQsIHNnLCAxLCBldnRidWYsIEdGUF9BVE9NSUMpO1xcbiAgMzQ6XFx0fVxcbiAgMzU6XFx0XFxuICAzNjpcXHRzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVjdl9ldmVudHMoc3RydWN0IHZpcnRxdWV1ZSAqdnEpXFxuICAzNzpcXHR7XFxuICAzODpcXHRcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVxcdTAwM2V2ZGV2LVxcdTAwM2Vwcml2O1xcbiAgMzk6XFx0XFx0c3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqZXZlbnQ7XFxuICA0MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgNDE6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA0NDpcXHRcXHRpZiAodmktXFx1MDAzZXJlYWR5KSB7XFxuICA0NTpcXHRcXHRcXHR3aGlsZSAoKGV2ZW50ID0gdmlydHF1ZXVlX2dldF9idWYodmktXFx1MDAzZWV2dCwgXFx1MDAyNmxlbikpICE9IE5VTEwpIHtcXG4gIDQ2OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA0NzpcXHRcXHRcXHRcXHRpbnB1dF9ldmVudCh2aS1cXHUwMDNlaWRldixcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShldmVudC1cXHUwMDNldHlwZSksXFxuICA0OTpcXHRcXHRcXHRcXHRcXHQgICAgbGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZWNvZGUpLFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGV2ZW50LVxcdTAwM2V2YWx1ZSkpO1xcbiAgNTE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA1MjpcXHRcXHRcXHRcXHRpZiAoIXZpLVxcdTAwM2VyZWFkeSlcXG4gIDUzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNTQ6XFx0XFx0XFx0XFx0dmlydGlucHV0X3F1ZXVlX2V2dGJ1Zih2aSwgZXZlbnQpO1xcbiAgNTU6XFx0XFx0XFx0fVxcbiAgNTY6XFx0XFx0XFx0aWYgKHZpLVxcdTAwM2VyZWFkeSlcXG4gIDU3OlxcdFxcdFxcdFxcdHZpcnRxdWV1ZV9raWNrKHZxKTtcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdC8qXFxuICA2MzpcXHQgKiBPbiBlcnJvciB3ZSBhcmUgbG9zaW5nIHRoZSBzdGF0dXMgdXBkYXRlLCB3aGljaCBpc24ndCBjcml0aWNhbCBhc1xcbiAgNjQ6XFx0ICogdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3Igc3R1ZmYgbGlrZSBrZXlib2FyZCBsZWRzLlxcbiAgNjU6XFx0ICovXFxuICA2NjpcXHRzdGF0aWMgaW50IHZpcnRpbnB1dF9zZW5kX3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSxcXG4gIDY3OlxcdFxcdFxcdFxcdFxcdCB1MTYgdHlwZSwgdTE2IGNvZGUsIHMzMiB2YWx1ZSlcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCB2aXJ0aW9faW5wdXRfZXZlbnQgKnN0c2J1ZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MjcuMzcyNzA4MDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDI4MzM2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCB0aGlua2luZyBhcyBJIHdvdWxkIGluIHRoZSBtaWRzdCBvZiB0aGlzIHdvcms6XG5cbioqSW52ZXN0aWdhdGluZyBWaXJ0aW8gYW5kIFJlbW90ZSBQcm9jZXNzb3IgSW50ZXJhY3Rpb25zKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBmaWxlcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBGaXJzdCwgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNg4oCmIFJpZ2h0LCBWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRpb24uIFRoYXQncyBrZXkgZm9yIHBlcmZvcm1hbmNlLCBzbyBJIHNob3VsZCBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhhdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIFZEUEEtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBicm9hZGVyIHZpcnRpbyBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBwYXRocyBhcmUgb3B0aW1pemVkLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS5cblxuTmV4dCB1cCwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBSZW1vdGUgUHJvY2Vzc29yIHN0dWZmLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY2AgZG9lcy4gT2theSwgaXQncyB0aGUgY29yZSByZW1vdGVwcm9jIGZyYW1ld29yay4gVGhpcyBtZWFucyBpdCBjb250YWlucyB0aGUgZXNzZW50aWFsIG1lY2hhbmljcyBmb3IgbWFuYWdpbmcgcmVtb3RlIHByb2Nlc3NvcnMsIHRoZWlyIHJlc291cmNlcywgY29tbXVuaWNhdGlvbiwgYW5kIGxpZmVjeWNsZS4gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZXkgaGFuZGxlIHJlc291cmNlIGFsbG9jYXRpb24sIG1lc3NhZ2luZywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGJhc2ljIHN0YXRlIG1hY2hpbmVzIHRoYXQgZHJpdmUgdGhlIHJlbW90ZXByb2Mgb3BlcmF0aW9uLlxuXG5GaW5hbGx5LCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiByZW1vdGVwcm9jIGFuZCB2aXJ0aW8uIFNvLCBJIGV4cGVjdCB0byBzZWUgdGhlIHZpcnRpbyB0cmFuc3BvcnQgbWVjaGFuaXNtcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzb3IuIFRoaXMgZmlsZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZW1vdGUgcHJvY2Vzc29yJ3MgaGFyZHdhcmUgaXMgYWNjZXNzZWQgYW5kIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgdmlydGlvIGludGVyZmFjZS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBjb250cm9sIG1lc3NhZ2VzIGFuZCBkYXRhIGFyZSBleGNoYW5nZWQgYmV0d2VlbiB0aGUgaG9zdCBhbmQgcmVtb3RlIHByb2Nlc3NvciB0aHJvdWdoIHZpcnRpbyBxdWV1ZXMuIFRpbWUgdG8gZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTI3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzozMC4wNzU1NDM4NDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0c3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gcHJpdmF0ZTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0dmlydGlvX2NvbmZpZ19jaGFuZ2VkKFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZXZkZXYpO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuIDEyMjpcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcXG4gMTI1OlxcdHtcXG4gMTI2OlxcdFxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTtcXG4gMTI3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldjtcXG4gMTI4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDEyOTpcXHRcXHRpcnFyZXR1cm5fdCByZXQ7XFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdHZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2cS1cXHUwMDNldmRldik7XFxuIDEzMjpcXHRcXHRyZWFkX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XFxuIDEzMzpcXHRcXHRyZXQgPSB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xcbiAxMzQ6XFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdHJldHVybiByZXQ7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyB2b2lkIHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2ZGV2KTtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNnZkX2Rldi1cXHUwMDNlY2FsbGJhY2tfbG9jayk7XFxuIDE0NDpcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZWNhbGxiYWNrX2xvY2spO1xcbiAxNDU6XFx0fVxcbiAxNDY6XFx0XFxuIDE0NzpcXHRzdGF0aWMgc3RydWN0IHZpcnRxdWV1ZSAqXFxuIDE0ODpcXHR2aXJ0aW9fdmRwYV9zZXR1cF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGluZGV4LFxcbiAxNDk6XFx0XFx0XFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSxcXG4gMTUwOlxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBjdHgpXFxuIDE1MTpcXHR7XFxuIDE1MjpcXHRcXHRzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSB2ZF9nZXRfdmRwYSh2ZGV2KTtcXG4gMTUzOlxcdFxcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXFx1MDAzZWNvbmZpZztcXG4gMTU0OlxcdFxcdGJvb2wgKCpub3RpZnkpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSA9IHZpcnRpb192ZHBhX25vdGlmeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MzAuMDc1NjI5NTk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzExMjQyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gcmVtb3RlcHJvY192aXJ0aW8uYyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLiBUaGlzIGZpbGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnRpbyB0cmFuc3BvcnQgd29ya3Mgd2l0aCByZW1vdGUgcHJvY2Vzc29ycy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdmlydGlvIGRldmljZSBpbnRlcmFjdGlvbjogdGhlIG5lZ290aWF0aW9uLCB0aGUgZGF0YSB0cmFuc2ZlciBtZWNoYW5pc21zLCBhbmQgaG93IHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBzZXQgdXAuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIGhvdyBpdCBpc29sYXRlcyB0aGUgcmVtb3RlIHByb2Nlc3NvcidzIHdvcmxkLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkIGluIHRoZSByZW1vdGVwcm9jIHN5c3RlbSwgdG9vLiBMZXQncyBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjMzLjI0Njc1NzQ2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0ICogbWVzc2FnZXMgYXZhaWxhYmxlLlxcbiAgODY6XFx0ICpcXG4gIDg3OlxcdCAqIFJldHVybjogSVJRX05PTkUgaWYgbm8gbWVzc2FnZSB3YXMgZm91bmQgaW4gdGhlIEBub3RpZnlpZCB2aXJ0cXVldWUsXFxuICA4ODpcXHQgKiBhbmQgb3RoZXJ3aXNlIHJldHVybnMgSVJRX0hBTkRMRUQuXFxuICA4OTpcXHQgKi9cXG4gIDkwOlxcdGlycXJldHVybl90IHJwcm9jX3ZxX2ludGVycnVwdChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBpbnQgbm90aWZ5aWQpXFxuICA5MTpcXHR7XFxuICA5MjpcXHRcXHRzdHJ1Y3QgcnByb2NfdnJpbmcgKnJ2cmluZztcXG4gIDkzOlxcdFxcdGludCBzcmN1X2lkeDtcXG4gIDk0OlxcdFxcdGlycXJldHVybl90IHJldDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2cnByb2MtXFx1MDAzZXZxX3NyY3UpO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRkZXZfZGJnKFxcdTAwMjZycHJvYy1cXHUwMDNlZGV2LCBcXFwidnEgaW5kZXggJWQgaXMgaW50ZXJydXB0ZWRcXFxcblxcXCIsIG5vdGlmeWlkKTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0cnZyaW5nID0gaWRyX2ZpbmQoXFx1MDAyNnJwcm9jLVxcdTAwM2Vub3RpZnlpZHMsIG5vdGlmeWlkKTtcXG4gMTAxOlxcdFxcdHJldCA9IHJ2cmluZyBcXHUwMDI2XFx1MDAyNiBydnJpbmctXFx1MDAzZXZxID8gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cXHUwMDNldnEpIDogSVJRX05PTkU7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdHJldHVybiByZXQ7XFxuIDEwNjpcXHR9XFxuIDEwNzpcXHRFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XFxuIDEwODpcXHRcXG4gMTA5OlxcdHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpycF9maW5kX3ZxKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LFxcbiAxMTA6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBpZCxcXG4gMTExOlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSxcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCBib29sIGN0eClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdHN0cnVjdCBycHJvY192ZGV2ICpydmRldiA9IHZkZXZfdG9fcnZkZXYodmRldik7XFxuIDExNTpcXHRcXHRzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTtcXG4gMTE2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZycHJvYy1cXHUwMDNlZGV2O1xcbiAxMTc6XFx0XFx0c3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtO1xcbiAxMTg6XFx0XFx0c3RydWN0IHJwcm9jX3ZyaW5nICpydnJpbmc7XFxuIDExOTpcXHRcXHRzdHJ1Y3QgZndfcnNjX3ZkZXYgKnJzYztcXG4gMTIwOlxcdFxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxO1xcbiAxMjE6XFx0XFx0dm9pZCAqYWRkcjtcXG4gMTIyOlxcdFxcdGludCBudW0sIHNpemU7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdC8qIHdlJ3JlIHRlbXBvcmFyaWx5IGxpbWl0ZWQgdG8gdHdvIHZpcnRxdWV1ZXMgcGVyIHJ2ZGV2ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjMzLjI0Njg2NzU2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTE4MDUwNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgSW5zcGVjdGlvbiBUaW1lKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIGl0LiBCZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGlzIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZCBjb25maWd1cmF0aW9uLiBJdCdzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIGF0IHRoaXMgcG9pbnQg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IEtjb25maWdzIGFyZSBwcm9wZXJseSBzZXQgZm9yIHRoZXNlIGZpbGVzIHRvIGJlIGluY2x1ZGVkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBObyBwb2ludCBpbiBkZWJ1Z2dpbmcgc29tZXRoaW5nIHRoYXQncyBzaW1wbHkgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBvciwgZXZlbiB3b3JzZSwgbWlzYmVoYXZpbmcgYmVjYXVzZSB0aGUgcmlnaHQgZmVhdHVyZXMgYXJlICpvbiouXG5cbkxldCdzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSBjaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZXNlIHBhcnRpY3VsYXIgbW9kdWxlcy4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGNvbmZsaWN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZsYWdzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoYXQgd291bGQgaW1wYWN0IG15IGFuYWx5c2lzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IGEgY29ycmVjdCBhbmQgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIG1vZHVsZSBpcyBpbnRlbmRlZCB0byBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBidWlsZC4gR290dGEgbWFrZSBzdXJlIEknbSBjaGFzaW5nIHRoZSByaWdodCByYWJiaXQgZG93biB0aGUgaG9sZS4gU28sIEtjb25maWdzLCBsZXQncyBzZWUgd2hhdCB5b3UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk2MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MzUuNzY0OTIwMjg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI1NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9faW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0aW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX1ZJUlRJT19CQUxMT09OKSArPSB2aXJ0aW9fYmFsbG9vbi5vXFxuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1ZJUlRJT19JTlBVVCkgKz0gdmlydGlvX2lucHV0Lm9cXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfVklSVElPX1ZEUEEpICs9IHZpcnRpb192ZHBhLm9cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTktI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvdmlydGlvX2lkcy5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEwOiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3ZpcnRpb19pbnB1dC5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnB1dC9tdC5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEyLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzOnN0cnVjdCB2aXJ0aW9faW5wdXQge1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE0LVxcdHN0cnVjdCB2aXJ0aW9fZGV2aWNlICAgICAgICp2ZGV2O1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjAtXFx0X19kbWFfZnJvbV9kZXZpY2VfZ3JvdXBfYmVnaW4oKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyMTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICBldnRzWzY0XTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yMi1cXHRfX2RtYV9mcm9tX2RldmljZV9ncm91cF9lbmQoKTtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI2LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI3OnN0YXRpYyB2b2lkIHZpcnRpbnB1dF9xdWV1ZV9ldnRidWYoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjg6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqZXZ0YnVmKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM2PXN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNy17XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mzg6XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2cS1cXHUwMDNldmRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzozOTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpldmVudDtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjUtICovXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6NjY6c3RhdGljIGludCB2aXJ0aW5wdXRfc2VuZF9zdGF0dXMoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjctXFx0XFx0XFx0XFx0IHUxNiB0eXBlLCB1MTYgY29kZSwgczMyIHZhbHVlKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTY4LXtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo2OTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpzdHNidWY7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNzAtXFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MTEyPXN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X3N0YXR1cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMTMte1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjExNDpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVxcdTAwM2V2ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjExNTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpzdHNidWY7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTE2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0xMjU9c3RhdGljIGludCB2aXJ0aW5wdXRfc3RhdHVzKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHVuc2lnbmVkIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTI3LXtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMjg6XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMjktXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMzItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTMzOnN0YXRpYyB1OCB2aXJ0aW5wdXRfY2ZnX3NlbGVjdChzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMzQtXFx0XFx0XFx0ICAgICAgIHU4IHNlbGVjdCwgdTggc3Vic2VsKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTM3LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzODpcXHR2aXJ0aW9fY3dyaXRlX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgc2VsZWN0LCBcXHUwMDI2c2VsZWN0KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMzk6XFx0dmlydGlvX2N3cml0ZV9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHN1YnNlbCwgXFx1MDAyNnN1YnNlbCk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTQwOlxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHNpemUsIFxcdTAwMjZzaXplKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDEtXFx0cmV0dXJuIHNpemU7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDMtXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTQ0OnN0YXRpYyB2b2lkIHZpcnRpbnB1dF9jZmdfYml0cyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSwgaW50IHNlbGVjdCwgaW50IHN1YnNlbCxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDUtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdHMsIHVuc2lnbmVkIGludCBiaXRjb3VudClcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE2NC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTY1OlxcdHZpcnRpb19jcmVhZF9ieXRlcyh2aS1cXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTY2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUuYml0bWFwKSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE3Ny1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNzg6c3RhdGljIHZvaWQgdmlydGlucHV0X2NmZ19hYnMoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksIGludCBhYnMpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE4Mi1cXHR2aXJ0aW5wdXRfY2ZnX3NlbGVjdCh2aSwgVklSVElPX0lOUFVUX0NGR19BQlNfSU5GTywgYWJzKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODM6XFx0dmlydGlvX2NyZWFkX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMubWluLCBcXHUwMDI2bWkpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE4NDpcXHR2aXJ0aW9fY3JlYWRfbGUodmktXFx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLCB1LmFicy5tYXgsIFxcdTAwMjZtYSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTg1OlxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHUuYWJzLnJlcywgXFx1MDAyNnJlKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODY6XFx0dmlydGlvX2NyZWFkX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMuZnV6eiwgXFx1MDAyNmZ1KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODc6XFx0dmlydGlvX2NyZWFkX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMuZmxhdCwgXFx1MDAyNmZsKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xODgtXFx0aW5wdXRfc2V0X2Fic19wYXJhbXModmktXFx1MDAzZWlkZXYsIGFicywgbWksIG1hLCBmdSwgZmwpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTkxLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE5MjpzdGF0aWMgaW50IHZpcnRpbnB1dF9pbml0X3ZxcyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSlcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xOTMte1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjA5LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjIxMDpzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfZmlsbF9ldnQoc3RydWN0IHZpcnRpb19pbnB1dCAqdmkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjExLXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTIyNT1zdGF0aWMgaW50IHZpcnRpbnB1dF9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yMjYte1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjIyNzpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yMjgtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI1NC1cXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfTkFNRSwgMCk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjU1OlxcdHZpcnRpb19jcmVhZF9ieXRlcyh2aS1cXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjU2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUuc3RyaW5nKSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI1OC1cXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfU0VSSUFMLCAwKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNTk6XFx0dmlydGlvX2NyZWFkX2J5dGVzKHZpLVxcdTAwM2V2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgdS5zdHJpbmcpLFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjY4LVxcdHNpemUgPSB2aXJ0aW5wdXRfY2ZnX3NlbGVjdCh2aSwgVklSVElPX0lOUFVUX0NGR19JRF9ERVZJRFMsIDApO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI2OTpcXHRpZiAoc2l6ZSBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHZpcnRpb19pbnB1dF9kZXZpZHMpKSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjcwOlxcdFxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjcxLVxcdFxcdFxcdFxcdHUuaWRzLmJ1c3R5cGUsIFxcdTAwMjZ2aS1cXHUwMDNlaWRldi1cXHUwMDNlaWQuYnVzdHlwZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjcyOlxcdFxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjczLVxcdFxcdFxcdFxcdHUuaWRzLnZlbmRvciwgXFx1MDAyNnZpLVxcdTAwM2VpZGV2LVxcdTAwM2VpZC52ZW5kb3IpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI3NDpcXHRcXHR2aXJ0aW9fY3JlYWRfbGUodmktXFx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3NS1cXHRcXHRcXHRcXHR1Lmlkcy5wcm9kdWN0LCBcXHUwMDI2dmktXFx1MDAzZWlkZXYtXFx1MDAzZWlkLnByb2R1Y3QpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI3NjpcXHRcXHR2aXJ0aW9fY3JlYWRfbGUodmktXFx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3Ny1cXHRcXHRcXHRcXHR1Lmlkcy52ZXJzaW9uLCBcXHUwMDI2dmktXFx1MDAzZWlkZXYtXFx1MDAzZWlkLnZlcnNpb24pO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MzQ2PXN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzQ3LXtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzozNDg6XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTM0OS1cXHR2b2lkICpidWY7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0zNjY9c3RhdGljIGludCB2aXJ0aW5wdXRfZnJlZXplKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTM2Ny17XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MzY4OlxcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNjktXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM4Mz1zdGF0aWMgaW50IHZpcnRpbnB1dF9yZXN0b3JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTM4NC17XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mzg1OlxcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zODYtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTQwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTQwNi1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo0MDc6c3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19pbnB1dF9kcml2ZXIgPSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNDA4LVxcdC5kcml2ZXIubmFtZSAgICAgICAgID0gS0JVSUxEX01PRE5BTUUsXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MTktXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6NDIwOm1vZHVsZV92aXJ0aW9fZHJpdmVyKHZpcnRpb19pbnB1dF9kcml2ZXIpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTQyMS1NT0RVTEVfREVWSUNFX1RBQkxFKHZpcnRpbywgaWRfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzozNS44NDUxODQ5MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE5OTc0NTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVmlydGlvIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVmlydGlvIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgc3RhbmRhcmQga2VybmVsIGJ1aWxkIHN5c3RlbSwgaXMgdGhlIGBkcml2ZXJzL3ZpcnRpb2AgZGlyZWN0b3J5LiBBbmQgd2l0aGluIHRoYXQsIHRoZSBmaWxlIHRoYXQgZGljdGF0ZXMgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgYWxtb3N0IGNlcnRhaW5seSBgS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIHNob3VsZCBmaW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGhlbHAgdGV4dHMgdGhhdCBkZXRlcm1pbmUgaG93IHRoZSBWaXJ0aW8gc3Vic3lzdGVtIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIHRoZSBjZW50cmFsIGh1YiBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZmxhZ3MgcmVsYXRlZCB0byB0aG9zZSB2aXJ0dWFsaXplZCBkZXZpY2VzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgb3B0aW9ucyBmb3IgdGhlIGRpZmZlcmVudCB2aXJ0aW8gZGV2aWNlIHR5cGVzIChuZXQsIGJsb2NrLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc29tZSBnbG9iYWwgVmlydGlvIGZsYWdzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZXhhbWluZSB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDAuMDQ0OTMyODMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBWSVJUSU9fQU5DSE9SXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBWSVJUSU9cXG4gICA2OlxcdFxcdHRyaXN0YXRlXFxuICAgNzpcXHRcXHRzZWxlY3QgVklSVElPX0FOQ0hPUlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBhbnkgZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlIHZpcnRpb1xcbiAgMTA6XFx0XFx0ICBidXMsIHN1Y2ggYXMgQ09ORklHX1ZJUlRJT19QQ0ksIENPTkZJR19WSVJUSU9fTU1JTywgQ09ORklHX1JQTVNHXFxuICAxMTpcXHRcXHQgIG9yIENPTkZJR19TMzkwX0dVRVNULlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgVklSVElPX1BDSV9MSUJcXG4gIDE0OlxcdFxcdHRyaXN0YXRlXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIE1vZGVybiBQQ0kgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZVxcbiAgMTc6XFx0XFx0ICBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgYmFzZWQgb24gbW9kZXJuXFxuICAxODpcXHRcXHQgIFBDSSBkZXZpY2Ugd2l0aCBwb3NzaWJsZSB2ZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucy4gQW55XFxuICAxOTpcXHRcXHQgIG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpcyBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVklSVElPX1BDSV9MSUJfTEVHQUNZXFxuICAyMjpcXHRcXHR0cmlzdGF0ZVxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBMZWdhY3kgUENJIGRldmljZSAoVmlydGlvIFBDSSBDYXJkIDAuOS54IERyYWZ0IGFuZCBvbGRlciBkZXZpY2UpXFxuICAyNTpcXHRcXHQgIGltcGxlbWVudGF0aW9uLlxcbiAgMjY6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlc1xcbiAgMjc6XFx0XFx0ICB3aGljaCBhcmUgYmFzZWQgb24gbGVnYWN5IFBDSSBkZXZpY2UuIEFueSBtb2R1bGUgdGhhdCBzZWxlY3RzIHRoaXNcXG4gIDI4OlxcdFxcdCAgbW9kdWxlIG11c3QgZGVwZW5kIG9uIFBDSS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0bWVudWNvbmZpZyBWSVJUSU9fTUVOVVxcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiVmlydGlvIGRyaXZlcnNcXFwiXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0aWYgVklSVElPX01FTlVcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIFZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXFxuICAzNzpcXHQgICAgICAgIGJvb2wgXFxcIkhhcmRlbiB2aXJ0aW8gbm90aWZpY2F0aW9uXFxcIlxcbiAgMzg6XFx0ICAgICAgICBkZXBlbmRzIG9uIEJST0tFTlxcbiAgMzk6XFx0ICAgICAgICBoZWxwXFxuICA0MDpcXHQgICAgICAgICAgRW5hYmxlIHRoaXMgdG8gaGFyZGVuIHRoZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyBhbmQgc3VwcHJlc3NcXG4gIDQxOlxcdCAgICAgICAgICB0aG9zZSB0aGF0IGhhcHBlbiBhdCBhIHRpbWUgd2hlcmUgbm90aWZpY2F0aW9ucyBhcmUgaWxsZWdhbC5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0ICAgICAgICAgIEV4cGVyaW1lbnRhbDogTm90ZSB0aGF0IHNldmVyYWwgZHJpdmVycyBzdGlsbCBoYXZlIGlzc3VlcyB0aGF0XFxuICA0NDpcXHQgICAgICAgICAgbWF5IGNhdXNlIGNyYXNoZXMgb3IgaGFuZ3Mgd2hlbiBjb3JyZWN0IGhhbmRsaW5nIG9mXFxuICA0NTpcXHQgICAgICAgICAgbm90aWZpY2F0aW9ucyBpcyBlbmZvcmNlZDsgZGVwZW5kaW5nIG9uIHRoZSBzdWJzZXQgb2ZcXG4gIDQ2OlxcdCAgICAgICAgICBkcml2ZXJzIGFuZCBkZXZpY2VzIHlvdSB1c2UsIHRoaXMgbWF5IG9yIG1heSBub3Qgd29yay5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBWSVJUSU9fUENJXFxuICA1MTpcXHRcXHR0cmlzdGF0ZSBcXFwiUENJIGRyaXZlciBmb3IgdmlydGlvIGRldmljZXNcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNTM6XFx0XFx0c2VsZWN0IFZJUlRJT19QQ0lfTElCXFxuICA1NDpcXHRcXHRzZWxlY3QgVklSVElPXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHZpcnRpbyBiYXNlZCBwYXJhdmlydHVhbCBkZXZpY2VcXG4gIDU3OlxcdFxcdCAgZHJpdmVycyBvdmVyIFBDSS4gIFRoaXMgcmVxdWlyZXMgdGhhdCB5b3VyIFZNTSBoYXMgYXBwcm9wcmlhdGUgUENJXFxuICA1ODpcXHRcXHQgIHZpcnRpbyBiYWNrZW5kcy4gIE1vc3QgUUVNVSBiYXNlZCBWTU1zIHNob3VsZCBzdXBwb3J0IHRoZXNlIGRldmljZXNcXG4gIDU5OlxcdFxcdCAgKGxpa2UgS1ZNIG9yIFhlbikuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIFZJUlRJT19QQ0lfQURNSU5fTEVHQUNZXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT19QQ0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDT01QSUxFX1RFU1QpXFxuICA2NjpcXHRcXHRkZWZhdWx0IHlcXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIFZJUlRJT19QQ0lfTEVHQUNZXFxuICA2OTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBsZWdhY3kgdmlydGlvIGRyYWZ0IDAuOS5YIGFuZCBvbGRlciBkZXZpY2VzXFxcIlxcbiAgNzA6XFx0XFx0ZGVmYXVsdCB5XFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT19QQ0lcXG4gIDcyOlxcdFxcdHNlbGVjdCBWSVJUSU9fUENJX0xJQl9MRUdBQ1lcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdCAgICAgICAgICBWaXJ0aW8gUENJIENhcmQgMC45LlggRHJhZnQgKGNpcmNhIDIwMTQpIGFuZCBvbGRlciBkZXZpY2Ugc3VwcG9ydC5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGJ1aWxkaW5nIGEgdHJhbnNpdGlvbmFsIGRyaXZlciwgc3VwcG9ydGluZ1xcbiAgNzc6XFx0XFx0ICBib3RoIGRldmljZXMgY29uZm9ybWluZyB0byBWaXJ0aW8gMSBzcGVjaWZpY2F0aW9uLCBhbmQgbGVnYWN5IGRldmljZXMuXFxuICA3ODpcXHRcXHQgIElmIGRpc2FibGVkLCB5b3UgZ2V0IGEgc2xpZ2h0bHkgc21hbGxlciwgbm9uLXRyYW5zaXRpb25hbCBkcml2ZXIsXFxuICA3OTpcXHRcXHQgIHdpdGggbm8gbGVnYWN5IGNvbXBhdGliaWxpdHkuXFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDAuMDQ1MDI1MTgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTA3MzEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWx2aW5nIGludG8gdGhlIFZpcnRpbyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgaXQncyB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlLiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoZSBWaXJ0aW8gc3Vic3lzdGVtLCBhbmQgdGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGxpbmNocGluIGZvciBjb25maWd1cmluZyB3aGljaCBWaXJ0aW8gZHJpdmVycyBnZXQgYnVpbHQgYW5kIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IHNvbGlkIGdyYXNwIG9mIHRoZSBWaXJ0aW8gYXJjaGl0ZWN0dXJlLCB0aGUgZGlmZmVyZW50IGRldmljZXMsIGFuZCB0aGUgdmFyaW91cyBpbnRlcmZhY2VzLiBCdXQsIHRvIHJlYWxseSBnZXQgbXkgaGVhZCBhcm91bmQgdGhlIGNvbmZpZ3VyYXRpb24gbnVhbmNlcywgZXNwZWNpYWxseSBpZiBJJ20gdHJvdWJsZXNob290aW5nIGEgc3BlY2lmaWMgZHJpdmVyIG9yIHRyeWluZyB0byBjdXN0b21pemUgYSBidWlsZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgaW4gdGhlIEtjb25maWcgZmlsZS5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBcImRlcGVuZHMgb25cIiBjbGF1c2VzLCB0aGUgY29uZGl0aW9uYWxzIGJhc2VkIG9uIGhhcmR3YXJlIHBsYXRmb3JtcyBvciBrZXJuZWwgZmVhdHVyZXMsIGFuZCBhbGwgdGhvc2UgbWVudSBzdHJ1Y3R1cmVzLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGJvdGggc2VsZWN0aW5nIHRoZSBjb3JyZWN0IGRyaXZlcnMgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBWaXJ0aW8gc3Vic3lzdGVtIGlzIGJ1aWx0IGFuZCBjb25maWd1cmVkLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBzcGVjaWZpYyBmbGFncyBvciBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgc3BlY2lmaWMgZHJpdmVycyBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsLCBidWlsdCBhcyBtb2R1bGVzLCBvciBjb21wbGV0ZWx5IGV4Y2x1ZGVkLiBJIGFudGljaXBhdGUgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgcHJvcGVyIGhhcmR3YXJlIGRpc2NvdmVyeSwgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGFuZCBvdmVyYWxsIHN5c3RlbSBjb21wYXRpYmlsaXR5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIFZpcnRpbyBkZXZpY2VzLCB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBWaXJ0aW8gYnVzLCBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncy4gS25vd2luZyB0aGUgaW5zIGFuZCBvdXRzIG9mIHRoaXMgS2NvbmZpZyBmaWxlIGlzIGdvaW5nIHRvIGJlIGtleSB0byBteSB3b3JrIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzo0NS44MzU3NTk1MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0ICAgICAgICAgIFNvIGxvb2sgb3V0IGludG8geW91ciBkcml2ZXdheS4gIERvIHlvdSBoYXZlIGEgZmx5aW5nIGNhcj8gIElmXFxuICA4MjpcXHQgICAgICAgICAgc28sIHlvdSBjYW4gaGFwcGlseSBkaXNhYmxlIHRoaXMgb3B0aW9uIGFuZCB2aXJ0aW8gd2lsbCBub3RcXG4gIDgzOlxcdCAgICAgICAgICBicmVhay4gIE90aGVyd2lzZSwgbGVhdmUgaXQgc2V0LiAgVW5sZXNzIHlvdSdyZSB0ZXN0aW5nIHdoYXRcXG4gIDg0OlxcdCAgICAgICAgICBsaWZlIHdpbGwgYmUgbGlrZSBpbiBUaGUgRnV0dXJlLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBWSVJUSU9fVkRQQVxcbiAgODk6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgZHJpdmVyIGZvciB2aXJ0aW8gZGV2aWNlc1xcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgOTE6XFx0XFx0c2VsZWN0IFZJUlRJT1xcbiAgOTI6XFx0XFx0aGVscFxcbiAgOTM6XFx0XFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWxcXG4gIDk0OlxcdFxcdCAgZGV2aWNlIGRyaXZlciBvdmVyIHZEUEEgYnVzLiBGb3IgdGhpcyB0byBiZSB1c2VmdWwsIHlvdSBuZWVkXFxuICA5NTpcXHRcXHQgIGFuIGFwcHJvcHJpYXRlIHZEUEEgZGV2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQgb3BlcmF0ZXMgb24gYVxcbiAgOTY6XFx0XFx0ICBwaHlzaWNhbCBkZXZpY2UgdG8gYWxsb3cgdGhlIGRhdGFwYXRoIG9mIHZpcnRpbyB0byBiZVxcbiAgOTc6XFx0XFx0ICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTAwOlxcdFxcbiAxMDE6XFx0Y29uZmlnIFZJUlRJT19QTUVNXFxuIDEwMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgdmlydGlvIHBtZW0gZHJpdmVyXFxcIlxcbiAxMDM6XFx0XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG4gMTA0OlxcdFxcdGRlcGVuZHMgb24gTElCTlZESU1NXFxuIDEwNTpcXHRcXHRoZWxwXFxuIDEwNjpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGFjY2VzcyB0byB2aXJ0aW8tcG1lbSBkZXZpY2VzLCBzdG9yYWdlIGRldmljZXNcXG4gMTA3OlxcdFxcdCAgdGhhdCBhcmUgbWFwcGVkIGludG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgLSBzaW1pbGFyIHRvIE5WRElNTXNcXG4gMTA4OlxcdFxcdCAgIC0gd2l0aCBhIHZpcnRpby1iYXNlZCBmbHVzaGluZyBpbnRlcmZhY2UuXFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTExOlxcdFxcbiAxMTI6XFx0Y29uZmlnIFZJUlRJT19CQUxMT09OXFxuIDExMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydGlvIGJhbGxvb24gZHJpdmVyXFxcIlxcbiAxMTQ6XFx0XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG4gMTE1OlxcdFxcdHNlbGVjdCBCQUxMT09OXFxuIDExNjpcXHRcXHRzZWxlY3QgUEFHRV9SRVBPUlRJTkdcXG4gMTE3OlxcdFxcdGhlbHBcXG4gMTE4OlxcdFxcdCBUaGlzIGRyaXZlciBzdXBwb3J0cyBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBhbW91bnRcXG4gMTE5OlxcdFxcdCBvZiBtZW1vcnkgd2l0aGluIGEgS1ZNIGd1ZXN0LlxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIFZJUlRJT19NRU1cXG4gMTI0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gbWVtIGRyaXZlclxcXCJcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcXG4gMTI2OlxcdFxcdGRlcGVuZHMgb24gVklSVElPXFxuIDEyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuIDEyODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4gMTI5OlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuIDEzMDpcXHRcXHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxuIDEzMTpcXHRcXHRoZWxwXFxuIDEzMjpcXHRcXHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxcbiAxMzM6XFx0XFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdCBUaGlzIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgeDg2LTY0LCBhcm02NCwgcmlzY3YgYW5kIHMzOTAuXFxuIDEzNjpcXHRcXHQgQWx0aG91Z2ggaXQgc2hvdWxkIGNvbXBpbGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGF0IGltcGxlbWVudFxcbiAxMzc6XFx0XFx0IG1lbW9yeSBob3QodW4pcGx1ZywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFuZC9vciBjb21tb25cXG4gMTM4OlxcdFxcdCBjb2RlIGNoYW5nZXMgbWF5IGJlIHJlcXVpcmVkIGZvciB2aXJ0aW8tbWVtLCBrZHVtcCBhbmQga2V4ZWMgdG9cXG4gMTM5OlxcdFxcdCB3b3JrIGFzIGV4cGVjdGVkLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTQyOlxcdFxcbiAxNDM6XFx0Y29uZmlnIFZJUlRJT19JTlBVVFxcbiAxNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBpbnB1dCBkcml2ZXJcXFwiXFxuIDE0NTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbiAxNDY6XFx0XFx0ZGVwZW5kcyBvbiBJTlBVVFxcbiAxNDc6XFx0XFx0aGVscFxcbiAxNDg6XFx0XFx0IFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnRpbyBpbnB1dCBkZXZpY2VzIHN1Y2ggYXNcXG4gMTQ5OlxcdFxcdCBrZXlib2FyZHMsIG1pY2UgYW5kIHRhYmxldHMuXFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdCBJZiB1bnN1cmUsIHNheSBNLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRjb25maWcgVklSVElPX01NSU9cXG4gMTU0OlxcdFxcdHRyaXN0YXRlIFxcXCJQbGF0Zm9ybSBidXMgZHJpdmVyIGZvciBtZW1vcnkgbWFwcGVkIHZpcnRpbyBkZXZpY2VzXFxcIlxcbiAxNTU6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAxNTY6XFx0XFx0c2VsZWN0IFZJUlRJT1xcbiAxNTc6XFx0XFx0aGVscFxcbiAxNTg6XFx0XFx0IFRoaXMgZHJpdmVycyBwcm92aWRlcyBzdXBwb3J0IGZvciBtZW1vcnkgbWFwcGVkIHZpcnRpb1xcbiAxNTk6XFx0XFx0IHBsYXRmb3JtIGRldmljZSBkcml2ZXIuXFxuIDE2MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDUuODM1ODg0NTExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzA3MTI3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBSZW1vdGUgUHJvY2Vzc29yIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciByZW1vdGUgcHJvY2Vzc29ycy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgYGRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgYW5kIGl0cyBzdXBwb3J0ZWQgZGV2aWNlcy4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGBDT05GSUdfUkVNT1RFUFJPQ2AsIG9mIGNvdXJzZSwgYnV0IGFsc28gYW55IGRldmljZS1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgcmVzaWRlIHRoZXJlOiBvcHRpb25zIGZvciBlbmFibGluZyBzcGVjaWZpYyBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMsIHJlc291cmNlIHRhYmxlIGdlbmVyYXRpb24gY29uZmlndXJhdGlvbnMsIG9yIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24uIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyYWJsZSBhbmQgaG93IHRoZXkgYXJlIGV4cG9zZWQgdG8gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE2NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDcuODY2NjAwMjQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk1NTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkVNT1RFUFJPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3JlbW90ZXByb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9Mj1tZW51IFxcXCJSZW1vdGVwcm9jIGRyaXZlcnNcXFwiXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMy1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzo0OmNvbmZpZyBSRU1PVEVQUk9DXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctNS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBSZW1vdGUgUHJvY2Vzc29yIHN1YnN5c3RlbVxcXCJcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnPTE1PWlmIFJFTU9URVBST0NcXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzoxNzpjb25maWcgUkVNT1RFUFJPQ19DREVWXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiUmVtb3RlcHJvYyBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDcuOTUwNTYyMDc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyODYwMTA1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFZpcnRpbyBTeW5jaHJvbml6YXRpb24gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBhbGwgYWJvdXQgc3luY2hyb25pemluZyBjYWxsYmFja3MgZHVyaW5nIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCBzbyBpdCdzIHdvcnRoIGEgY2xvc2UgbG9vay5cblxuRmlyc3RseSwgdGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KWAgY2FsbGVkIGZyb20gYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAuIFRoaXMgc2lnbmFscyB0aGUgaW50ZW50IHRvIHN5bmNocm9uaXplIGFsbCB2aXJ0aW8gY2FsbGJhY2tzIG9uIHJlc2V0IG9yIHNodXRkb3duLlxuXG5Mb29raW5nIGRlZXBlciwgdGhlIHNlcmllcyB0aGVuIGFwcGxpZXMgdGhpcyB0byBpbmRpdmlkdWFsIGRyaXZlcnMuIGB2aXJ0aW9fdmRwYWAgbm93IHVzZXMgYSBgY2FsbGJhY2tfbG9ja2Agcndsb2NrLiBUaGF0IG1ha2VzIHNlbnNlIGZvciBlbnN1cmluZyBleGNsdXNpdmUgYWNjZXNzIGR1cmluZyBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFuZCByZXNldCBvcGVyYXRpb25zLiBgdmlydGlvX2lucHV0YCBoYXMgc29tZSBjaGVja3Mgb24gYHZpLVx1MDAzZXJlYWR5YCBpbiBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYCBiZWZvcmUgY2FsbGluZyBgdmlydGlucHV0X3F1ZXVlX2V2dGJ1ZmAgYW5kIGB2aXJ0cXVldWVfa2lja2AsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSB3YXkgdG8gcHJldmVudCBzZW5kaW5nIGV2ZW50cyB3aGVuIHRoZSBkZXZpY2UgaXNuJ3QgcmVhZHkuIFRoZSByZW9yZGVyaW5nIG9mIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBiZWZvcmUgYGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlYCBpbiBgdmlydGlucHV0X3JlbW92ZWAgYWxzbyBzZWVtcyBjb3JyZWN0IHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uXG5cblRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGByZW1vdGVwcm9jYCBjaGFuZ2VzLiBUaGV5J3ZlIGFkZGVkIFNSQ1Ugc3luY2hyb25pemF0aW9uIGZvciB2aXJ0cXVldWUgaW50ZXJydXB0IGNhbGxiYWNrcy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHJlbW90ZXByb2MgaXMgb2Z0ZW4gdXNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuIFNSQ1UgaXMgYSBnb29kIGNob2ljZSBpZiByZWFkIGFjY2VzcyBpcyBmcmVxdWVudCBhbmQgd3JpdGUgYWNjZXNzIGlzIGluZnJlcXVlbnQuXG5cblRoZSBQQ0kgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmFsIG9mIGB2cF9zeW5jaHJvbml6ZV92ZWN0b3JzYCBmcm9tIGB2cF9yZXNldGAsIGluZGljYXRlcyB0aGF0IHRoZSBzeW5jaHJvbml6YXRpb24gaXMgYmVpbmcgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCwgd2hpY2ggaXMgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIHJlZmFjdG9yaW5nJ3MgaW50ZW50LiBUaGUgZm9jdXMgb24gY2xlYW5pbmcgdXAgdGhlIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGZvY3VzaW5nIG9uIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaXMgZ29vZCwgaXQgY291bGQgYmUgYSBsYXJnZSBpbXBhY3QuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFRoYW5rZnVsbHksIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBpcyBjYWxsZWQgb24gdmlydGlvIHJlc2V0cyBhY3Jvc3MgYWxsIGRyaXZlcnMuIFRoZSBgdmlydGlvX2lucHV0YCBldmVudCBxdWV1ZSBpcyBhbHNvIGEgdmVyeSBhY3RpdmUgcGFydCBvZiB0aGUgc3lzdGVtLiBXZSBrbm93IGB2aXJ0aW9fdmRwYWAgaXMgcHJlc2VudC4gYHJlbW90ZXByb2NgIGFsc28gaW52b2x2ZXMgaW50ZXJydXB0IGFuZCBkZXZpY2UgY2FsbGJhY2tzLiBgdmlydGlvX3BjaWAgYW5kIGB2cF9yZXNldGAgYXJlIG9idmlvdXNseSBpbnZva2VkIGR1cmluZyBQQ0kgdmlydGlvIHJlc2V0LlxuXG5HaXZlbiB0aGUgY3JpdGVyaWEgb2YgXCJXb3J0aEZ1enppbmcsXCIgdGhpcyBwYXRjaCBzZXJpZXMgZGVmaW5pdGVseSBxdWFsaWZpZXMuIEl0IHRvdWNoZXMgY29yZSB2aXJ0aW8gYnVzIHJlc2V0IGxvZ2ljLCBtdWx0aXBsZSBkcml2ZXJzLCBhbmQgaW50cm9kdWNlcyBsb2NraW5nIHByaW1pdGl2ZXMuIEl0IGhpdHMgY29yZSBzdWJzeXN0ZW1zLCByZWFjaGFibGUgZHJpdmVycyAodmlydGlvKSwgYW5kIGludHJvZHVjZXMgcmVmYWN0b3JpbmcvY29kZSBjbGVhbnVwLiBJdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW5jbHVkZTpcbjEuIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYFxuMi4gYHZpcnRpb19kZXZpY2Vfc2h1dGRvd25gXG4zLiBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYFxuNC4gYHZpcnRpbnB1dF9yZW1vdmVgXG41LiBgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiYFxuNi4gYHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic2BcbjcuIGBycHJvY192cV9pbnRlcnJ1cHRgXG44LiBgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2Nic2BcbjkuIGBycHJvY190eXBlX3JlbGVhc2VgXG4xMC4gYHJwcm9jX2FsbG9jYFxuYWxvbmcgd2l0aCBwb3RlbnRpYWxseSBgdnBfcmVzZXRgLCBldmVuIGlmIHRoZXkgbWF5IGJlIGBzdGF0aWNgLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgd2VsbC1kZWZpbmVkIHBhdGNoIHNlcmllcyB0aGF0IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgdGhlIHJlc2lsaWVuY2Ugb2YgdGhlIHZpcnRpbyBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzo1NS4yMzY1NzYxMTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODI0NDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2cF9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jPTg1PXN0YXRpYyB2b2lkIHZwX3NldF9zdGF0dXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHU4IHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMtOTItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYzo5MzpzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTk0LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYy0xOTEtXFx0LnNldF9zdGF0dXNcXHQ9IHZwX3NldF9zdGF0dXMsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYzoxOTI6XFx0LnJlc2V0XFx0XFx0PSB2cF9yZXNldCxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTE5My1cXHQuZmluZF92cXNcXHQ9IHZwX2ZpbmRfdnFzLFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz01MzU9c3RhdGljIHZvaWQgdnBfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYy01NDUtXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYzo1NDY6c3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYy01NDcte1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz0xMjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfbm9kZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYy0xMjI5LVxcdC5zZXRfc3RhdHVzXFx0PSB2cF9zZXRfc3RhdHVzLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmM6MTIzMDpcXHQucmVzZXRcXHRcXHQ9IHZwX3Jlc2V0LFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTIzMS1cXHQuZmluZF92cXNcXHQ9IHZwX21vZGVybl9maW5kX3ZxcyxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmM9MTI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb19wY2lfY29uZmlnX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTI0OS1cXHQuc2V0X3N0YXR1c1xcdD0gdnBfc2V0X3N0YXR1cyxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jOjEyNTA6XFx0LnJlc2V0XFx0XFx0PSB2cF9yZXNldCxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jLTEyNTEtXFx0LmZpbmRfdnFzXFx0PSB2cF9tb2Rlcm5fZmluZF92cXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjU1LjM1NDgyNDUwN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODIxMDA0MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IFRydWUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoZSByZWxldmFudCBkcml2ZXJzLiBJIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIGVuYWJsZWQgYnkgYFZJUlRJT2AsIGBWSVJUSU9fUENJYCwgYFZJUlRJT19WRFBBYCwgYFZJUlRJT19JTlBVVGAsIGFuZCBgUkVNT1RFUFJPQ2AuIFRvIGJlIGNlcnRhaW4sIEkgZG92ZSBhIGxpdHRsZSBkZWVwZXIgdG8gY2hlY2sgZGVwZW5kZW5jaWVzLiBgVklSVElPX1ZEUEFgIGRlcGVuZHMgb24gYFZEUEFgIGFuZCBzZWxlY3RzIGBWSVJUSU9gLCBgVklSVElPX0lOUFVUYCBkZXBlbmRzIG9uIGBWSVJUSU9gLCBgSU5QVVRgLCBhbmQgYFZJUlRJT19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIHNlbGVjdHMgYm90aCBgVklSVElPX1BDSV9MSUJgIGFuZCBgVklSVElPYC4gYFJFTU9URVBST0NgIGlzIGEgYm9vbGVhbiBjb25maWcuIFdpdGggdGhpcyBJIGhhZCBhIHZlcmlmaWVkIGxpc3Qgb2YgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nOiBgVklSVElPYCwgYFZJUlRJT19QQ0lgLCBgVklSVElPX1ZEUEFgLCBgVkRQQWAsIGBWSVJUSU9fSU5QVVRgLCBhbmQgYFJFTU9URVBST0NgLlxuXG5UaGVuLCBJIGxvb2tlZCBhdCBhIHNlbGVjdGlvbiBvZiBrZXkgc3ltYm9scyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvZGUgd2UgYXJlIGxpa2VseSB0byBleHBsb3JlLiBJIHBpY2tlZCBvdXQgYHZpcnRpb19yZXNldF9kZXZpY2VgLCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAsIGB2aXJ0aW5wdXRfcmVjdl9ldmVudHNgLCBgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiYCwgYHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic2AsIGBycHJvY192cV9pbnRlcnJ1cHRgLCBgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2Nic2AsIGFuZCBgcnByb2NfYWxsb2NgIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJlc3QuIEJ1dCBhZnRlciBhIHF1aWNrIHJldmlldywgaXQncyBjbGVhciB0aGVzZSBhcmUgc3BlY2lmaWMgY2FsbGJhY2tzIGFuZCBlbnRyeXBvaW50cywgcmF0aGVyIHRoYW4gYSBicm9hZCwgdWJpcXVpdG91cyBob3QgcGF0aHMgaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBkcml2ZXJzLlxuXG5BZnRlciB0aGlzIHF1aWNrIHJldmlldywgSSdtIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBvbWlzc2lvbnMgb3IgcmVkdW5kYW5jaWVzLiBHaXZlbiB0aGlzIGluZm9ybWF0aW9uLCBteSB2ZXJkaWN0IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdtIHJlYWR5IHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwNDIsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA4OjAwLjE3NTgzMTUyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY2NzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVElPXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJWSVJUSU9fVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVklSVElPX0lOUFVUXCIsXG4gICAgXCJSRU1PVEVQUk9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydGlvX3Jlc2V0X2RldmljZVwiLFxuICAgIFwidmlydGlvX2RldmljZV9zaHV0ZG93blwiLFxuICAgIFwidmlydGlucHV0X3JlY3ZfZXZlbnRzXCIsXG4gICAgXCJ2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JcIixcbiAgICBcInZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic1wiLFxuICAgIFwicnByb2NfdnFfaW50ZXJydXB0XCIsXG4gICAgXCJycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzXCIsXG4gICAgXCJycHJvY19hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duIGhhbmRsaW5nIGFjcm9zcyBjb3JlIHZpcnRpbywgdmlydGlvLWlucHV0LCB2aXJ0aW8tdmRwYSwgYW5kIHJlbW90ZXByb2MgdG8gcHJvcGVybHkgc3luY2hyb25pemUgcnVubmluZyB2aXJ0cXVldWUgY2FsbGJhY2tzIHVzaW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChTUkNVIGluIHJlbW90ZXByb2MsIHJ3bG9jayBpbiB2aXJ0aW9fdmRwYSwgYW5kIHN5bmNocm9uaXplX2NicyBpbiB2aXJ0aW8gY29yZSkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsIGJ1cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVklSVElPX1BDSVwiLFxuICAgIFwiVklSVElPX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZJUlRJT19JTlBVVFwiLFxuICAgIFwiUkVNT1RFUFJPQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb19yZXNldF9kZXZpY2VcIixcbiAgICBcInZpcnRpb19kZXZpY2Vfc2h1dGRvd25cIixcbiAgICBcInZpcnRpbnB1dF9yZWN2X2V2ZW50c1wiLFxuICAgIFwidmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiXCIsXG4gICAgXCJ2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNcIixcbiAgICBcInJwcm9jX3ZxX2ludGVycnVwdFwiLFxuICAgIFwicnByb2NfdmlydGlvX3N5bmNocm9uaXplX2Nic1wiLFxuICAgIFwicnByb2NfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDg6MDAuMzI3NTA4NTExWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4ODg4MDcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA4OjAwLjMyODM1ODM2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUzODgwMjQyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGNhbGxiYWNrIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIChzeW5jaHJvbml6ZV9jYnMpIGFjcm9zcyB2YXJpb3VzIFZpcnRJTyB0cmFuc3BvcnRzIGFuZCBkcml2ZXJzIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpIHRvIGVuc3VyZSB0aGF0IHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyBjb21wbGV0ZSBiZWZvcmUgdmlydGlvIGRldmljZSByZXNldCwgc2h1dGRvd24sIG9yIHVucmVnaXN0cmF0aW9uLlxcblxcbktleSBwb2ludHMgcmVnYXJkaW5nIGRldGVjdG9yIGFwcGxpY2FiaWxpdHk6XFxuMS4gU3luY2hyb25pemF0aW9uIGFuZCBDb25jdXJyZW5jeTogVGhlIGNoYW5nZXMgYWRkIFNSQ1UgKGB2cV9zcmN1YCksIHJ3bG9ja3MgKGBjYWxsYmFja19sb2NrYCksIHNwaW5sb2NrIGZsdXNoZXMsIGFuZCBJUlEgc3luY2hyb25pemF0aW9uIHRvIGVsaW1pbmF0ZSByYWNlcyB3aGVyZSB2aXJ0cXVldWUgY2FsbGJhY2tzIGV4ZWN1dGUgY29uY3VycmVudGx5IGR1cmluZyB0ZWFyZG93bi5cXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgdG91Y2ggdXNlci1jb3B5IGJvdW5kYXJpZXMgb3IgbmV0bGluay9pb2N0bCBvdXRwdXQgYnVmZmVycywgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIGFsbCBuZXcgc3luY2hyb25pemF0aW9uIHN0cnVjdHVyZXMgKGBpbml0X3NyY3Vfc3RydWN0YCwgYHJ3bG9ja19pbml0YCkuXFxuXFxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNcbmluZGV4IDc0MjVhODU0ODE0MWEuLmJhY2E2YjA5ZTlhYzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG4rKysgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICAqXG4gICogQmFzZWQgb24gVmlydGlvIE1NSU8gZHJpdmVyIGJ5IFBhd2VsIE1vbGwsIGNvcHlyaWdodCAyMDExLTIwMTQsIEFSTSBMdGQuXG4gICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuQEAgLTg2OSw2ICs4NzAsMTQgQEAgc3RhdGljIHZvaWQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHR2dV9kZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdnVfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuK3tcbitcdHN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7XG4rXG4rXHRpZiAodnVfZGV2LVx1MDAzZWlycSBcdTAwM2U9IDApXG4rXHRcdHN5bmNocm9uaXplX2lycSh2dV9kZXYtXHUwMDNlaXJxKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cdTAwM2Vwcml2O1xuQEAgLTExMjEsNiArMTEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3VtbF9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0ID0gdnVfcmVzZXQsXG4gXHQuZmluZF92cXMgPSB2dV9maW5kX3ZxcyxcbiBcdC5kZWxfdnFzID0gdnVfZGVsX3ZxcyxcbitcdC5zeW5jaHJvbml6ZV9jYnMgPSB2dV9zeW5jaHJvbml6ZV9jYnMsXG4gXHQuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdnVfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWUgPSB2dV9idXNfbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jIGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbkBAIC0xMTM1LDYgKzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHRtX3ZkZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XG4rXHRzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvID0gdG1fdmRldi1cdTAwM2V2cmluZ3NbMF0uZmlmbztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmlmby1cdTAwM2VzcGluX2xvY2spOyBpKyspIHtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmlmby1cdTAwM2VzcGluX2xvY2tbaV0sIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuK1x0fVxuK31cbitcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXG4gc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcbkBAIC0xMTc5LDYgKzExOTIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIG1seGJmX3RtZmlmb192aXJ0aW9fY29uZmlnX29wcyA9IHtcbiBcdC5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsXG4gXHQuZGVsX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZGVsX3ZxcyxcbiBcdC5yZXNldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXG4gXHQuc2V0X3N0YXR1cyA9IG1seGJmX3RtZmlmb192aXJ0aW9fc2V0X3N0YXR1cyxcbiBcdC5nZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfc3RhdHVzLFxuIFx0LmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuaW5kZXggMWVkNDA2NzE0ODQ5MS4uMWIxMzlkMjVhYjJiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG5AQCAtMjQxMCw2ICsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCJyZWxlYXNpbmcgJXNcXG5cIiwgcnByb2MtXHUwMDNlbmFtZSk7XG4gXG4rXHRjbGVhbnVwX3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuIFx0aWRyX2Rlc3Ryb3koXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzKTtcbiBcbiBcdGlmIChycHJvYy1cdTAwM2VpbmRleCBcdTAwM2U9IDApXG5AQCAtMjUwNyw2ICsyNTA4LDExIEBAIHN0cnVjdCBycHJvYyAqcnByb2NfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0aWYgKCFycHJvYylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KSkge1xuK1x0XHRrZnJlZShycHJvYyk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuIFx0cnByb2MtXHUwMDNlcHJpdiA9IFx1MDAyNnJwcm9jWzFdO1xuIFx0cnByb2MtXHUwMDNlYXV0b19ib290ID0gdHJ1ZTtcbiBcdHJwcm9jLVx1MDAzZWVsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTtcbkBAIC0yNTcxLDYgKzI1NzcsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2FsbG9jKTtcbiAgKlxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXG4gICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLlxuKyAqXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxuICAqL1xuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuIHtcbkBAIC0yNTg2LDYgKzI1OTQsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2ZyZWUpO1xuICAqXG4gICogSWYgbm8gb25lIGhvbGRzIGFueSByZWZlcmVuY2UgdG8gcnByb2MgYW55bW9yZSwgdGhlbiBpdHMgcmVmY291bnQgd291bGRcbiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuXG4rICpcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuXG4gICovXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVtb3RlcHJvY19pbnRlcm5hbC5oXCJcbiBcbkBAIC04OSwxNCArOTAsMTkgQEAgc3RhdGljIGJvb2wgcnByb2NfdmlydGlvX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKVxuIHtcbiBcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xuK1x0aW50IHNyY3VfaWR4O1xuK1x0aXJxcmV0dXJuX3QgcmV0O1xuK1xuK1x0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KTtcbiBcbiBcdGRldl9kYmcoXHUwMDI2cnByb2MtXHUwMDNlZGV2LCBcInZxIGluZGV4ICVkIGlzIGludGVycnVwdGVkXFxuXCIsIG5vdGlmeWlkKTtcbiBcbiBcdHJ2cmluZyA9IGlkcl9maW5kKFx1MDAyNnJwcm9jLVx1MDAzZW5vdGlmeWlkcywgbm90aWZ5aWQpO1xuLVx0aWYgKCFydnJpbmcgfHwgIXJ2cmluZy1cdTAwM2V2cSlcbi1cdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuK1xuK1x0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XG4gXG4tXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cdTAwM2V2cSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gXG5AQCAtMjQyLDYgKzI0OCwxMyBAQCBzdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRkZXZfZGJnKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCBcInJlc2V0ICFcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHJwcm9jICpycHJvYyA9IHZkZXZfdG9fcnByb2ModmRldik7XG4rXG4rXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuK31cbitcbiAvKiBwcm92aWRlIHRoZSB2ZGV2IGZlYXR1cmVzIGFzIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZSAqL1xuIHN0YXRpYyB1NjQgcnByb2NfdmlydGlvX2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiB7XG5AQCAtMzMwLDYgKzM0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgcnByb2NfdmlydGlvX2NvbmZpZ19vcHMgPSB7XG4gXHQuZmluZF92cXNcdD0gcnByb2NfdmlydGlvX2ZpbmRfdnFzLFxuIFx0LmRlbF92cXNcdD0gcnByb2NfdmlydGlvX2RlbF92cXMsXG4gXHQucmVzZXRcdFx0PSBycHJvY192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzXHQ9IHJwcm9jX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXNcdD0gcnByb2NfdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0XHRcdD0gcnByb2NfdmlydGlvX2dldCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5pbmRleCBiYWI2Y2FkM2ZkNWNlLi41NTJkNzc5OTgwMTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNcbisrKyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5AQCAtMTA2Miw3ICsxMDYyLDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpO1xuIFx0c3RydWN0IGFpcnFfaW5mbyAqaW5mbyA9IHZjZGV2LVx1MDAzZWFpcnFfaW5mbztcbiBcbi1cdGlmIChpbmZvKSB7XG4rXHRpZiAodmNkZXYtXHUwMDNlaXNfdGhpbmludCBcdTAwMjZcdTAwMjYgaW5mbykge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIGRldmljZSB1c2VzIGFkYXB0ZXIgaW50ZXJydXB0czogc3luY2hyb25pemUgd2l0aFxuIFx0XHQgKiB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsZWQgYnkgdmlydGlvX2FpcnFfaGFuZGxlcigpXG5AQCAtMTIwNCwxMyArMTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHRcdHZjZGV2LVx1MDAzZWVyciA9IC1FSU87XG4gXHR9XG4gXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XG4tI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuIFx0LypcbiBcdCAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlXG4gXHQgKiBkaXNhYmxlZCBoZXJlLlxuIFx0ICovXG4gXHRyZWFkX2xvY2soXHUwMDI2dmNkZXYtXHUwMDNlaXJxX2xvY2spO1xuLSNlbmRpZlxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSxcbiBcdFx0XHQgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7XG4gXHRcdC8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqL1xuQEAgLTEyMTksOSArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsXG4gXHRcdHZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpO1xuIFx0XHR2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnZjZGV2LVx1MDAzZWlycV9sb2NrKTtcbi0jZW5kaWZcbiBcdGlmICh0ZXN0X2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpKSB7XG4gXHRcdHZpcnRpb19jb25maWdfY2hhbmdlZChcdTAwMjZ2Y2Rldi1cdTAwM2V2ZGV2KTtcbiBcdFx0Y2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuaW5kZXggNzViYjRmZmUzYjg3Ny4uYWQxYzUwYjhhOTRlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuQEAgLTI2NCw2ICsyNjQsNyBAQCB2b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbiAjZW5kaWZcbiBcbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XG4gXG5AQCAtNDI0LDYgKzQyNSw3IEBAIHZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuIFx0ICogU29tZSBkZXZpY2VzIGdldCB3ZWRnZWQgaWYgdGhpcyBoYXBwZW5zLCBzbyByZXNldCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QuXG4gXHQgKi9cbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX2RldmljZV9zaHV0ZG93bik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuaW5kZXggZGVlYzI0ZThlNjgyOC4uN2I2NTRhZjBhNDJjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShldmVudC1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShldmVudC1cdTAwM2V2YWx1ZSkpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHRpZiAoIXZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0dmlydGlucHV0X3F1ZXVlX2V2dGJ1Zih2aSwgZXZlbnQpO1xuIFx0XHR9XG4tXHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbitcdFx0aWYgKHZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0zNTAsOCArMzUzLDkgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHZpLVx1MDAzZXJlYWR5ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuK1x0LyogQ2FsbGJhY2tzIHVzZSB2aS1cdTAwM2VpZGV2LiAqL1xuIFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcbitcdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuIFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXHUwMDNlc3RzKSkgIT0gTlVMTClcbiBcdFx0a2ZyZWUoYnVmKTtcbiBcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNcbmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG5AQCAtOTgsOCArOTgsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdC8qIEZsdXNoIG91dCB0aGUgc3RhdHVzIHdyaXRlLCBhbmQgZmx1c2ggaW4gZGV2aWNlIHdyaXRlcyxcbiBcdCAqIGluY2x1ZGluZyBNU2ktWCBpbnRlcnJ1cHRzLCBpZiBhbnkuICovXG4gXHR2cF9sZWdhY3lfZ2V0X3N0YXR1cyhcdTAwMjZ2cF9kZXYtXHUwMDNlbGRldik7XG4tXHQvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqL1xuLVx0dnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTtcbiB9XG4gXG4gc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG5pbmRleCA2ZDhhZTJhNmE4Y2FmLi5jOWUyMTMxN2M1MWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuQEAgLTU1OSw5ICs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdFx0bXNsZWVwKDEpO1xuIFxuIFx0dnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpO1xuLVxuLVx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cbi1cdHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG5AQCAtMjcsNiArMjcsNyBAQFxuIHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2Uge1xuIFx0c3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYTtcbitcdHJ3bG9ja190IGNhbGxiYWNrX2xvY2s7XG4gXHR1NjQgZmVhdHVyZXM7XG4gfTtcbiBcbkBAIC0xMjMsOCArMTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlO1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGlycXJldHVybl90IHJldDtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuK1x0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVx1MDAzZXZkZXYpO1xuK1x0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcbitcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4rXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZkZXYpO1xuK1xuK1x0d3JpdGVfbG9ja19pcnEoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuK1x0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpcbkBAIC00MzksNiArNDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0XHRcdD0gdmlydGlvX3ZkcGFfcmVzZXQsXG4gXHQuZmluZF92cXNcdD0gdmlydGlvX3ZkcGFfZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSB2aXJ0aW9fdmRwYV9kZWxfdnFzLFxuK1x0LnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyxcbiBcdC5nZXRfZmVhdHVyZXNcdD0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdmlydGlvX3ZkcGFfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWVcdD0gdmlydGlvX3ZkcGFfYnVzX25hbWUsXG5AQCAtNDcyLDYgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuY29uZmlnID0gXHUwMDI2dmlydGlvX3ZkcGFfY29uZmlnX29wcztcbiBcdHZkX2Rldi1cdTAwM2V2ZGV2Lm1hcCA9IHZkcGEtXHUwMDNlbWFwO1xuIFx0dmRfZGV2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuK1x0cndsb2NrX2luaXQoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIFxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID0gb3BzLVx1MDAzZWdldF9kZXZpY2VfaWQodmRwYSk7XG4gXHRpZiAodmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID09IDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcmN1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92aXJ0aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuQEAgLTIzMCw2ICsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHtcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xuICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZVxuICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHNcbisgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3NcbiAgKiBAaW5kZXg6IGluZGV4IG9mIHRoaXMgcnByb2MgZGV2aWNlXG4gICogQGF0dGFjaF93b3JrOiB3b3JrcXVldWUgZm9yIGF0dGFjaGluZyBycHJvY1xuICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2hcbkBAIC0yNzYsNiArMjc4LDcgQEAgc3RydWN0IHJwcm9jIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzO1xuIFx0c3RydWN0IGlkciBub3RpZnlpZHM7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcbiBcdGludCBpbmRleDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbkBAIC03MSw5ICs3MSw5IEBAIHN0cnVjdCB2aXJ0cXVldWVfaW5mbyB7XG4gICpcdFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yIHN0YXR1c1xuICAqIEBkZWxfdnFzOiBmcmVlIHZpcnRxdWV1ZXMgZm91bmQgYnkgZmluZF92cXMoKS5cbiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbClcbi0gKiAgICAgIFRoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZVxuLSAqICAgICAgcXVldWUgYmVmb3JlIGl0IGFyZSB2aXNpYmxlIHRvIHRoZSB2cmluZ19pbnRlcnJ1cHQoKSB0aGF0IGlzXG4tICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuXG4rICogICAgICBXYWl0IGZvciBydW5uaW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4gTWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlXG4rICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsc1xuKyAqICAgICAgdGhhdCBmb2xsb3cgaXQuXG4gICogICAgICB2ZGV2OiB0aGUgdmlydGlvX2RldmljZVxuICAqIEBnZXRfZmVhdHVyZXM6IGdldCB0aGUgYXJyYXkgb2YgZmVhdHVyZSBiaXRzIGZvciB0aGlzIGRldmljZS5cbiAgKlx0dmRldjogdGhlIHZpcnRpb19kZXZpY2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA4OjAwLjMyODM1OTkzMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTM4Nzk3OTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnRpbyBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZml4IGZvciB0aGUgdmlydGlvIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGRldmljZSByZXNldCwgc2h1dGRvd24sIGFuZCByZW1vdmFsIHNjZW5hcmlvcy4gSXQgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHZhcmlldHkgb2YgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gdmlydHF1ZXVlIGNhbGxiYWNrcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCBkZXZpY2UgbGlmZWN5Y2xlIGV2ZW50cy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhczpcblxuMS4gIGBhcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jYDogVGhpcyBhZGRzIGEgYHZ1X3N5bmNocm9uaXplX2Nic2AgY2FsbGJhY2sgd2hpY2ggY2FsbHMgYHN5bmNocm9uaXplX2lycWAuIFN0cmFpZ2h0Zm9yd2FyZCBJUlEgc3luY2hyb25pemF0aW9uLlxuMi4gIGBkcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jYDogIFRoaXMgb25lIGFkZHMgYG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzYCB0aGF0IHRha2VzIGFuZCByZWxlYXNlcyBzcGlubG9ja3MuIFNlZW1zIGxpa2Ugc3RhbmRhcmQgc3BpbmxvY2sgdXNhZ2Ugd2l0aGluIHRoaXMgZHJpdmVyLlxuMy4gIGBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNgLCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oYDogIFRoZSByZW1vdGVwcm9jIGNoYW5nZXMgYXJlIGludGVyZXN0aW5nLiBJdCBpbnRyb2R1Y2VzIGFuIGBzcmN1X3N0cnVjdGAgKGB2cV9zcmN1YCkgdG8gdGhlIGBycHJvY2Agc3RydWN0dXJlLCBpbml0aWFsaXppbmcgYW5kIGNsZWFuaW5nIGl0IHVwIGFwcHJvcHJpYXRlbHkuICBJdCB1c2VzIGBzcmN1X3JlYWRfbG9ja2AvYHVubG9ja2Agd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYWRkcyBhIGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYCB0aGF0IGNhbGxzIGBzeW5jaHJvbml6ZV9zcmN1YC4gVGhpcyBpcyBhIGNsYXNzaWMgU1JDVSB1c2FnZSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByZWFkcyBkdXJpbmcgcmVzZXQuXG40LiAgYGRyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jYDogIFNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzYCBjaGVjaywgYW5kIHRoZSByZW1vdmFsIG9mIGEgYENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTmAgZ3VhcmQgYXJvdW5kIHNvbWUgbG9ja2luZy4gIEl0J3MgbGlrZWx5IHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IHN5bmNocm9uaXphdGlvbiBsb2dpYyBnaXZlbiB0aGUgb3RoZXIgY2hhbmdlcy5cbjUuICBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgOiAgVGhlIGNvcmUgY2hhbmdlIGhlcmU6IGFkZHMgYSBjYWxsIHRvIGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCB3aXRoaW4gYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAuIFRoaXMgaXMgdGhlIGhvb2sgZm9yIGFsbCB0aGUgb3RoZXIgZHJpdmVycyB0byByZWdpc3RlciB0aGVpciBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zLlxuNi4gIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY2A6ICBDaGFuZ2VzIHRvIHRoZSBldmVudCBoYW5kbGluZyB0byBjaGVjayB0aGUgYHZpLVx1MDAzZXJlYWR5YCBmbGFnIGFuZCBlbnN1cmUgYHZpcnRxdWV1ZV9raWNrYCBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IG9yZGVyIGFuZCBtb2RpZmllcyBkZXZpY2UgdW5yZWdpc3RyYXRpb24gdG8gdXNlIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYC4gVGhpcyBmaXhlcyBvcmRlcmluZyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBkZXZpY2UgcmVzZXQgYW5kIGhlbHBzIHdpdGggZW5zdXJpbmcgd2UgZG8gbm90IHVucmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZSB0b28gZWFybHkuXG43LiAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNgIFx1MDAyNiBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY2A6IFJlbW92aW5nIGNhbGxzIHRvIGB2cF9zeW5jaHJvbml6ZV92ZWN0b3JzYCBiZWNhdXNlIHRoZSBuZXcgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGhhbmRsZXMgaXQuXG44LiAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNgOiBBZGRzIGFuIGByd2xvY2tfdGAgdG8gdGhlIGB2aXJ0aW9fdmRwYV9kZXZpY2VgIHN0cnVjdC4gIEl0IHByb3RlY3RzIGB2cmluZ19pbnRlcnJ1cHRgIHdpdGhpbiBgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiYCB1c2luZyBgcmVhZF9sb2NrX2lycXNhdmVgL2ByZWFkX3VubG9ja19pcnFyZXN0b3JlYCBhbmQgaW1wbGVtZW50cyBgdmlydGlvX3ZkcGFfc3luY2hyb25pemVfY2JzYCB1c2luZyBgd3JpdGVfbG9ja19pcnFgL2B3cml0ZV91bmxvY2tfaXJxYC4gU3RhbmRhcmQgcmVhZC13cml0ZSBsb2NrIHRvIG1ha2Ugc3VyZSBjYWxsYmFja3Mgc3luY2hyb25pemUuXG45LiAgYGluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oYDogIEEgc2ltcGxlIGNvbW1lbnQgdXBkYXRlLlxuXG5Ob3csIGZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgaW1wb3J0YW50OiB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlcmllcyBpcyBhYm91dCAqc3luY2hyb25pemF0aW9uKi4gSXQgZG9lc24ndCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBkaXJlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS4gSXTigJlzIGFsbCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIElSUSBzeW5jaHJvbml6YXRpb24uXG5cblNvLCBkb2VzIGl0IG5lZWQgS01TQU4/IE5vLCBiZWNhdXNlIEtNU0FOIGlzIGJlc3Qgc3VpdGVkIHRvIGZpbmQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByaXNrcyBoZXJlIGFyZSBLQVNBTi9MT0NLREVQIHJlbGF0ZWQsIGluIHRoYXQgS0FTQU4gZGV0ZWN0cyB0aGUgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSwgd2hpbGUgTE9DS0RFUCBkZXRlY3RzIHRoZSBsb2NraW5nIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuSGVyZSdzIG15IHJlYXNvbmluZyBmb3IgdGhlIGBLTVNBTlJlYXNvbmluZ2A6XG5cblx1MDAzZSBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gdmlydGlvIGRldmljZSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlc2V0LCBzaHV0ZG93biwgYW5kIHRlYXJkb3duIGFjcm9zcyB2YXJpb3VzIHZpcnRpbyB0cmFuc3BvcnRzIGFuZCBzdWJzeXN0ZW1zIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpLiBJdCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MywiT3V0cHV0VG9rZW5zIjoyOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDg6MTUuNzE2MzQzNTQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cXG5cXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXFxuMi4gRmFpbHVyZSBNb2RlczogUG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBpbnZvbHZlIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBkZWFkbG9ja3MsIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KSBvciB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxcblxcbkNvbnNlcXVlbnRseSwgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZnV6emluZyBidWlsZHMgYXJlIGZ1bGx5IGFkZXF1YXRlIHRvIHRlc3QgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cXG5cXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXFxuMi4gRmFpbHVyZSBNb2RlczogUG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBpbnZvbHZlIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBkZWFkbG9ja3MsIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KSBvciB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxcblxcbkNvbnNlcXVlbnRseSwgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZnV6emluZyBidWlsZHMgYXJlIGZ1bGx5IGFkZXF1YXRlIHRvIHRlc3QgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4j6b8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 15:05:51 +0000 UTC FinishedAt: 2026-09-06 15:08:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a500db7819c50db59e55f1b4fa1c3baa5a2616f3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO", "VIRTIO_PCI", "VIRTIO_VDPA", "VDPA", "VIRTIO_INPUT", "REMOTEPROC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a500db7819c50db59e55f1b4fa1c3baa5a2616f3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTIO", "VIRTIO_PCI", "VIRTIO_VDPA", "VDPA", "VIRTIO_INPUT", "REMOTEPROC" ], "series_id": "a9633763-a726-40d8-ac72-fa45e0cb3c28" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "virtio_reset_device", "virtio_device_shutdown", "virtinput_recv_events", "virtio_vdpa_virtqueue_cb", "virtio_vdpa_synchronize_cbs", "rproc_vq_interrupt", "rproc_virtio_synchronize_cbs", "rproc_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VklSVElPX0lOUFVUJiMzNDssCiAgICAmIzM0O1JFTU9URVBST0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fcmVzZXRfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZpcnRpb19kZXZpY2Vfc2h1dGRvd24mIzM0OywKICAgICYjMzQ7dmlydGlucHV0X3JlY3ZfZXZlbnRzJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYiYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfdnFfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3Jwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cblxuS2V5IHBvaW50cyByZWdhcmRpbmcgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTpcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCB0b3VjaCB1c2VyLWNvcHkgYm91bmRhcmllcyBvciBuZXRsaW5rL2lvY3RsIG91dHB1dCBidWZmZXJzLCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgYWxsIG5ldyBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAoYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS5cblxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG5pbmRleCA3NDI1YTg1NDgxNDFhLi5iYWNhNmIwOWU5YWMyIDEwMDY0NFxuLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gICpcbiAgKiBCYXNlZCBvbiBWaXJ0aW8gTU1JTyBkcml2ZXIgYnkgUGF3ZWwgTW9sbCwgY29weXJpZ2h0IDIwMTEtMjAxNCwgQVJNIEx0ZC5cbiAgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuQEAgLTg2OSw2ICYjNDM7ODcwLDE0IEBAIHN0YXRpYyB2b2lkIHZ1X3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0dnVfZGV2LVx1MDAzZXN0YXR1cyA9IDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB2dV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmlydGlvX3VtbF9kZXZpY2UgKnZ1X2RldiA9IHRvX3ZpcnRpb191bWxfZGV2aWNlKHZkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodnVfZGV2LVx1MDAzZWlycSBcdTAwM2U9IDApXG4mIzQzO1x0XHRzeW5jaHJvbml6ZV9pcnEodnVfZGV2LVx1MDAzZWlycSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cdTAwM2Vwcml2O1xuQEAgLTExMjEsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb191bWxfY29uZmlnX29wcyA9IHtcbiBcdC5yZXNldCA9IHZ1X3Jlc2V0LFxuIFx0LmZpbmRfdnFzID0gdnVfZmluZF92cXMsXG4gXHQuZGVsX3ZxcyA9IHZ1X2RlbF92cXMsXG4mIzQzO1x0LnN5bmNocm9uaXplX2NicyA9IHZ1X3N5bmNocm9uaXplX2NicyxcbiBcdC5nZXRfZmVhdHVyZXMgPSB2dV9nZXRfZmVhdHVyZXMsXG4gXHQuZmluYWxpemVfZmVhdHVyZXMgPSB2dV9maW5hbGl6ZV9mZWF0dXJlcyxcbiBcdC5idXNfbmFtZSA9IHZ1X2J1c19uYW1lLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jXG5pbmRleCAzYzY0MDg1ODEzNzNiLi5jMjYwZTNhMTU0NGVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuQEAgLTExMzUsNiAmIzQzOzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHRtX3ZkZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XG4mIzQzO1x0c3RydWN0IG1seGJmX3RtZmlmbyAqZmlmbyA9IHRtX3ZkZXYtXHUwMDNldnJpbmdzWzBdLmZpZm87XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmaWZvLVx1MDAzZXNwaW5fbG9jayk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXG4gc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcbkBAIC0xMTc5LDYgJiM0MzsxMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBtbHhiZl90bWZpZm9fdmlydGlvX2NvbmZpZ19vcHMgPSB7XG4gXHQuZmluZF92cXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2ZpbmRfdnFzLFxuIFx0LmRlbF92cXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2RlbF92cXMsXG4gXHQucmVzZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0LFxuJiM0MztcdC5zeW5jaHJvbml6ZV9jYnMgPSBtbHhiZl90bWZpZm9fdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0ID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG5pbmRleCAxZWQ0MDY3MTQ4NDkxLi4xYjEzOWQyNWFiMmJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNcbkBAIC0yNDEwLDYgJiM0MzsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCYjMzQ7cmVsZWFzaW5nICVzXFxuXCYjMzQ7LCBycHJvYy1cdTAwM2VuYW1lKTtcbiBcbiYjNDM7XHRjbGVhbnVwX3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuIFx0aWRyX2Rlc3Ryb3koXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzKTtcbiBcbiBcdGlmIChycHJvYy1cdTAwM2VpbmRleCBcdTAwM2U9IDApXG5AQCAtMjUwNyw2ICYjNDM7MjUwOCwxMSBAQCBzdHJ1Y3QgcnByb2MgKnJwcm9jX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmICghcnByb2MpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGlmIChpbml0X3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpKSB7XG4mIzQzO1x0XHRrZnJlZShycHJvYyk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnByb2MtXHUwMDNlcHJpdiA9IFx1MDAyNnJwcm9jWzFdO1xuIFx0cnByb2MtXHUwMDNlYXV0b19ib290ID0gdHJ1ZTtcbiBcdHJwcm9jLVx1MDAzZWVsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTtcbkBAIC0yNTcxLDYgJiM0MzsyNTc3LDggQEAgRVhQT1JUX1NZTUJPTChycHJvY19hbGxvYyk7XG4gICpcbiAgKiBJZiBubyBvbmUgaG9sZHMgYW55IHJlZmVyZW5jZSB0byBycHJvYyBhbnltb3JlLCB0aGVuIGl0cyByZWZjb3VudCB3b3VsZFxuICAqIG5vdyBkcm9wIHRvIHplcm8sIGFuZCBpdCB3b3VsZCBiZSBmcmVlZC5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxuICAqL1xuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuIHtcbkBAIC0yNTg2LDYgJiM0MzsyNTk0LDggQEAgRVhQT1JUX1NZTUJPTChycHJvY19mcmVlKTtcbiAgKlxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXG4gICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuXG4gICovXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuQEAgLTIzLDYgJiM0MzsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3JjdS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmVtb3RlcHJvY19pbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtODksMTQgJiM0Mzs5MCwxOSBAQCBzdGF0aWMgYm9vbCBycHJvY192aXJ0aW9fbm90aWZ5KHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIGlycXJldHVybl90IHJwcm9jX3ZxX2ludGVycnVwdChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBpbnQgbm90aWZ5aWQpXG4ge1xuIFx0c3RydWN0IHJwcm9jX3ZyaW5nICpydnJpbmc7XG4mIzQzO1x0aW50IHNyY3VfaWR4O1xuJiM0MztcdGlycXJldHVybl90IHJldDtcbiYjNDM7XG4mIzQzO1x0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KTtcbiBcbiBcdGRldl9kYmcoXHUwMDI2cnByb2MtXHUwMDNlZGV2LCBcJiMzNDt2cSBpbmRleCAlZCBpcyBpbnRlcnJ1cHRlZFxcblwmIzM0Oywgbm90aWZ5aWQpO1xuIFxuIFx0cnZyaW5nID0gaWRyX2ZpbmQoXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzLCBub3RpZnlpZCk7XG4tXHRpZiAoIXJ2cmluZyB8fCAhcnZyaW5nLVx1MDAzZXZxKVxuLVx0XHRyZXR1cm4gSVJRX05PTkU7XG4mIzQzO1x0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuJiM0MztcbiYjNDM7XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UsIHNyY3VfaWR4KTtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gXG5AQCAtMjQyLDYgJiM0MzsyNDgsMTMgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0ZGV2X2RiZyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgXCYjMzQ7cmVzZXQgIVxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJwcm9jICpycHJvYyA9IHZkZXZfdG9fcnByb2ModmRldik7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3NyY3UoXHUwMDI2cnByb2MtXHUwMDNldnFfc3JjdSk7XG4mIzQzO31cbiYjNDM7XG4gLyogcHJvdmlkZSB0aGUgdmRldiBmZWF0dXJlcyBhcyByZXRyaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUgKi9cbiBzdGF0aWMgdTY0IHJwcm9jX3ZpcnRpb19nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4ge1xuQEAgLTMzMCw2ICYjNDM7MzQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBycHJvY192aXJ0aW9fY29uZmlnX29wcyA9IHtcbiBcdC5maW5kX3Zxc1x0PSBycHJvY192aXJ0aW9fZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSBycHJvY192aXJ0aW9fZGVsX3ZxcyxcbiBcdC5yZXNldFx0XHQ9IHJwcm9jX3ZpcnRpb19yZXNldCxcbiYjNDM7XHQuc3luY2hyb25pemVfY2JzID0gcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzXHQ9IHJwcm9jX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXNcdD0gcnByb2NfdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0XHRcdD0gcnByb2NfdmlydGlvX2dldCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5pbmRleCBiYWI2Y2FkM2ZkNWNlLi41NTJkNzc5OTgwMTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5AQCAtMTA2Miw3ICYjNDM7MTA2Miw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0c3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiA9IHRvX3ZjX2RldmljZSh2ZGV2KTtcbiBcdHN0cnVjdCBhaXJxX2luZm8gKmluZm8gPSB2Y2Rldi1cdTAwM2VhaXJxX2luZm87XG4gXG4tXHRpZiAoaW5mbykge1xuJiM0MztcdGlmICh2Y2Rldi1cdTAwM2Vpc190aGluaW50IFx1MDAyNlx1MDAyNiBpbmZvKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgZGV2aWNlIHVzZXMgYWRhcHRlciBpbnRlcnJ1cHRzOiBzeW5jaHJvbml6ZSB3aXRoXG4gXHRcdCAqIHZyaW5nX2ludGVycnVwdCgpIGNhbGxlZCBieSB2aXJ0aW9fYWlycV9oYW5kbGVyKClcbkBAIC0xMjA0LDEzICYjNDM7MTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHRcdHZjZGV2LVx1MDAzZWVyciA9IC1FSU87XG4gXHR9XG4gXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XG4tI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuIFx0LypcbiBcdCAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlXG4gXHQgKiBkaXNhYmxlZCBoZXJlLlxuIFx0ICovXG4gXHRyZWFkX2xvY2soXHUwMDI2dmNkZXYtXHUwMDNlaXJxX2xvY2spO1xuLSNlbmRpZlxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSxcbiBcdFx0XHQgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7XG4gXHRcdC8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqL1xuQEAgLTEyMTksOSAmIzQzOzEyMTcsNyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHR2cSA9IHZpcnRpb19jY3dfdnFfYnlfaW5kKHZjZGV2LCBpKTtcbiBcdFx0dnJpbmdfaW50ZXJydXB0KDAsIHZxKTtcbiBcdH1cbi0jaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXG4gXHRyZWFkX3VubG9jayhcdTAwMjZ2Y2Rldi1cdTAwM2VpcnFfbG9jayk7XG4tI2VuZGlmXG4gXHRpZiAodGVzdF9iaXQoMCwgaW5kaWNhdG9yczIodmNkZXYpKSkge1xuIFx0XHR2aXJ0aW9fY29uZmlnX2NoYW5nZWQoXHUwMDI2dmNkZXYtXHUwMDNldmRldik7XG4gXHRcdGNsZWFyX2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcbmluZGV4IDc1YmI0ZmZlM2I4NzcuLmFkMWM1MGI4YTk0ZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcbkBAIC0yNjQsNiAmIzQzOzI2NCw3IEBAIHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuICNlbmRpZlxuIFxuIFx0ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VyZXNldChkZXYpO1xuJiM0MztcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XG4gXG5AQCAtNDI0LDYgJiM0Mzs0MjUsNyBAQCB2b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbiBcdCAqIFNvbWUgZGV2aWNlcyBnZXQgd2VkZ2VkIGlmIHRoaXMgaGFwcGVucywgc28gcmVzZXQgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90LlxuIFx0ICovXG4gXHRkZXYtXHUwMDNlY29uZmlnLVx1MDAzZXJlc2V0KGRldik7XG4mIzQzO1x0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3NodXRkb3duKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG5pbmRleCBkZWVjMjRlOGU2ODI4Li43YjY1NGFmMGE0MmNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG5AQCAtNDksOSAmIzQzOzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShldmVudC1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShldmVudC1cdTAwM2V2YWx1ZSkpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKCF2aS1cdTAwM2VyZWFkeSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR2aXJ0aW5wdXRfcXVldWVfZXZ0YnVmKHZpLCBldmVudCk7XG4gXHRcdH1cbi1cdFx0dmlydHF1ZXVlX2tpY2sodnEpO1xuJiM0MztcdFx0aWYgKHZpLVx1MDAzZXJlYWR5KVxuJiM0MztcdFx0XHR2aXJ0cXVldWVfa2ljayh2cSk7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMzUwLDggJiM0MzszNTMsOSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0dmktXHUwMDNlcmVhZHkgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXHUwMDNlaWRldik7XG4mIzQzO1x0LyogQ2FsbGJhY2tzIHVzZSB2aS1cdTAwM2VpZGV2LiAqL1xuIFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcbiYjNDM7XHRpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh2aS1cdTAwM2VpZGV2KTtcbiBcdHdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZpLVx1MDAzZXN0cykpICE9IE5VTEwpXG4gXHRcdGtmcmVlKGJ1Zik7XG4gXHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG5pbmRleCBkOWNiYjAyYjM1YTExLi44MTE1YWEzOWUwMWU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xuQEAgLTk4LDggJiM0Mzs5OCw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuIFx0LyogRmx1c2ggb3V0IHRoZSBzdGF0dXMgd3JpdGUsIGFuZCBmbHVzaCBpbiBkZXZpY2Ugd3JpdGVzLFxuIFx0ICogaW5jbHVkaW5nIE1TaS1YIGludGVycnVwdHMsIGlmIGFueS4gKi9cbiBcdHZwX2xlZ2FjeV9nZXRfc3RhdHVzKFx1MDAyNnZwX2Rldi1cdTAwM2VsZGV2KTtcbi1cdC8qIEZsdXNoIHBlbmRpbmcgVlEvY29uZmlndXJhdGlvbiBjYWxsYmFja3MuICovXG4tXHR2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdTE2IHZwX2NvbmZpZ192ZWN0b3Ioc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYsIHUxNiB2ZWN0b3IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmNcbmluZGV4IDZkOGFlMmE2YThjYWYuLmM5ZTIxMzE3YzUxYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG5AQCAtNTU5LDkgJiM0Mzs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdFx0bXNsZWVwKDEpO1xuIFxuIFx0dnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpO1xuLVxuLVx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cbi1cdHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiBzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlIHtcbiBcdHN0cnVjdCB2aXJ0aW9fZGV2aWNlIHZkZXY7XG4gXHRzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGE7XG4mIzQzO1x0cndsb2NrX3QgY2FsbGJhY2tfbG9jaztcbiBcdHU2NCBmZWF0dXJlcztcbiB9O1xuIFxuQEAgLTEyMyw4ICYjNDM7MTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlO1xuJiM0MztcdHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGlycXJldHVybl90IHJldDtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuJiM0MztcdHZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2cS1cdTAwM2V2ZGV2KTtcbiYjNDM7XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jaywgZmxhZ3MpO1xuJiM0MztcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4mIzQzO1x0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodmRldik7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrKTtcbiYjNDM7XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKlxuQEAgLTQzOSw2ICYjNDM7NDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0XHRcdD0gdmlydGlvX3ZkcGFfcmVzZXQsXG4gXHQuZmluZF92cXNcdD0gdmlydGlvX3ZkcGFfZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSB2aXJ0aW9fdmRwYV9kZWxfdnFzLFxuJiM0MztcdC5zeW5jaHJvbml6ZV9jYnMgPSB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMsXG4gXHQuZ2V0X2ZlYXR1cmVzXHQ9IHZpcnRpb192ZHBhX2dldF9mZWF0dXJlcyxcbiBcdC5maW5hbGl6ZV9mZWF0dXJlcyA9IHZpcnRpb192ZHBhX2ZpbmFsaXplX2ZlYXR1cmVzLFxuIFx0LmJ1c19uYW1lXHQ9IHZpcnRpb192ZHBhX2J1c19uYW1lLFxuQEAgLTQ3Miw2ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCB2aXJ0aW9fdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpXG4gXHR2ZF9kZXYtXHUwMDNldmRldi5jb25maWcgPSBcdTAwMjZ2aXJ0aW9fdmRwYV9jb25maWdfb3BzO1xuIFx0dmRfZGV2LVx1MDAzZXZkZXYubWFwID0gdmRwYS1cdTAwM2VtYXA7XG4gXHR2ZF9kZXYtXHUwMDNldmRwYSA9IHZkcGE7XG4mIzQzO1x0cndsb2NrX2luaXQoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIFxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID0gb3BzLVx1MDAzZWdldF9kZXZpY2VfaWQodmRwYSk7XG4gXHRpZiAodmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID09IDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZpcnRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG5AQCAtMjMwLDYgJiM0MzsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHtcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xuICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZVxuICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHNcbiYjNDM7ICogQHZxX3NyY3U6IFNSQ1UgZG9tYWluIGZvciB2aXJ0cXVldWUgY2FsbGJhY2tzXG4gICogQGluZGV4OiBpbmRleCBvZiB0aGlzIHJwcm9jIGRldmljZVxuICAqIEBhdHRhY2hfd29yazogd29ya3F1ZXVlIGZvciBhdHRhY2hpbmcgcnByb2NcbiAgKiBAY3Jhc2hfaGFuZGxlcjogd29ya3F1ZXVlIGZvciBoYW5kbGluZyBhIGNyYXNoXG5AQCAtMjc2LDYgJiM0MzsyNzgsNyBAQCBzdHJ1Y3QgcnByb2Mge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBydmRldnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7XG4gXHRzdHJ1Y3QgaWRyIG5vdGlmeWlkcztcbiYjNDM7XHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcbiBcdGludCBpbmRleDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbkBAIC03MSw5ICYjNDM7NzEsOSBAQCBzdHJ1Y3QgdmlydHF1ZXVlX2luZm8ge1xuICAqXHRSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvciBzdGF0dXNcbiAgKiBAZGVsX3ZxczogZnJlZSB2aXJ0cXVldWVzIGZvdW5kIGJ5IGZpbmRfdnFzKCkuXG4gICogQHN5bmNocm9uaXplX2Niczogc3luY2hyb25pemUgd2l0aCB0aGUgdmlydHF1ZXVlIGNhbGxiYWNrcyAob3B0aW9uYWwpXG4tICogICAgICBUaGUgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGVcbi0gKiAgICAgIHF1ZXVlIGJlZm9yZSBpdCBhcmUgdmlzaWJsZSB0byB0aGUgdnJpbmdfaW50ZXJydXB0KCkgdGhhdCBpc1xuLSAqICAgICAgY2FsbGVkIGFmdGVyIGl0LlxuJiM0MzsgKiAgICAgIFdhaXQgZm9yIHJ1bm5pbmcgY2FsbGJhY2tzIHRvIGNvbXBsZXRlLiBNZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGVcbiYjNDM7ICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsc1xuJiM0MzsgKiAgICAgIHRoYXQgZm9sbG93IGl0LlxuICAqICAgICAgdmRldjogdGhlIHZpcnRpb19kZXZpY2VcbiAgKiBAZ2V0X2ZlYXR1cmVzOiBnZXQgdGhlIGFycmF5IG9mIGZlYXR1cmUgYml0cyBmb3IgdGhpcyBkZXZpY2UuXG4gICpcdHZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVElPJiMzNDssCiAgICAmIzM0O1ZJUlRJT19QQ0kmIzM0OywKICAgICYjMzQ7VklSVElPX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWSVJUSU9fSU5QVVQmIzM0OywKICAgICYjMzQ7UkVNT1RFUFJPQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb19yZXNldF9kZXZpY2UmIzM0OywKICAgICYjMzQ7dmlydGlvX2RldmljZV9zaHV0ZG93biYjMzQ7LAogICAgJiMzNDt2aXJ0aW5wdXRfcmVjdl9ldmVudHMmIzM0OywKICAgICYjMzQ7dmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICAgJiMzNDtycHJvY192cV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICAgJiMzNDtycHJvY19hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMKaW5kZXggNzQyNWE4NTQ4MTQxYS4uYmFjYTZiMDllOWFjMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogICoKICAqIEJhc2VkIG9uIFZpcnRpbyBNTUlPIGRyaXZlciBieSBQYXdlbCBNb2xsLCBjb3B5cmlnaHQgMjAxMS0yMDE0LCBBUk0gTHRkLgogICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CkBAIC04NjksNiAmIzQzOzg3MCwxNCBAQCBzdGF0aWMgdm9pZCB2dV9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAl2dV9kZXYtJmd0O3N0YXR1cyA9IDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB2dV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmlydGlvX3VtbF9kZXZpY2UgKnZ1X2RldiA9IHRvX3ZpcnRpb191bWxfZGV2aWNlKHZkZXYpOwomIzQzOwomIzQzOwlpZiAodnVfZGV2LSZndDtpcnEgJmd0Oz0gMCkKJiM0MzsJCXN5bmNocm9uaXplX2lycSh2dV9kZXYtJmd0O2lycSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS0mZ3Q7cHJpdjsKQEAgLTExMjEsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb191bWxfY29uZmlnX29wcyA9IHsKIAkucmVzZXQgPSB2dV9yZXNldCwKIAkuZmluZF92cXMgPSB2dV9maW5kX3ZxcywKIAkuZGVsX3ZxcyA9IHZ1X2RlbF92cXMsCiYjNDM7CS5zeW5jaHJvbml6ZV9jYnMgPSB2dV9zeW5jaHJvbml6ZV9jYnMsCiAJLmdldF9mZWF0dXJlcyA9IHZ1X2dldF9mZWF0dXJlcywKIAkuZmluYWxpemVfZmVhdHVyZXMgPSB2dV9maW5hbGl6ZV9mZWF0dXJlcywKIAkuYnVzX25hbWUgPSB2dV9idXNfbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jCmluZGV4IDNjNjQwODU4MTM3M2IuLmMyNjBlM2ExNTQ0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uYwpAQCAtMTEzNSw2ICYjNDM7MTEzNSwxOSBAQCBzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXRtX3ZkZXYtJmd0O3N0YXR1cyA9IDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbHhiZl90bWZpZm9fdmRldiAqdG1fdmRldiA9IG1seGJmX3ZkZXZfdG9fdG1maWZvKHZkZXYpOwomIzQzOwlzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvID0gdG1fdmRldi0mZ3Q7dnJpbmdzWzBdLmZpZm87CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmaWZvLSZndDtzcGluX2xvY2spOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtmaWZvLSZndDtzcGluX2xvY2tbaV0sIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmaWZvLSZndDtzcGluX2xvY2tbaV0sIGZsYWdzKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIFJlYWQgdGhlIHZhbHVlIG9mIGEgY29uZmlndXJhdGlvbiBmaWVsZC4gKi8KIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LApAQCAtMTE3OSw2ICYjNDM7MTE5Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgbWx4YmZfdG1maWZvX3ZpcnRpb19jb25maWdfb3BzID0gewogCS5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsCiAJLmRlbF92cXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2RlbF92cXMsCiAJLnJlc2V0ID0gbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldCwKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzLAogCS5zZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzLAogCS5nZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfc3RhdHVzLAogCS5nZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX2dldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYwppbmRleCAxZWQ0MDY3MTQ4NDkxLi4xYjEzOWQyNWFiMmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCkBAIC0yNDEwLDYgJiM0MzsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCWRldl9pbmZvKCZhbXA7cnByb2MtJmd0O2RldiwgJiMzNDtyZWxlYXNpbmcgJXNcbiYjMzQ7LCBycHJvYy0mZ3Q7bmFtZSk7CiAKJiM0MzsJY2xlYW51cF9zcmN1X3N0cnVjdCgmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KTsKIAlpZHJfZGVzdHJveSgmYW1wO3Jwcm9jLSZndDtub3RpZnlpZHMpOwogCiAJaWYgKHJwcm9jLSZndDtpbmRleCAmZ3Q7PSAwKQpAQCAtMjUwNyw2ICYjNDM7MjUwOCwxMSBAQCBzdHJ1Y3QgcnByb2MgKnJwcm9jX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAlpZiAoIXJwcm9jKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlpZiAoaW5pdF9zcmN1X3N0cnVjdCgmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KSkgewomIzQzOwkJa2ZyZWUocnByb2MpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlycHJvYy0mZ3Q7cHJpdiA9ICZhbXA7cnByb2NbMV07CiAJcnByb2MtJmd0O2F1dG9fYm9vdCA9IHRydWU7CiAJcnByb2MtJmd0O2VsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTsKQEAgLTI1NzEsNiAmIzQzOzI1NzcsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2FsbG9jKTsKICAqCiAgKiBJZiBubyBvbmUgaG9sZHMgYW55IHJlZmVyZW5jZSB0byBycHJvYyBhbnltb3JlLCB0aGVuIGl0cyByZWZjb3VudCB3b3VsZAogICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLgogICovCiB2b2lkIHJwcm9jX2ZyZWUoc3RydWN0IHJwcm9jICpycHJvYykKIHsKQEAgLTI1ODYsNiAmIzQzOzI1OTQsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2ZyZWUpOwogICoKICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkCiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuCiAgKi8KIHZvaWQgcnByb2NfcHV0KHN0cnVjdCBycHJvYyAqcnByb2MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCmluZGV4IGQ1ZTlmZjA0NWEyOGEuLmVjYzAyMmUzNTRkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vyci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NyY3UuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZW1vdGVwcm9jX2ludGVybmFsLmgmIzM0OwogCkBAIC04OSwxNCAmIzQzOzkwLDE5IEBAIHN0YXRpYyBib29sIHJwcm9jX3ZpcnRpb19ub3RpZnkoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKQogewogCXN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nOwomIzQzOwlpbnQgc3JjdV9pZHg7CiYjNDM7CWlycXJldHVybl90IHJldDsKJiM0MzsKJiM0MzsJc3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KTsKIAogCWRldl9kYmcoJmFtcDtycHJvYy0mZ3Q7ZGV2LCAmIzM0O3ZxIGluZGV4ICVkIGlzIGludGVycnVwdGVkXG4mIzM0Oywgbm90aWZ5aWQpOwogCiAJcnZyaW5nID0gaWRyX2ZpbmQoJmFtcDtycHJvYy0mZ3Q7bm90aWZ5aWRzLCBub3RpZnlpZCk7Ci0JaWYgKCFydnJpbmcgfHwgIXJ2cmluZy0mZ3Q7dnEpCi0JCXJldHVybiBJUlFfTk9ORTsKJiM0MzsJcmV0ID0gcnZyaW5nICZhbXA7JmFtcDsgcnZyaW5nLSZndDt2cSA/IHZyaW5nX2ludGVycnVwdCgwLCBydnJpbmctJmd0O3ZxKSA6IElSUV9OT05FOwomIzQzOwomIzQzOwlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UsIHNyY3VfaWR4KTsKIAotCXJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLSZndDt2cSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7CiAKQEAgLTI0Miw2ICYjNDM7MjQ4LDEzIEBAIHN0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAlkZXZfZGJnKCZhbXA7dmRldi0mZ3Q7ZGV2LCAmIzM0O3Jlc2V0ICFcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTsKJiM0MzsKJiM0MzsJc3luY2hyb25pemVfc3JjdSgmYW1wO3Jwcm9jLSZndDt2cV9zcmN1KTsKJiM0Mzt9CiYjNDM7CiAvKiBwcm92aWRlIHRoZSB2ZGV2IGZlYXR1cmVzIGFzIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZSAqLwogc3RhdGljIHU2NCBycHJvY192aXJ0aW9fZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewpAQCAtMzMwLDYgJiM0MzszNDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHJwcm9jX3ZpcnRpb19jb25maWdfb3BzID0gewogCS5maW5kX3Zxcwk9IHJwcm9jX3ZpcnRpb19maW5kX3ZxcywKIAkuZGVsX3Zxcwk9IHJwcm9jX3ZpcnRpb19kZWxfdnFzLAogCS5yZXNldAkJPSBycHJvY192aXJ0aW9fcmVzZXQsCiYjNDM7CS5zeW5jaHJvbml6ZV9jYnMgPSBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzLAogCS5zZXRfc3RhdHVzCT0gcnByb2NfdmlydGlvX3NldF9zdGF0dXMsCiAJLmdldF9zdGF0dXMJPSBycHJvY192aXJ0aW9fZ2V0X3N0YXR1cywKIAkuZ2V0CQk9IHJwcm9jX3ZpcnRpb19nZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCmluZGV4IGJhYjZjYWQzZmQ1Y2UuLjU1MmQ3Nzk5ODAxMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jCkBAIC0xMDYyLDcgJiM0MzsxMDYyLDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJc3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiA9IHRvX3ZjX2RldmljZSh2ZGV2KTsKIAlzdHJ1Y3QgYWlycV9pbmZvICppbmZvID0gdmNkZXYtJmd0O2FpcnFfaW5mbzsKIAotCWlmIChpbmZvKSB7CiYjNDM7CWlmICh2Y2Rldi0mZ3Q7aXNfdGhpbmludCAmYW1wOyZhbXA7IGluZm8pIHsKIAkJLyoKIAkJICogVGhpcyBkZXZpY2UgdXNlcyBhZGFwdGVyIGludGVycnVwdHM6IHN5bmNocm9uaXplIHdpdGgKIAkJICogdnJpbmdfaW50ZXJydXB0KCkgY2FsbGVkIGJ5IHZpcnRpb19haXJxX2hhbmRsZXIoKQpAQCAtMTIwNCwxMyAmIzQzOzEyMDQsMTEgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19pbnRfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJCXZjZGV2LSZndDtlcnIgPSAtRUlPOwogCX0KIAl2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7Ci0jaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OCiAJLyoKIAkgKiBQYWlyZWQgd2l0aCB2aXJ0aW9fY2N3X3N5bmNocm9uaXplX2NicygpIGFuZCBpbnRlcnJ1cHRzIGFyZQogCSAqIGRpc2FibGVkIGhlcmUuCiAJICovCiAJcmVhZF9sb2NrKCZhbXA7dmNkZXYtJmd0O2lycV9sb2NrKTsKLSNlbmRpZgogCWZvcl9lYWNoX3NldF9iaXQoaSwgaW5kaWNhdG9ycyh2Y2RldiksCiAJCQkgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7CiAJCS8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqLwpAQCAtMTIxOSw5ICYjNDM7MTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCiAJCXZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpOwogCQl2cmluZ19pbnRlcnJ1cHQoMCwgdnEpOwogCX0KLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT04KIAlyZWFkX3VubG9jaygmYW1wO3ZjZGV2LSZndDtpcnFfbG9jayk7Ci0jZW5kaWYKIAlpZiAodGVzdF9iaXQoMCwgaW5kaWNhdG9yczIodmNkZXYpKSkgewogCQl2aXJ0aW9fY29uZmlnX2NoYW5nZWQoJmFtcDt2Y2Rldi0mZ3Q7dmRldik7CiAJCWNsZWFyX2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwppbmRleCA3NWJiNGZmZTNiODc3Li5hZDFjNTBiOGE5NGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwpAQCAtMjY0LDYgJiM0MzsyNjQsNyBAQCB2b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldikKICNlbmRpZgogCiAJZGV2LSZndDtjb25maWctJmd0O3Jlc2V0KGRldik7CiYjNDM7CXZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19yZXNldF9kZXZpY2UpOwogCkBAIC00MjQsNiAmIzQzOzQyNSw3IEBAIHZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KQogCSAqIFNvbWUgZGV2aWNlcyBnZXQgd2VkZ2VkIGlmIHRoaXMgaGFwcGVucywgc28gcmVzZXQgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90LgogCSAqLwogCWRldi0mZ3Q7Y29uZmlnLSZndDtyZXNldChkZXYpOwomIzQzOwl2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3NodXRkb3duKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYwppbmRleCBkZWVjMjRlOGU2ODI4Li43YjY1NGFmMGE0MmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYwpAQCAtNDksOSAmIzQzOzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIAkJCQkgICAgbGUxNl90b19jcHUoZXZlbnQtJmd0O2NvZGUpLAogCQkJCSAgICBsZTMyX3RvX2NwdShldmVudC0mZ3Q7dmFsdWUpKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlpZiAoIXZpLSZndDtyZWFkeSkKJiM0MzsJCQkJY29udGludWU7CiAJCQl2aXJ0aW5wdXRfcXVldWVfZXZ0YnVmKHZpLCBldmVudCk7CiAJCX0KLQkJdmlydHF1ZXVlX2tpY2sodnEpOwomIzQzOwkJaWYgKHZpLSZndDtyZWFkeSkKJiM0MzsJCQl2aXJ0cXVldWVfa2ljayh2cSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2aS0mZ3Q7bG9jaywgZmxhZ3MpOwogfQpAQCAtMzUwLDggJiM0MzszNTMsOSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXZpLSZndDtyZWFkeSA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2aS0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktJmd0O2lkZXYpOwomIzQzOwkvKiBDYWxsYmFja3MgdXNlIHZpLSZndDtpZGV2LiAqLwogCXZpcnRpb19yZXNldF9kZXZpY2UodmRldik7CiYjNDM7CWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLSZndDtpZGV2KTsKIAl3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2aS0mZ3Q7c3RzKSkgIT0gTlVMTCkKIAkJa2ZyZWUoYnVmKTsKIAl2ZGV2LSZndDtjb25maWctJmd0O2RlbF92cXModmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwppbmRleCBkOWNiYjAyYjM1YTExLi44MTE1YWEzOWUwMWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKQEAgLTk4LDggJiM0Mzs5OCw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCS8qIEZsdXNoIG91dCB0aGUgc3RhdHVzIHdyaXRlLCBhbmQgZmx1c2ggaW4gZGV2aWNlIHdyaXRlcywKIAkgKiBpbmNsdWRpbmcgTVNpLVggaW50ZXJydXB0cywgaWYgYW55LiAqLwogCXZwX2xlZ2FjeV9nZXRfc3RhdHVzKCZhbXA7dnBfZGV2LSZndDtsZGV2KTsKLQkvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqLwotCXZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7CiB9CiAKIHN0YXRpYyB1MTYgdnBfY29uZmlnX3ZlY3RvcihzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiwgdTE2IHZlY3RvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jCmluZGV4IDZkOGFlMmE2YThjYWYuLmM5ZTIxMzE3YzUxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYwpAQCAtNTU5LDkgJiM0Mzs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAkJbXNsZWVwKDEpOwogCiAJdnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpOwotCi0JLyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi8KLQl2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpOwogfQogCiBzdGF0aWMgaW50IHZwX2FjdGl2ZV92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdTE2IG1zaXhfdmVjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmMKaW5kZXggZGUyYWY2OTZkZTZjYS4uNGY5ZTcwYzEzMzJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQAogc3RydWN0IHZpcnRpb192ZHBhX2RldmljZSB7CiAJc3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjsKIAlzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGE7CiYjNDM7CXJ3bG9ja190IGNhbGxiYWNrX2xvY2s7CiAJdTY0IGZlYXR1cmVzOwogfTsKIApAQCAtMTIzLDggJiM0MzsxMjQsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKQogc3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKQogewogCXN0cnVjdCB2aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTsKJiM0MzsJc3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpcnFyZXR1cm5fdCByZXQ7CiAKLQlyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHZxKTsKJiM0MzsJdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLSZndDt2ZGV2KTsKJiM0MzsJcmVhZF9sb2NrX2lycXNhdmUoJmFtcDt2ZF9kZXYtJmd0O2NhbGxiYWNrX2xvY2ssIGZsYWdzKTsKJiM0MzsJcmV0ID0gdnJpbmdfaW50ZXJydXB0KDAsIHZxKTsKJiM0MzsJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZkX2Rldi0mZ3Q7Y2FsbGJhY2tfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodmRldik7CiYjNDM7CiYjNDM7CXdyaXRlX2xvY2tfaXJxKCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrKTsKJiM0MzsJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3ZkX2Rldi0mZ3Q7Y2FsbGJhY2tfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICoKQEAgLTQzOSw2ICYjNDM7NDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0gewogCS5yZXNldAkJPSB2aXJ0aW9fdmRwYV9yZXNldCwKIAkuZmluZF92cXMJPSB2aXJ0aW9fdmRwYV9maW5kX3ZxcywKIAkuZGVsX3Zxcwk9IHZpcnRpb192ZHBhX2RlbF92cXMsCiYjNDM7CS5zeW5jaHJvbml6ZV9jYnMgPSB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMsCiAJLmdldF9mZWF0dXJlcwk9IHZpcnRpb192ZHBhX2dldF9mZWF0dXJlcywKIAkuZmluYWxpemVfZmVhdHVyZXMgPSB2aXJ0aW9fdmRwYV9maW5hbGl6ZV9mZWF0dXJlcywKIAkuYnVzX25hbWUJPSB2aXJ0aW9fdmRwYV9idXNfbmFtZSwKQEAgLTQ3Miw2ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCB2aXJ0aW9fdmRwYV9wcm9iZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCiAJdmRfZGV2LSZndDt2ZGV2LmNvbmZpZyA9ICZhbXA7dmlydGlvX3ZkcGFfY29uZmlnX29wczsKIAl2ZF9kZXYtJmd0O3ZkZXYubWFwID0gdmRwYS0mZ3Q7bWFwOwogCXZkX2Rldi0mZ3Q7dmRwYSA9IHZkcGE7CiYjNDM7CXJ3bG9ja19pbml0KCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrKTsKIAogCXZkX2Rldi0mZ3Q7dmRldi5pZC5kZXZpY2UgPSBvcHMtJmd0O2dldF9kZXZpY2VfaWQodmRwYSk7CiAJaWYgKHZkX2Rldi0mZ3Q7dmRldi5pZC5kZXZpY2UgPT0gMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oIGIvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmgKaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmgKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NyY3UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92aXJ0aW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwpAQCAtMjMwLDYgJiM0MzsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHsKICAqIEBydmRldnM6IGxpc3Qgb2YgcmVtb3RlIHZpcnRpbyBkZXZpY2VzCiAgKiBAc3ViZGV2czogbGlzdCBvZiBzdWJkZXZpY2VzLCB0byBmb2xsb3dpbmcgdGhlIHJ1bm5pbmcgc3RhdGUKICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHMKJiM0MzsgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3MKICAqIEBpbmRleDogaW5kZXggb2YgdGhpcyBycHJvYyBkZXZpY2UKICAqIEBhdHRhY2hfd29yazogd29ya3F1ZXVlIGZvciBhdHRhY2hpbmcgcnByb2MKICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2gKQEAgLTI3Niw2ICYjNDM7Mjc4LDcgQEAgc3RydWN0IHJwcm9jIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJ2ZGV2czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7CiAJc3RydWN0IGlkciBub3RpZnlpZHM7CiYjNDM7CXN0cnVjdCBzcmN1X3N0cnVjdCB2cV9zcmN1OwogCWludCBpbmRleDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXR0YWNoX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGNyYXNoX2hhbmRsZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC03MSw5ICYjNDM7NzEsOSBAQCBzdHJ1Y3QgdmlydHF1ZXVlX2luZm8gewogICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Igc3RhdHVzCiAgKiBAZGVsX3ZxczogZnJlZSB2aXJ0cXVldWVzIGZvdW5kIGJ5IGZpbmRfdnFzKCkuCiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbCkKLSAqICAgICAgVGhlIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlCi0gKiAgICAgIHF1ZXVlIGJlZm9yZSBpdCBhcmUgdmlzaWJsZSB0byB0aGUgdnJpbmdfaW50ZXJydXB0KCkgdGhhdCBpcwotICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuCiYjNDM7ICogICAgICBXYWl0IGZvciBydW5uaW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4gTWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlCiYjNDM7ICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxscwomIzQzOyAqICAgICAgdGhhdCBmb2xsb3cgaXQuCiAgKiAgICAgIHZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlCiAgKiBAZ2V0X2ZlYXR1cmVzOiBnZXQgdGhlIGFycmF5IG9mIGZlYXR1cmUgYml0cyBmb3IgdGhpcyBkZXZpY2UuCiAgKgl2ZGV2OiB0aGUgdmlydGlvX2RldmljZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzMxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogVmlydGlvIFN5bmNocm9uaXphdGlvbiBvbiBhbWQ2NCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBnaXZlbiB0aGUgc3RhdGVkIHRhcmdldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBhbmQgaWYgdGhlc2UgbW9kaWZpY2F0aW9ucyBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHBsYXRmb3JtIEkmIzM5O20gbW9zdCBmYW1pbGlhciB3aXRoLgoKSSBzZWUgYSB2YXJpZXR5IG9mIGRyaXZlcnMgYXJlIGFmZmVjdGVkLCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duOgoKKiAgIEZpcnN0LCBgYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY2AgYWRkcyBgdnVfc3luY2hyb25pemVfY2JzYCBjYWxsaW5nIGBzeW5jaHJvbml6ZV9pcnFgLiBUaGUgVXNlci1Nb2RlIExpbnV4IHBhcnQgaXMgbm90IHJlbGV2YW50IGFzIHRoZSB0YXJnZXQgaXMgYW1kNjQuCiogICBgZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY2AgYWRkcyBhIHNwaW5sb2NrIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gTWVsbGFub3ggQmx1ZUZpZWxkIFNvQyBzcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIsIHNvIHRoaXMgd29uJiMzOTt0IGltcGFjdCBhbWQ2NCBlaXRoZXIuCiogICBUaGUgYHJlbW90ZXByb2NgIGNoYW5nZXMgaW50cm9kdWNlIGFuIGBzcmN1YCBtZWNoYW5pc20gd2l0aCBgdnFfc3JjdWAgaW4gYHJlbW90ZXByb2NfY29yZS5jYCBhbmQgYHJlbW90ZXByb2NfdmlydGlvLmNgLCBhbG9uZyB3aXRoIGEgbmV3IGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYC4gVGhpcyBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgSSBuZWVkIHRvIGNoZWNrIGhvdyB3aWRlc3ByZWFkIGByZW1vdGVwcm9jYCBpcyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGFtZDY0LiBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIGl0cyBpbnRlZ3JhdGlvbi4KKiAgIGBkcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuY2AgaXMgczM5MC1zcGVjaWZpYywgc28gaXQmIzM5O3Mgbm90IHJlbGV2YW50IHRvIG15IGV2YWx1YXRpb24uCiogICBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VyaWVzLCBpdCBzZWVtcywgaXMgaW4gYGRyaXZlcnMvdmlydGlvL3ZpcnRpby5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgdmlydGlvX3N5bmNocm9uaXplX2Nic2AgY2FsbGVkIGJ5IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBhbmQgYHZpcnRpb19kZXZpY2Vfc2h1dGRvd25gIGlzIHNpZ25pZmljYW50LiBUaGUgZmFjdCB0aGF0IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBpcyB0aGUgY29yZSB2aXJ0aW8gYnVzIHJlc2V0IGZ1bmN0aW9uIG1lYW5zIHRoaXMgaXMgYSBjZW50cmFsIHBpZWNlLiBUaGlzIHdpbGwgaW1wYWN0IGFsbCB2aXJ0aW8gZHJpdmVycyBvbiByZXNldCAobmV0LCBibGssIGNvbnNvbGUsIGlucHV0LCBldGMuKS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBoZXJlLgoqICAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jYCBtb2RpZmllcyB0aGUgaW5wdXQgaGFuZGxpbmcgYW5kIGFkZHMgc3luY2hyb25pemF0aW9uIGFyb3VuZCBgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2VgIGFuZCByZWFkeW5lc3MgY2hlY2tzLiBUaGlzIGlzIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcmVzZXQgYW5kIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIGNoYW5nZXMgaW4gYHZpcnRpby5jYC4KKiAgIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jYCBhbmQgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmNgIHJlbW92ZSByZWR1bmRhbnQgY2FsbHMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBzaW1wbGlmeWluZyB0aGUgY29kZS4gVGhpcyBpcyBsaWtlbHkgYW4gYXJ0aWZhY3Qgb2YgdGhlIG5ldyBgdmlydGlvX3Jlc2V0X2RldmljZWAgY2FsbC4KKiAgIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jYCBpbnRyb2R1Y2VzIGEgcmVhZC13cml0ZSBsb2NrLCBgY2FsbGJhY2tfbG9ja2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBUaGlzIGlzIGFub3RoZXIgYXJlYSBvZiBjb25jZXJuLCBhcyBpbnRyb2R1Y2luZyBsb2NrcyBjYW4gYmUgdHJpY2t5LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGNvbnRlbnRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggSVJRIGNvbnRleHQuCiogICBGaW5hbGx5LCB0aGVyZSBpcyBhIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBpcyBhY3R1YWxseSByZWFjaGFibGUgb24gYW1kNjQ6IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGEgY29yZSBmdW5jdGlvbi4gYHZpcnRpb192ZHBhLmNgIGFuZCBgdmlydGlvX2lucHV0LmNgIGFyZSBhbHNvIGRyaXZlcnMgSSBuZWVkIHRvIHJldmlldyBpbiBkZXRhaWwgYmVjYXVzZSBvZiB0aGVpciBpbmNsdXNpb24gb2YgbG9ja3Mvc3luY2hyb25pemF0aW9uLiBUaGUgYHJlbW90ZXByb2NgIHN1YnN5c3RlbSBpcyBhbm90aGVyIGFyZWEgdGhhdCBtaWdodCBiZSByZWxldmFudCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZSBgdmlydGlvX3BjaWAgZHJpdmVycyBhcmUgYWxzbyBjcml0aWNhbCBjb21wb25lbnRzIGFzIHRoZXkgYXJlIGludm9sdmVkIGluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAgb24gdGhpcywgSSYjMzk7bGwgdXNlIGBnaXQgZ3JlcGAgYW5kIHJlYWQgdGhlIGNvZGUgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9ucyBhbmQgaG93IGNhbGxlcnMgaW50ZXJhY3QgaW4gdGhlIGFtZDY0IGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgY29ycmVjdGx5IHBsYWNlZCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgZGVhZGxvY2tzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBJUlEgY29udGV4dCBzeW5jaHJvbml6YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTI1Mz12b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNTYtXHQvKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6MjU3Olx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNTgtXHQgKiBpbnRlcnJ1cHQgZm9yIHRoaXMgbGluZSBhcnJpdmluZyBhZnRlclxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTI2Mi1cdHZpcnRpb19icmVha19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjI2MzpcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTI2NC0jZW5kaWZcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNjYtXHRkZXYtXHUwMDNlY29uZmlnLVx1MDAzZXJlc2V0KGRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzoyNjc6XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNjgtfVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQxMj12b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00MjEtXHQgKi9cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQyMjpcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQyMy1cdC8qXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI3LVx0ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VyZXNldChkZXYpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM6NDI4Olx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGluIExpbnV4IEtlcm5lbCBTb3VyY2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFZpcnRJTyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcyBhcmUgc3luY2hyb25pemVkLiBXaGVyZSB3b3VsZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBiZSwgYW5kIGhvdyB3b3VsZCBJIGJlc3QgZ2FpbiBpbnNpZ2h0PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGRlZmluZXMgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBmdW5jdGlvbnMuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAgZmlyc3QuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFZpcnRJTyBmcmFtZXdvcmsuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0cyB1c2FnZSBvciBkZWx2ZSBkZWVwZXIgaW50byB0aGUgcmVsZXZhbnQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYmFzZWQgb24gd2hhdCBJIGZpbmQgaW4gdGhhdCBoZWFkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX3N5bmNocm9uaXplX2NicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMwMj1zdHJ1Y3QgdmlydHF1ZXVlICp2aXJ0aW9fZmluZF9zaW5nbGVfdnEoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgtMzE2LS8qKlxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzE3OiAqIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMgLSBzeW5jaHJvbml6ZSB3aXRoIHZpcnRxdWV1ZSBjYWxsYmFja3NcbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oLTMxOC0gKiBAZGV2OiB0aGUgdmlydGlvIGRldmljZVxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMyMD1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaDozMjE6dm9pZCB2aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zMjIte1xuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTM0ND12b2lkIHZpcnRpb19kZXZpY2VfcmVhZHkoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTEtXHQvKlxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzUyOlx0ICogVGhlIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBtYWtlcyBzdXJlIHZyaW5nX2ludGVycnVwdCgpXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTMtXHQgKiB3aWxsIHNlZSB0aGUgZHJpdmVyIHNwZWNpZmljIHNldHVwIGlmIGl0IHNlZXMgdnEtXHUwMDNlYnJva2VuXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgtMzU1LVx0ICovXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaDozNTY6XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTctXHRfX3ZpcnRpb191bmJyZWFrX2RldmljZShkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gVmlydGlvIERldmljZSBSZXNldCBhbmQgU2h1dGRvd24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBWaXJ0aW8gZGV2aWNlcyBhcmUgcmVzZXQgYW5kIHNodXQgZG93biB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBmb3IgYSBzcGVjaWZpYyBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZy4gTXkgbWluZCBpbW1lZGlhdGVseSBoZWFkcyBmb3IgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgbGlrZWx5IGN1bHByaXRzIGFyZSBpbiBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZSBkb2luZyB3aXRoIHRoZSBkZXZpY2UmIzM5O3Mgc3RhdGUgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9ucyB0byBmdWxseSBjb21wcmVoZW5kIHRoZSBpc3N1ZS4gSSBrbm93IHRoZXJlIGFyZSBsaWtlbHkgaW50cmljYWNpZXMgd2l0aCB0aGUgTU1JTyByZWdpc3RlcnMsIGV2ZW50IGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFZpcnRxdWV1ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vdmlydGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdCAqIGNhbGwvd29ya3F1ZXVlL2JoLiAgSW52b2tpbmcgdmlydGlvX2JyZWFrX2RldmljZSB0aGVuIGZsdXNoaW5nIGFueSBzdWNoXG4gMjUxOlx0ICogY29udGV4dHMgaXMgb25lIHdheSB0byBoYW5kbGUgdGhhdC5cbiAyNTI6XHQgKiAqL1xuIDI1MzpcdHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuIDI1NDpcdHtcbiAyNTU6XHQjaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXG4gMjU2Olx0XHQvKlxuIDI1NzpcdFx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XG4gMjU4Olx0XHQgKiBpbnRlcnJ1cHQgZm9yIHRoaXMgbGluZSBhcnJpdmluZyBhZnRlclxuIDI1OTpcdFx0ICogdmlydGlvX3N5bmNocm9uaXplX3ZxcygpIGhhcyBjb21wbGV0ZWQgaXMgZ3VhcmFudGVlZCB0byBzZWVcbiAyNjA6XHRcdCAqIHZxLVx1MDAzZWJyb2tlbiBhcyB0cnVlLlxuIDI2MTpcdFx0ICovXG4gMjYyOlx0XHR2aXJ0aW9fYnJlYWtfZGV2aWNlKGRldik7XG4gMjYzOlx0XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG4gMjY0Olx0I2VuZGlmXG4gMjY1Olx0XG4gMjY2Olx0XHRkZXYtXHUwMDNlY29uZmlnLVx1MDAzZXJlc2V0KGRldik7XG4gMjY3Olx0XHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XG4gMjY4Olx0fVxuIDI2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19yZXNldF9kZXZpY2UpO1xuIDI3MDpcdFxuIDI3MTpcdHN0YXRpYyBpbnQgdmlydGlvX2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZClcbiAyNzI6XHR7XG4gMjczOlx0XHRpbnQgZXJyLCBpO1xuIDI3NDpcdFx0c3RydWN0IHZpcnRpb19kZXZpY2UgKmRldiA9IGRldl90b192aXJ0aW8oX2QpO1xuIDI3NTpcdFx0c3RydWN0IHZpcnRpb19kcml2ZXIgKmRydiA9IGRydl90b192aXJ0aW8oZGV2LVx1MDAzZWRldi5kcml2ZXIpO1xuIDI3NjpcdFx0dTY0IGRldmljZV9mZWF0dXJlc1tWSVJUSU9fRkVBVFVSRVNfVTY0U107XG4gMjc3Olx0XHR1NjQgZHJpdmVyX2ZlYXR1cmVzW1ZJUlRJT19GRUFUVVJFU19VNjRTXTtcbiAyNzg6XHRcdHU2NCBkcml2ZXJfZmVhdHVyZXNfbGVnYWN5O1xuIDI3OTpcdFxuIDI4MDpcdFx0LyogV2UgaGF2ZSBhIGRyaXZlciEgKi9cbiAyODE6XHRcdHZpcnRpb19hZGRfc3RhdHVzKGRldiwgVklSVElPX0NPTkZJR19TX0RSSVZFUik7XG4gMjgyOlx0XG4gMjgzOlx0XHQvKiBGaWd1cmUgb3V0IHdoYXQgZmVhdHVyZXMgdGhlIGRldmljZSBzdXBwb3J0cy4gKi9cbiAyODQ6XHRcdHZpcnRpb19nZXRfZmVhdHVyZXMoZGV2LCBkZXZpY2VfZmVhdHVyZXMpO1xuIDI4NTpcdFxuIDI4NjpcdFx0LyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHRoZSBkcml2ZXIgc3VwcG9ydHMuICovXG4gMjg3Olx0XHR2aXJ0aW9fZmVhdHVyZXNfemVybyhkcml2ZXJfZmVhdHVyZXMpO1xuIDI4ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHJ2LVx1MDAzZWZlYXR1cmVfdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiAyODk6XHRcdFx0dW5zaWduZWQgaW50IGYgPSBkcnYtXHUwMDNlZmVhdHVyZV90YWJsZVtpXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZpcnRpbyBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpc+KApiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIHdvdWxkIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlPyYjMzQ7IEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIFZpcnRpbyBkcml2ZXJzLiAmIzM0O0xldCYjMzk7cyBzZWUsIHdoZXJlIGFyZSB0aGUga2V5IGltcGxlbWVudGF0aW9ucz8mIzM0OyBJIGltbWVkaWF0ZWx5IHRoaW5rLCB0aGUgYGRyaXZlcnMvdmlydGlvYCBkaXJlY3RvcnkgaXMgYSBnb2xkIG1pbmUgZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLiBUaGVuLCB0byB6ZXJvIGluIG9uIHNwZWNpZmljcywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIHJlbGV2YW50IGRldmljZSB0eXBlczogdGhlIGB2aXJ0aW9fdmRwYS5jYCBkcml2ZXIsIGJlY2F1c2UgaXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIHNwZWNpZmljIHZpcnR1YWwgZGF0YSBwYXRoIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgYW5kIHRoZW4gdGhlIGB2aXJ0aW9faW5wdXQuY2AgZHJpdmVyLCB3aGljaCwgZ2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGlzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBzb21laG93LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgVmlydGlvIGRldmljZXMgYXJlIGZ1bmN0aW9uaW5nIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsLiBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBpbiB0aGVzZSB0d28gZmlyc3QsIGFuZCBzZWUgd2hhdCBJIGNhbiBsZWFybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XHR2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VkZWxfdnFzKHZkZXYpO1xuIDM0MTpcdGVycl9pbml0X3ZxOlxuIDM0MjpcdFx0a2ZyZWUodmkpO1xuIDM0MzpcdFx0cmV0dXJuIGVycjtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHZvaWQgdmlydGlucHV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiAzNDc6XHR7XG4gMzQ4Olx0XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZkZXYtXHUwMDNlcHJpdjtcbiAzNDk6XHRcdHZvaWQgKmJ1ZjtcbiAzNTA6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzUxOlx0XG4gMzUyOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzUzOlx0XHR2aS1cdTAwM2VyZWFkeSA9IGZhbHNlO1xuIDM1NDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzU1Olx0XG4gMzU2Olx0XHQvKiBDYWxsYmFja3MgdXNlIHZpLVx1MDAzZWlkZXYuICovXG4gMzU3Olx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuIDM1ODpcdFx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXHUwMDNlaWRldik7XG4gMzU5Olx0XHR3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2aS1cdTAwM2VzdHMpKSAhPSBOVUxMKVxuIDM2MDpcdFx0XHRrZnJlZShidWYpO1xuIDM2MTpcdFx0dmRldi1cdTAwM2Vjb25maWctXHUwMDNlZGVsX3Zxcyh2ZGV2KTtcbiAzNjI6XHRcdGtmcmVlKHZpKTtcbiAzNjM6XHR9XG4gMzY0Olx0XG4gMzY1Olx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuIDM2NjpcdHN0YXRpYyBpbnQgdmlydGlucHV0X2ZyZWV6ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiAzNjc6XHR7XG4gMzY4Olx0XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZkZXYtXHUwMDNlcHJpdjtcbiAzNjk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzcwOlx0XHR2b2lkICpidWY7XG4gMzcxOlx0XG4gMzcyOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzczOlx0XHR2aS1cdTAwM2VyZWFkeSA9IGZhbHNlO1xuIDM3NDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzc1Olx0XG4gMzc2Olx0XHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xuIDM3NzpcdFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXHUwMDNlc3RzKSkgIT0gTlVMTClcbiAzNzg6XHRcdFx0a2ZyZWUoYnVmKTtcbiAzNzk6XHRcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0LCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZS4KCioqRGl2aW5nIERlZXBlciBpbnRvIEV2ZW50IEhhbmRsaW5nKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBjaXJjbGUgYmFjayB0byBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIGJlaGF2aW5nLCBlc3BlY2lhbGx5IGluIHRoaXMgY29udGV4dC4gV2UgbmVlZCB0byBkaXNzZWN0IGl0cyByb2xlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmlydHVhbCBpbnB1dCBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgbWlnaHQgYmUgbWFuaWZlc3RpbmcuIElzIGl0IGhhbmRsaW5nIGV2ZW50cyBlZmZpY2llbnRseT8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoYXQgYXJlYT8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIHRoaXMgZnVuY3Rpb24gdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIG9yIGEgZG93bnN0cmVhbSBlZmZlY3Q/IExldCYjMzk7cyB0cmVhdCBpdCBhcyBhIHN1c3BlY3QgYW5kIGludGVycm9nYXRlIGl0IHdpdGggYSBkZXRhaWxlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYW55IHNpZ24gdGhhdCB0aGUgcHJvY2Vzc2luZyBpcyBub3QgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTtcbiAgMzE6XHRcbiAgMzI6XHRcdHNnX2luaXRfb25lKHNnLCBldnRidWYsIHNpemVvZigqZXZ0YnVmKSk7XG4gIDMzOlx0XHR2aXJ0cXVldWVfYWRkX2luYnVmX2NhY2hlX2NsZWFuKHZpLVx1MDAzZWV2dCwgc2csIDEsIGV2dGJ1ZiwgR0ZQX0FUT01JQyk7XG4gIDM0Olx0fVxuICAzNTpcdFxuICAzNjpcdHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiAgMzc6XHR7XG4gIDM4Olx0XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVx1MDAzZXZkZXYtXHUwMDNlcHJpdjtcbiAgMzk6XHRcdHN0cnVjdCB2aXJ0aW9faW5wdXRfZXZlbnQgKmV2ZW50O1xuICA0MDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiAgNDE6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gIDQyOlx0XG4gIDQzOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDQ0Olx0XHRpZiAodmktXHUwMDNlcmVhZHkpIHtcbiAgNDU6XHRcdFx0d2hpbGUgKChldmVudCA9IHZpcnRxdWV1ZV9nZXRfYnVmKHZpLVx1MDAzZWV2dCwgXHUwMDI2bGVuKSkgIT0gTlVMTCkge1xuICA0NjpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA0NzpcdFx0XHRcdGlucHV0X2V2ZW50KHZpLVx1MDAzZWlkZXYsXG4gIDQ4Olx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZXZlbnQtXHUwMDNldHlwZSksXG4gIDQ5Olx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZXZlbnQtXHUwMDNlY29kZSksXG4gIDUwOlx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZXZlbnQtXHUwMDNldmFsdWUpKTtcbiAgNTE6XHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDUyOlx0XHRcdFx0aWYgKCF2aS1cdTAwM2VyZWFkeSlcbiAgNTM6XHRcdFx0XHRcdGNvbnRpbnVlO1xuICA1NDpcdFx0XHRcdHZpcnRpbnB1dF9xdWV1ZV9ldnRidWYodmksIGV2ZW50KTtcbiAgNTU6XHRcdFx0fVxuICA1NjpcdFx0XHRpZiAodmktXHUwMDNlcmVhZHkpXG4gIDU3Olx0XHRcdFx0dmlydHF1ZXVlX2tpY2sodnEpO1xuICA1ODpcdFx0fVxuICA1OTpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qXG4gIDYzOlx0ICogT24gZXJyb3Igd2UgYXJlIGxvc2luZyB0aGUgc3RhdHVzIHVwZGF0ZSwgd2hpY2ggaXNuJiMzOTt0IGNyaXRpY2FsIGFzXG4gIDY0Olx0ICogdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3Igc3R1ZmYgbGlrZSBrZXlib2FyZCBsZWRzLlxuICA2NTpcdCAqL1xuICA2NjpcdHN0YXRpYyBpbnQgdmlydGlucHV0X3NlbmRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpLFxuICA2NzpcdFx0XHRcdFx0IHUxNiB0eXBlLCB1MTYgY29kZSwgczMyIHZhbHVlKVxuICA2ODpcdHtcbiAgNjk6XHRcdHN0cnVjdCB2aXJ0aW9faW5wdXRfZXZlbnQgKnN0c2J1ZjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCB0aGlua2luZyBhcyBJIHdvdWxkIGluIHRoZSBtaWRzdCBvZiB0aGlzIHdvcms6CgoqKkludmVzdGlnYXRpbmcgVmlydGlvIGFuZCBSZW1vdGUgUHJvY2Vzc29yIEludGVyYWN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmaWxlcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBGaXJzdCwgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNg4oCmIFJpZ2h0LCBWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRpb24uIFRoYXQmIzM5O3Mga2V5IGZvciBwZXJmb3JtYW5jZSwgc28gSSBzaG91bGQgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGF0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIFZEUEEtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBicm9hZGVyIHZpcnRpbyBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBwYXRocyBhcmUgb3B0aW1pemVkLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4KCk5leHQgdXAsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgUmVtb3RlIFByb2Nlc3NvciBzdHVmZi4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNgIGRvZXMuIE9rYXksIGl0JiMzOTtzIHRoZSBjb3JlIHJlbW90ZXByb2MgZnJhbWV3b3JrLiBUaGlzIG1lYW5zIGl0IGNvbnRhaW5zIHRoZSBlc3NlbnRpYWwgbWVjaGFuaWNzIGZvciBtYW5hZ2luZyByZW1vdGUgcHJvY2Vzc29ycywgdGhlaXIgcmVzb3VyY2VzLCBjb21tdW5pY2F0aW9uLCBhbmQgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBoYW5kbGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVzc2FnaW5nLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgYmFzaWMgc3RhdGUgbWFjaGluZXMgdGhhdCBkcml2ZSB0aGUgcmVtb3RlcHJvYyBvcGVyYXRpb24uCgpGaW5hbGx5LCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiByZW1vdGVwcm9jIGFuZCB2aXJ0aW8uIFNvLCBJIGV4cGVjdCB0byBzZWUgdGhlIHZpcnRpbyB0cmFuc3BvcnQgbWVjaGFuaXNtcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzb3IuIFRoaXMgZmlsZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZW1vdGUgcHJvY2Vzc29yJiMzOTtzIGhhcmR3YXJlIGlzIGFjY2Vzc2VkIGFuZCBjb250cm9sbGVkIHRocm91Z2ggdGhlIHZpcnRpbyBpbnRlcmZhY2UuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGNvbnRyb2wgbWVzc2FnZXMgYW5kIGRhdGEgYXJlIGV4Y2hhbmdlZCBiZXR3ZWVuIHRoZSBob3N0IGFuZCByZW1vdGUgcHJvY2Vzc29yIHRocm91Z2ggdmlydGlvIHF1ZXVlcy4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpXG4gMTE2Olx0e1xuIDExNzpcdFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gcHJpdmF0ZTtcbiAxMTg6XHRcbiAxMTk6XHRcdHZpcnRpb19jb25maWdfY2hhbmdlZChcdTAwMjZ2ZF9kZXYtXHUwMDNldmRldik7XG4gMTIwOlx0XG4gMTIxOlx0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gMTIyOlx0fVxuIDEyMzpcdFxuIDEyNDpcdHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcbiAxMjU6XHR7XG4gMTI2Olx0XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHByaXZhdGU7XG4gMTI3Olx0XHRzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXY7XG4gMTI4Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEyOTpcdFx0aXJxcmV0dXJuX3QgcmV0O1xuIDEzMDpcdFxuIDEzMTpcdFx0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVx1MDAzZXZkZXYpO1xuIDEzMjpcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcbiAxMzM6XHRcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4gMTM0Olx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XG4gMTM1Olx0XG4gMTM2Olx0XHRyZXR1cm4gcmV0O1xuIDEzNzpcdH1cbiAxMzg6XHRcbiAxMzk6XHRzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gMTQwOlx0e1xuIDE0MTpcdFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZkZXYpO1xuIDE0MjpcdFxuIDE0MzpcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIDE0NDpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jayk7XG4gMTQ1Olx0fVxuIDE0NjpcdFxuIDE0NzpcdHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpcbiAxNDg6XHR2aXJ0aW9fdmRwYV9zZXR1cF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGluZGV4LFxuIDE0OTpcdFx0XHQgICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpLFxuIDE1MDpcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgY3R4KVxuIDE1MTpcdHtcbiAxNTI6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHZkX2dldF92ZHBhKHZkZXYpO1xuIDE1MzpcdFx0Y29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyAqb3BzID0gdmRwYS1cdTAwM2Vjb25maWc7XG4gMTU0Olx0XHRib29sICgqbm90aWZ5KShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkgPSB2aXJ0aW9fdmRwYV9ub3RpZnk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byByZW1vdGVwcm9jX3ZpcnRpby5jKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgYGRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jYC4gVGhpcyBmaWxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB2aXJ0aW8gdHJhbnNwb3J0IHdvcmtzIHdpdGggcmVtb3RlIHByb2Nlc3NvcnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSByZW1vdGVwcm9jIGZyYW1ld29yayBhcyBhIHdob2xlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB2aXJ0aW8gZGV2aWNlIGludGVyYWN0aW9uOiB0aGUgbmVnb3RpYXRpb24sIHRoZSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMsIGFuZCBob3cgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHNldCB1cC4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIHN0dWZmIGluIHRoZXJlIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byBob3cgaXQgaXNvbGF0ZXMgdGhlIHJlbW90ZSBwcm9jZXNzb3ImIzM5O3Mgd29ybGQuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkIGluIHRoZSByZW1vdGVwcm9jIHN5c3RlbSwgdG9vLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0ICogbWVzc2FnZXMgYXZhaWxhYmxlLlxuICA4NjpcdCAqXG4gIDg3Olx0ICogUmV0dXJuOiBJUlFfTk9ORSBpZiBubyBtZXNzYWdlIHdhcyBmb3VuZCBpbiB0aGUgQG5vdGlmeWlkIHZpcnRxdWV1ZSxcbiAgODg6XHQgKiBhbmQgb3RoZXJ3aXNlIHJldHVybnMgSVJRX0hBTkRMRUQuXG4gIDg5Olx0ICovXG4gIDkwOlx0aXJxcmV0dXJuX3QgcnByb2NfdnFfaW50ZXJydXB0KHN0cnVjdCBycHJvYyAqcnByb2MsIGludCBub3RpZnlpZClcbiAgOTE6XHR7XG4gIDkyOlx0XHRzdHJ1Y3QgcnByb2NfdnJpbmcgKnJ2cmluZztcbiAgOTM6XHRcdGludCBzcmN1X2lkeDtcbiAgOTQ6XHRcdGlycXJldHVybl90IHJldDtcbiAgOTU6XHRcbiAgOTY6XHRcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2cnByb2MtXHUwMDNldnFfc3JjdSk7XG4gIDk3Olx0XG4gIDk4Olx0XHRkZXZfZGJnKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCYjMzQ7dnEgaW5kZXggJWQgaXMgaW50ZXJydXB0ZWRcXG5cJiMzNDssIG5vdGlmeWlkKTtcbiAgOTk6XHRcbiAxMDA6XHRcdHJ2cmluZyA9IGlkcl9maW5kKFx1MDAyNnJwcm9jLVx1MDAzZW5vdGlmeWlkcywgbm90aWZ5aWQpO1xuIDEwMTpcdFx0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuIDEwMjpcdFxuIDEwMzpcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XG4gMTA0Olx0XG4gMTA1Olx0XHRyZXR1cm4gcmV0O1xuIDEwNjpcdH1cbiAxMDc6XHRFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gMTA4Olx0XG4gMTA5Olx0c3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKnJwX2ZpbmRfdnEoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gMTEwOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGlkLFxuIDExMTpcdFx0XHRcdFx0ICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpLFxuIDExMjpcdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgY3R4KVxuIDExMzpcdHtcbiAxMTQ6XHRcdHN0cnVjdCBycHJvY192ZGV2ICpydmRldiA9IHZkZXZfdG9fcnZkZXYodmRldik7XG4gMTE1Olx0XHRzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTtcbiAxMTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnJwcm9jLVx1MDAzZWRldjtcbiAxMTc6XHRcdHN0cnVjdCBycHJvY19tZW1fZW50cnkgKm1lbTtcbiAxMTg6XHRcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xuIDExOTpcdFx0c3RydWN0IGZ3X3JzY192ZGV2ICpyc2M7XG4gMTIwOlx0XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cTtcbiAxMjE6XHRcdHZvaWQgKmFkZHI7XG4gMTIyOlx0XHRpbnQgbnVtLCBzaXplO1xuIDEyMzpcdFxuIDEyNDpcdFx0Lyogd2UmIzM5O3JlIHRlbXBvcmFyaWx5IGxpbWl0ZWQgdG8gdHdvIHZpcnRxdWV1ZXMgcGVyIHJ2ZGV2ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIEluc3BlY3Rpb24gVGltZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgaXQuIEJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoaXMgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIGF0IHRoaXMgcG9pbnQg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IEtjb25maWdzIGFyZSBwcm9wZXJseSBzZXQgZm9yIHRoZXNlIGZpbGVzIHRvIGJlIGluY2x1ZGVkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBObyBwb2ludCBpbiBkZWJ1Z2dpbmcgc29tZXRoaW5nIHRoYXQmIzM5O3Mgc2ltcGx5IGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgb3IsIGV2ZW4gd29yc2UsIG1pc2JlaGF2aW5nIGJlY2F1c2UgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSAqb24qLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSBjaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZXNlIHBhcnRpY3VsYXIgbW9kdWxlcy4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGNvbmZsaWN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZsYWdzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoYXQgd291bGQgaW1wYWN0IG15IGFuYWx5c2lzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBhdCBhIGNvcnJlY3QgYW5kIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYnVpbGQuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIGNoYXNpbmcgdGhlIHJpZ2h0IHJhYmJpdCBkb3duIHRoZSBob2xlLiBTbywgS2NvbmZpZ3MsIGxldCYjMzk7cyBzZWUgd2hhdCB5b3UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX1ZJUlRJT19CQUxMT09OKSAmIzQzOz0gdmlydGlvX2JhbGxvb24ub1xuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1ZJUlRJT19JTlBVVCkgJiM0Mzs9IHZpcnRpb19pbnB1dC5vXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfVklSVElPX1ZEUEEpICYjNDM7PSB2aXJ0aW9fdmRwYS5vXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtOS0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3ZpcnRpb19pZHMuaFx1MDAzZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTA6I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC92aXJ0aW9faW5wdXQuaFx1MDAzZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvaW5wdXQvbXQuaFx1MDAzZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTItXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMzpzdHJ1Y3QgdmlydGlvX2lucHV0IHtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE0LVx0c3RydWN0IHZpcnRpb19kZXZpY2UgICAgICAgKnZkZXY7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjAtXHRfX2RtYV9mcm9tX2RldmljZV9ncm91cF9iZWdpbigpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjE6XHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICBldnRzWzY0XTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTIyLVx0X19kbWFfZnJvbV9kZXZpY2VfZ3JvdXBfZW5kKCk7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjYtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNzpzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcXVldWVfZXZ0YnVmKHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpLFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjg6XHRcdFx0XHQgICBzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpldnRidWYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yOS17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MzY9c3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3ZfZXZlbnRzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzcte1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mzg6XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVx1MDAzZXZkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjM5Olx0c3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqZXZlbnQ7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MC1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjUtICovXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo2NjpzdGF0aWMgaW50IHZpcnRpbnB1dF9zZW5kX3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTY3LVx0XHRcdFx0IHUxNiB0eXBlLCB1MTYgY29kZSwgczMyIHZhbHVlKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjgte1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Njk6XHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpzdHNidWY7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy03MC1cdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0xMTI9c3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3Zfc3RhdHVzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTEzLXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjExNDpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdnEtXHUwMDNldmRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTE1Olx0c3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqc3RzYnVmO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTE2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0xMjU9c3RhdGljIGludCB2aXJ0aW5wdXRfc3RhdHVzKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHVuc2lnbmVkIGludCB0eXBlLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEyNy17XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMjg6XHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTI5LVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEzMi1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzMzpzdGF0aWMgdTggdmlydGlucHV0X2NmZ19zZWxlY3Qoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMzQtXHRcdFx0ICAgICAgIHU4IHNlbGVjdCwgdTggc3Vic2VsKVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEzNy1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzODpcdHZpcnRpb19jd3JpdGVfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHNlbGVjdCwgXHUwMDI2c2VsZWN0KTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzOTpcdHZpcnRpb19jd3JpdGVfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHN1YnNlbCwgXHUwMDI2c3Vic2VsKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE0MDpcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgc2l6ZSwgXHUwMDI2c2l6ZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDEtXHRyZXR1cm4gc2l6ZTtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDMtXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNDQ6c3RhdGljIHZvaWQgdmlydGlucHV0X2NmZ19iaXRzKHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpLCBpbnQgc2VsZWN0LCBpbnQgc3Vic2VsLFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTQ1LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpiaXRzLCB1bnNpZ25lZCBpbnQgYml0Y291bnQpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTY0LVx0XHRyZXR1cm47XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNjU6XHR2aXJ0aW9fY3JlYWRfYnl0ZXModmktXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNjYtXHRcdFx0XHRcdCAgICAgIHUuYml0bWFwKSxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNzctXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNzg6c3RhdGljIHZvaWQgdmlydGlucHV0X2NmZ19hYnMoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksIGludCBhYnMpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNzkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE4Mi1cdHZpcnRpbnB1dF9jZmdfc2VsZWN0KHZpLCBWSVJUSU9fSU5QVVRfQ0ZHX0FCU19JTkZPLCBhYnMpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTgzOlx0dmlydGlvX2NyZWFkX2xlKHZpLVx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLCB1LmFicy5taW4sIFx1MDAyNm1pKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE4NDpcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMubWF4LCBcdTAwMjZtYSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODU6XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHUuYWJzLnJlcywgXHUwMDI2cmUpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTg2Olx0dmlydGlvX2NyZWFkX2xlKHZpLVx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLCB1LmFicy5mdXp6LCBcdTAwMjZmdSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODc6XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHUuYWJzLmZsYXQsIFx1MDAyNmZsKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE4OC1cdGlucHV0X3NldF9hYnNfcGFyYW1zKHZpLVx1MDAzZWlkZXYsIGFicywgbWksIG1hLCBmdSwgZmwpO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE5MS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE5MjpzdGF0aWMgaW50IHZpcnRpbnB1dF9pbml0X3ZxcyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE5My17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjA5LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjEwOnN0YXRpYyB2b2lkIHZpcnRpbnB1dF9maWxsX2V2dChzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSlcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTIxMS17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MjI1PXN0YXRpYyBpbnQgdmlydGlucHV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjI2LXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjIyNzpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjI4LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNTQtXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfTkFNRSwgMCk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNTU6XHR2aXJ0aW9fY3JlYWRfYnl0ZXModmktXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNTYtXHRcdFx0XHRcdCAgICAgIHUuc3RyaW5nKSxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNTgtXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfU0VSSUFMLCAwKTtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI1OTpcdHZpcnRpb19jcmVhZF9ieXRlcyh2aS1cdTAwM2V2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI2MC1cdFx0XHRcdFx0ICAgICAgdS5zdHJpbmcpLFxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI2OC1cdHNpemUgPSB2aXJ0aW5wdXRfY2ZnX3NlbGVjdCh2aSwgVklSVElPX0lOUFVUX0NGR19JRF9ERVZJRFMsIDApO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjY5Olx0aWYgKHNpemUgXHUwMDNlPSBzaXplb2Yoc3RydWN0IHZpcnRpb19pbnB1dF9kZXZpZHMpKSB7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNzA6XHRcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3MS1cdFx0XHRcdHUuaWRzLmJ1c3R5cGUsIFx1MDAyNnZpLVx1MDAzZWlkZXYtXHUwMDNlaWQuYnVzdHlwZSk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNzI6XHRcdHZpcnRpb19jcmVhZF9sZSh2aS1cdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3My1cdFx0XHRcdHUuaWRzLnZlbmRvciwgXHUwMDI2dmktXHUwMDNlaWRldi1cdTAwM2VpZC52ZW5kb3IpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjc0Olx0XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNzUtXHRcdFx0XHR1Lmlkcy5wcm9kdWN0LCBcdTAwMjZ2aS1cdTAwM2VpZGV2LVx1MDAzZWlkLnByb2R1Y3QpO1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjc2Olx0XHR2aXJ0aW9fY3JlYWRfbGUodmktXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNzctXHRcdFx0XHR1Lmlkcy52ZXJzaW9uLCBcdTAwMjZ2aS1cdTAwM2VpZGV2LVx1MDAzZWlkLnZlcnNpb24pO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM0Nj1zdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzQ3LXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjM0ODpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzQ5LVx0dm9pZCAqYnVmO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM2Nj1zdGF0aWMgaW50IHZpcnRpbnB1dF9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNjcte1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MzY4Olx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNjktXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM4Mz1zdGF0aWMgaW50IHZpcnRpbnB1dF9yZXN0b3JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzg0LXtcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjM4NTpcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzg2LVx0aW50IGVycjtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz00MDI9c3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNDA2LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6NDA3OnN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9faW5wdXRfZHJpdmVyID0ge1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNDA4LVx0LmRyaXZlci5uYW1lICAgICAgICAgPSBLQlVJTERfTU9ETkFNRSxcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MTktXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo0MjA6bW9kdWxlX3ZpcnRpb19kcml2ZXIodmlydGlvX2lucHV0X2RyaXZlcik7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MjEtTU9EVUxFX0RFVklDRV9UQUJMRSh2aXJ0aW8sIGlkX3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVmlydGlvIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFZpcnRpbyBkcml2ZXJzIGFyZSBjb25maWd1cmVkLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIHN0YW5kYXJkIGtlcm5lbCBidWlsZCBzeXN0ZW0sIGlzIHRoZSBgZHJpdmVycy92aXJ0aW9gIGRpcmVjdG9yeS4gQW5kIHdpdGhpbiB0aGF0LCB0aGUgZmlsZSB0aGF0IGRpY3RhdGVzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGFsbW9zdCBjZXJ0YWlubHkgYEtjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgc2hvdWxkIGZpbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0cyB0aGF0IGRldGVybWluZSBob3cgdGhlIFZpcnRpbyBzdWJzeXN0ZW0gaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgdGhlIGNlbnRyYWwgaHViIGZvciBhbnkgY29uZmlndXJhdGlvbiBmbGFncyByZWxhdGVkIHRvIHRob3NlIHZpcnR1YWxpemVkIGRldmljZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIGZvciB0aGUgZGlmZmVyZW50IHZpcnRpbyBkZXZpY2UgdHlwZXMgKG5ldCwgYmxvY2ssIGV0Yy4pLCBhbmQgbWF5YmUgZXZlbiBzb21lIGdsb2JhbCBWaXJ0aW8gZmxhZ3MuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBleGFtaW5lIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFZJUlRJT19BTkNIT1JcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgVklSVElPXG4gICA2Olx0XHR0cmlzdGF0ZVxuICAgNzpcdFx0c2VsZWN0IFZJUlRJT19BTkNIT1JcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBpbXBsZW1lbnRzIHRoZSB2aXJ0aW9cbiAgMTA6XHRcdCAgYnVzLCBzdWNoIGFzIENPTkZJR19WSVJUSU9fUENJLCBDT05GSUdfVklSVElPX01NSU8sIENPTkZJR19SUE1TR1xuICAxMTpcdFx0ICBvciBDT05GSUdfUzM5MF9HVUVTVC5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgVklSVElPX1BDSV9MSUJcbiAgMTQ6XHRcdHRyaXN0YXRlXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIE1vZGVybiBQQ0kgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZVxuICAxNzpcdFx0ICBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgYmFzZWQgb24gbW9kZXJuXG4gIDE4Olx0XHQgIFBDSSBkZXZpY2Ugd2l0aCBwb3NzaWJsZSB2ZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucy4gQW55XG4gIDE5Olx0XHQgIG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpcyBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBWSVJUSU9fUENJX0xJQl9MRUdBQ1lcbiAgMjI6XHRcdHRyaXN0YXRlXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIExlZ2FjeSBQQ0kgZGV2aWNlIChWaXJ0aW8gUENJIENhcmQgMC45LnggRHJhZnQgYW5kIG9sZGVyIGRldmljZSlcbiAgMjU6XHRcdCAgaW1wbGVtZW50YXRpb24uXG4gIDI2Olx0XHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzXG4gIDI3Olx0XHQgIHdoaWNoIGFyZSBiYXNlZCBvbiBsZWdhY3kgUENJIGRldmljZS4gQW55IG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpc1xuICAyODpcdFx0ICBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxuICAyOTpcdFxuICAzMDpcdG1lbnVjb25maWcgVklSVElPX01FTlVcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7VmlydGlvIGRyaXZlcnNcJiMzNDtcbiAgMzI6XHRcdGRlZmF1bHQgeVxuICAzMzpcdFxuICAzNDpcdGlmIFZJUlRJT19NRU5VXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIFZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXG4gIDM3Olx0ICAgICAgICBib29sIFwmIzM0O0hhcmRlbiB2aXJ0aW8gbm90aWZpY2F0aW9uXCYjMzQ7XG4gIDM4Olx0ICAgICAgICBkZXBlbmRzIG9uIEJST0tFTlxuICAzOTpcdCAgICAgICAgaGVscFxuICA0MDpcdCAgICAgICAgICBFbmFibGUgdGhpcyB0byBoYXJkZW4gdGhlIGRldmljZSBub3RpZmljYXRpb25zIGFuZCBzdXBwcmVzc1xuICA0MTpcdCAgICAgICAgICB0aG9zZSB0aGF0IGhhcHBlbiBhdCBhIHRpbWUgd2hlcmUgbm90aWZpY2F0aW9ucyBhcmUgaWxsZWdhbC5cbiAgNDI6XHRcbiAgNDM6XHQgICAgICAgICAgRXhwZXJpbWVudGFsOiBOb3RlIHRoYXQgc2V2ZXJhbCBkcml2ZXJzIHN0aWxsIGhhdmUgaXNzdWVzIHRoYXRcbiAgNDQ6XHQgICAgICAgICAgbWF5IGNhdXNlIGNyYXNoZXMgb3IgaGFuZ3Mgd2hlbiBjb3JyZWN0IGhhbmRsaW5nIG9mXG4gIDQ1Olx0ICAgICAgICAgIG5vdGlmaWNhdGlvbnMgaXMgZW5mb3JjZWQ7IGRlcGVuZGluZyBvbiB0aGUgc3Vic2V0IG9mXG4gIDQ2Olx0ICAgICAgICAgIGRyaXZlcnMgYW5kIGRldmljZXMgeW91IHVzZSwgdGhpcyBtYXkgb3IgbWF5IG5vdCB3b3JrLlxuICA0NzpcdFxuICA0ODpcdCAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBWSVJUSU9fUENJXG4gIDUxOlx0XHR0cmlzdGF0ZSBcJiMzNDtQQ0kgZHJpdmVyIGZvciB2aXJ0aW8gZGV2aWNlc1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNTM6XHRcdHNlbGVjdCBWSVJUSU9fUENJX0xJQlxuICA1NDpcdFx0c2VsZWN0IFZJUlRJT1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWwgZGV2aWNlXG4gIDU3Olx0XHQgIGRyaXZlcnMgb3ZlciBQQ0kuICBUaGlzIHJlcXVpcmVzIHRoYXQgeW91ciBWTU0gaGFzIGFwcHJvcHJpYXRlIFBDSVxuICA1ODpcdFx0ICB2aXJ0aW8gYmFja2VuZHMuICBNb3N0IFFFTVUgYmFzZWQgVk1NcyBzaG91bGQgc3VwcG9ydCB0aGVzZSBkZXZpY2VzXG4gIDU5Olx0XHQgIChsaWtlIEtWTSBvciBYZW4pLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBNLlxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBWSVJUSU9fUENJX0FETUlOX0xFR0FDWVxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFx0ZGVwZW5kcyBvbiBWSVJUSU9fUENJIFx1MDAyNlx1MDAyNiAoWDg2IHx8IENPTVBJTEVfVEVTVClcbiAgNjY6XHRcdGRlZmF1bHQgeVxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBWSVJUSU9fUENJX0xFR0FDWVxuICA2OTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBsZWdhY3kgdmlydGlvIGRyYWZ0IDAuOS5YIGFuZCBvbGRlciBkZXZpY2VzXCYjMzQ7XG4gIDcwOlx0XHRkZWZhdWx0IHlcbiAgNzE6XHRcdGRlcGVuZHMgb24gVklSVElPX1BDSVxuICA3MjpcdFx0c2VsZWN0IFZJUlRJT19QQ0lfTElCX0xFR0FDWVxuICA3MzpcdFx0aGVscFxuICA3NDpcdCAgICAgICAgICBWaXJ0aW8gUENJIENhcmQgMC45LlggRHJhZnQgKGNpcmNhIDIwMTQpIGFuZCBvbGRlciBkZXZpY2Ugc3VwcG9ydC5cbiAgNzU6XHRcbiAgNzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBidWlsZGluZyBhIHRyYW5zaXRpb25hbCBkcml2ZXIsIHN1cHBvcnRpbmdcbiAgNzc6XHRcdCAgYm90aCBkZXZpY2VzIGNvbmZvcm1pbmcgdG8gVmlydGlvIDEgc3BlY2lmaWNhdGlvbiwgYW5kIGxlZ2FjeSBkZXZpY2VzLlxuICA3ODpcdFx0ICBJZiBkaXNhYmxlZCwgeW91IGdldCBhIHNsaWdodGx5IHNtYWxsZXIsIG5vbi10cmFuc2l0aW9uYWwgZHJpdmVyLFxuICA3OTpcdFx0ICB3aXRoIG5vIGxlZ2FjeSBjb21wYXRpYmlsaXR5LlxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIFZpcnRpbyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCBpdCYjMzk7cyB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlLiBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGUgVmlydGlvIHN1YnN5c3RlbSwgYW5kIHRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgY29uZmlndXJpbmcgd2hpY2ggVmlydGlvIGRyaXZlcnMgZ2V0IGJ1aWx0IGFuZCBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBzb2xpZCBncmFzcCBvZiB0aGUgVmlydGlvIGFyY2hpdGVjdHVyZSwgdGhlIGRpZmZlcmVudCBkZXZpY2VzLCBhbmQgdGhlIHZhcmlvdXMgaW50ZXJmYWNlcy4gQnV0LCB0byByZWFsbHkgZ2V0IG15IGhlYWQgYXJvdW5kIHRoZSBjb25maWd1cmF0aW9uIG51YW5jZXMsIGVzcGVjaWFsbHkgaWYgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcgYSBzcGVjaWZpYyBkcml2ZXIgb3IgdHJ5aW5nIHRvIGN1c3RvbWl6ZSBhIGJ1aWxkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBpbiB0aGUgS2NvbmZpZyBmaWxlLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgY2xhdXNlcywgdGhlIGNvbmRpdGlvbmFscyBiYXNlZCBvbiBoYXJkd2FyZSBwbGF0Zm9ybXMgb3Iga2VybmVsIGZlYXR1cmVzLCBhbmQgYWxsIHRob3NlIG1lbnUgc3RydWN0dXJlcy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBib3RoIHNlbGVjdGluZyB0aGUgY29ycmVjdCBkcml2ZXJzIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgVmlydGlvIHN1YnN5c3RlbSBpcyBidWlsdCBhbmQgY29uZmlndXJlZC4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZmxhZ3Mgb3Igb3B0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHNwZWNpZmljIGRyaXZlcnMgYXJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgYnVpbHQgYXMgbW9kdWxlcywgb3IgY29tcGxldGVseSBleGNsdWRlZC4gSSBhbnRpY2lwYXRlIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIHByb3BlciBoYXJkd2FyZSBkaXNjb3ZlcnksIGRldmljZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBhbmQgb3ZlcmFsbCBzeXN0ZW0gY29tcGF0aWJpbGl0eS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHRoZSBvcHRpb25zIHJlbGF0ZWQgdG8gc3BlY2lmaWMgVmlydGlvIGRldmljZXMsIHRoZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIFZpcnRpbyBidXMsIGFuZCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLiBLbm93aW5nIHRoZSBpbnMgYW5kIG91dHMgb2YgdGhpcyBLY29uZmlnIGZpbGUgaXMgZ29pbmcgdG8gYmUga2V5IHRvIG15IHdvcmsgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdCAgICAgICAgICBTbyBsb29rIG91dCBpbnRvIHlvdXIgZHJpdmV3YXkuICBEbyB5b3UgaGF2ZSBhIGZseWluZyBjYXI/ICBJZlxuICA4MjpcdCAgICAgICAgICBzbywgeW91IGNhbiBoYXBwaWx5IGRpc2FibGUgdGhpcyBvcHRpb24gYW5kIHZpcnRpbyB3aWxsIG5vdFxuICA4MzpcdCAgICAgICAgICBicmVhay4gIE90aGVyd2lzZSwgbGVhdmUgaXQgc2V0LiAgVW5sZXNzIHlvdSYjMzk7cmUgdGVzdGluZyB3aGF0XG4gIDg0Olx0ICAgICAgICAgIGxpZmUgd2lsbCBiZSBsaWtlIGluIFRoZSBGdXR1cmUuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIFZJUlRJT19WRFBBXG4gIDg5Olx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlciBmb3IgdmlydGlvIGRldmljZXNcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gVkRQQVxuICA5MTpcdFx0c2VsZWN0IFZJUlRJT1xuICA5MjpcdFx0aGVscFxuICA5MzpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWxcbiAgOTQ6XHRcdCAgZGV2aWNlIGRyaXZlciBvdmVyIHZEUEEgYnVzLiBGb3IgdGhpcyB0byBiZSB1c2VmdWwsIHlvdSBuZWVkXG4gIDk1Olx0XHQgIGFuIGFwcHJvcHJpYXRlIHZEUEEgZGV2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQgb3BlcmF0ZXMgb24gYVxuICA5NjpcdFx0ICBwaHlzaWNhbCBkZXZpY2UgdG8gYWxsb3cgdGhlIGRhdGFwYXRoIG9mIHZpcnRpbyB0byBiZVxuICA5NzpcdFx0ICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXG4gIDk4Olx0XG4gIDk5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE0uXG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIFZJUlRJT19QTUVNXG4gMTAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciB2aXJ0aW8gcG1lbSBkcml2ZXJcJiMzNDtcbiAxMDM6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTA0Olx0XHRkZXBlbmRzIG9uIExJQk5WRElNTVxuIDEwNTpcdFx0aGVscFxuIDEwNjpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBhY2Nlc3MgdG8gdmlydGlvLXBtZW0gZGV2aWNlcywgc3RvcmFnZSBkZXZpY2VzXG4gMTA3Olx0XHQgIHRoYXQgYXJlIG1hcHBlZCBpbnRvIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIC0gc2ltaWxhciB0byBOVkRJTU1zXG4gMTA4Olx0XHQgICAtIHdpdGggYSB2aXJ0aW8tYmFzZWQgZmx1c2hpbmcgaW50ZXJmYWNlLlxuIDEwOTpcdFxuIDExMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDExMTpcdFxuIDExMjpcdGNvbmZpZyBWSVJUSU9fQkFMTE9PTlxuIDExMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIGJhbGxvb24gZHJpdmVyXCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIFZJUlRJT1xuIDExNTpcdFx0c2VsZWN0IEJBTExPT05cbiAxMTY6XHRcdHNlbGVjdCBQQUdFX1JFUE9SVElOR1xuIDExNzpcdFx0aGVscFxuIDExODpcdFx0IFRoaXMgZHJpdmVyIHN1cHBvcnRzIGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgdGhlIGFtb3VudFxuIDExOTpcdFx0IG9mIG1lbW9yeSB3aXRoaW4gYSBLVk0gZ3Vlc3QuXG4gMTIwOlx0XG4gMTIxOlx0XHQgSWYgdW5zdXJlLCBzYXkgTS5cbiAxMjI6XHRcbiAxMjM6XHRjb25maWcgVklSVElPX01FTVxuIDEyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG1lbSBkcml2ZXJcJiMzNDtcbiAxMjU6XHRcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcbiAxMjY6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4gMTI4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbiAxMjk6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4gMTMwOlx0XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gMTMxOlx0XHRoZWxwXG4gMTMyOlx0XHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxuIDEzMzpcdFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXG4gMTM0Olx0XG4gMTM1Olx0XHQgVGhpcyBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHg4Ni02NCwgYXJtNjQsIHJpc2N2IGFuZCBzMzkwLlxuIDEzNjpcdFx0IEFsdGhvdWdoIGl0IHNob3VsZCBjb21waWxlIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBpbXBsZW1lbnRcbiAxMzc6XHRcdCBtZW1vcnkgaG90KHVuKXBsdWcsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhbmQvb3IgY29tbW9uXG4gMTM4Olx0XHQgY29kZSBjaGFuZ2VzIG1heSBiZSByZXF1aXJlZCBmb3IgdmlydGlvLW1lbSwga2R1bXAgYW5kIGtleGVjIHRvXG4gMTM5Olx0XHQgd29yayBhcyBleHBlY3RlZC5cbiAxNDA6XHRcbiAxNDE6XHRcdCBJZiB1bnN1cmUsIHNheSBNLlxuIDE0MjpcdFxuIDE0MzpcdGNvbmZpZyBWSVJUSU9fSU5QVVRcbiAxNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnRpbyBpbnB1dCBkcml2ZXJcJiMzNDtcbiAxNDU6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gMTQ2Olx0XHRkZXBlbmRzIG9uIElOUFVUXG4gMTQ3Olx0XHRoZWxwXG4gMTQ4Olx0XHQgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydGlvIGlucHV0IGRldmljZXMgc3VjaCBhc1xuIDE0OTpcdFx0IGtleWJvYXJkcywgbWljZSBhbmQgdGFibGV0cy5cbiAxNTA6XHRcbiAxNTE6XHRcdCBJZiB1bnN1cmUsIHNheSBNLlxuIDE1MjpcdFxuIDE1MzpcdGNvbmZpZyBWSVJUSU9fTU1JT1xuIDE1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UGxhdGZvcm0gYnVzIGRyaXZlciBmb3IgbWVtb3J5IG1hcHBlZCB2aXJ0aW8gZGV2aWNlc1wmIzM0O1xuIDE1NTpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAxNTY6XHRcdHNlbGVjdCBWSVJUSU9cbiAxNTc6XHRcdGhlbHBcbiAxNTg6XHRcdCBUaGlzIGRyaXZlcnMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgbWVtb3J5IG1hcHBlZCB2aXJ0aW9cbiAxNTk6XHRcdCBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLlxuIDE2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBSZW1vdGUgUHJvY2Vzc29yIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcmVtb3RlIHByb2Nlc3NvcnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnN5c3RlbS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWdgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgYW5kIGl0cyBzdXBwb3J0ZWQgZGV2aWNlcy4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBgQ09ORklHX1JFTU9URVBST0NgLCBvZiBjb3Vyc2UsIGJ1dCBhbHNvIGFueSBkZXZpY2Utc3BlY2lmaWMgb3B0aW9ucyB0aGF0IG1pZ2h0IHJlc2lkZSB0aGVyZTogb3B0aW9ucyBmb3IgZW5hYmxpbmcgc3BlY2lmaWMgZmlybXdhcmUgbG9hZGluZyBtZWNoYW5pc21zLCByZXNvdXJjZSB0YWJsZSBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb25zLCBvciBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgcXVpcmtzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkIGR1cmluZyBjb25maWd1cmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBjb25maWd1cmFibGUgYW5kIGhvdyB0aGV5IGFyZSBleHBvc2VkIHRvIHRoZSBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRU1PVEVQUk9DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9yZW1vdGVwcm9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnPTI9bWVudSBcJiMzNDtSZW1vdGVwcm9jIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTMtXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzo0OmNvbmZpZyBSRU1PVEVQUk9DXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy01LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBSZW1vdGUgUHJvY2Vzc29yIHN1YnN5c3RlbVwmIzM0O1xuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnPTE1PWlmIFJFTU9URVBST0NcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTE2LVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6MTc6Y29uZmlnIFJFTU9URVBST0NfQ0RFVlxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMTgtXHRib29sIFwmIzM0O1JlbW90ZXByb2MgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBWaXJ0aW8gU3luY2hyb25pemF0aW9uIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBhbGwgYWJvdXQgc3luY2hyb25pemluZyBjYWxsYmFja3MgZHVyaW5nIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCBzbyBpdCYjMzk7cyB3b3J0aCBhIGNsb3NlIGxvb2suCgpGaXJzdGx5LCB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgdmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpYCBjYWxsZWQgZnJvbSBgdmlydGlvX3Jlc2V0X2RldmljZWAgYW5kIGB2aXJ0aW9fZGV2aWNlX3NodXRkb3duYC4gVGhpcyBzaWduYWxzIHRoZSBpbnRlbnQgdG8gc3luY2hyb25pemUgYWxsIHZpcnRpbyBjYWxsYmFja3Mgb24gcmVzZXQgb3Igc2h1dGRvd24uCgpMb29raW5nIGRlZXBlciwgdGhlIHNlcmllcyB0aGVuIGFwcGxpZXMgdGhpcyB0byBpbmRpdmlkdWFsIGRyaXZlcnMuIGB2aXJ0aW9fdmRwYWAgbm93IHVzZXMgYSBgY2FsbGJhY2tfbG9ja2Agcndsb2NrLiBUaGF0IG1ha2VzIHNlbnNlIGZvciBlbnN1cmluZyBleGNsdXNpdmUgYWNjZXNzIGR1cmluZyBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFuZCByZXNldCBvcGVyYXRpb25zLiBgdmlydGlvX2lucHV0YCBoYXMgc29tZSBjaGVja3Mgb24gYHZpLSZndDtyZWFkeWAgaW4gYHZpcnRpbnB1dF9yZWN2X2V2ZW50c2AgYmVmb3JlIGNhbGxpbmcgYHZpcnRpbnB1dF9xdWV1ZV9ldnRidWZgIGFuZCBgdmlydHF1ZXVlX2tpY2tgLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgd2F5IHRvIHByZXZlbnQgc2VuZGluZyBldmVudHMgd2hlbiB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZWFkeS4gVGhlIHJlb3JkZXJpbmcgb2YgYHZpcnRpb19yZXNldF9kZXZpY2VgIGJlZm9yZSBgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2VgIGluIGB2aXJ0aW5wdXRfcmVtb3ZlYCBhbHNvIHNlZW1zIGNvcnJlY3QgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4KClRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGByZW1vdGVwcm9jYCBjaGFuZ2VzLiBUaGV5JiMzOTt2ZSBhZGRlZCBTUkNVIHN5bmNocm9uaXphdGlvbiBmb3IgdmlydHF1ZXVlIGludGVycnVwdCBjYWxsYmFja3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSByZW1vdGVwcm9jIGlzIG9mdGVuIHVzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyB3aXRoIGNvbXBsZXggaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBTUkNVIGlzIGEgZ29vZCBjaG9pY2UgaWYgcmVhZCBhY2Nlc3MgaXMgZnJlcXVlbnQgYW5kIHdyaXRlIGFjY2VzcyBpcyBpbmZyZXF1ZW50LgoKVGhlIFBDSSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIHJlbW92YWwgb2YgYHZwX3N5bmNocm9uaXplX3ZlY3RvcnNgIGZyb20gYHZwX3Jlc2V0YCwgaW5kaWNhdGVzIHRoYXQgdGhlIHN5bmNocm9uaXphdGlvbiBpcyBiZWluZyBoYW5kbGVkIGF0IGEgaGlnaGVyIGxldmVsLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGUgcmVmYWN0b3JpbmcmIzM5O3MgaW50ZW50LiBUaGUgZm9jdXMgb24gY2xlYW5pbmcgdXAgdGhlIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGZvY3VzaW5nIG9uIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaXMgZ29vZCwgaXQgY291bGQgYmUgYSBsYXJnZSBpbXBhY3QuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBUaGFua2Z1bGx5LCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAmIzM0O3llcyYjMzQ7LiBgdmlydGlvX3Jlc2V0X2RldmljZWAgaXMgY2FsbGVkIG9uIHZpcnRpbyByZXNldHMgYWNyb3NzIGFsbCBkcml2ZXJzLiBUaGUgYHZpcnRpb19pbnB1dGAgZXZlbnQgcXVldWUgaXMgYWxzbyBhIHZlcnkgYWN0aXZlIHBhcnQgb2YgdGhlIHN5c3RlbS4gV2Uga25vdyBgdmlydGlvX3ZkcGFgIGlzIHByZXNlbnQuIGByZW1vdGVwcm9jYCBhbHNvIGludm9sdmVzIGludGVycnVwdCBhbmQgZGV2aWNlIGNhbGxiYWNrcy4gYHZpcnRpb19wY2lgIGFuZCBgdnBfcmVzZXRgIGFyZSBvYnZpb3VzbHkgaW52b2tlZCBkdXJpbmcgUENJIHZpcnRpbyByZXNldC4KCkdpdmVuIHRoZSBjcml0ZXJpYSBvZiAmIzM0O1dvcnRoRnV6emluZywmIzM0OyB0aGlzIHBhdGNoIHNlcmllcyBkZWZpbml0ZWx5IHF1YWxpZmllcy4gSXQgdG91Y2hlcyBjb3JlIHZpcnRpbyBidXMgcmVzZXQgbG9naWMsIG11bHRpcGxlIGRyaXZlcnMsIGFuZCBpbnRyb2R1Y2VzIGxvY2tpbmcgcHJpbWl0aXZlcy4gSXQgaGl0cyBjb3JlIHN1YnN5c3RlbXMsIHJlYWNoYWJsZSBkcml2ZXJzICh2aXJ0aW8pLCBhbmQgaW50cm9kdWNlcyByZWZhY3RvcmluZy9jb2RlIGNsZWFudXAuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluY2x1ZGU6CjEuIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYAoyLiBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAKMy4gYHZpcnRpbnB1dF9yZWN2X2V2ZW50c2AKNC4gYHZpcnRpbnB1dF9yZW1vdmVgCjUuIGB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JgCjYuIGB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNgCjcuIGBycHJvY192cV9pbnRlcnJ1cHRgCjguIGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYAo5LiBgcnByb2NfdHlwZV9yZWxlYXNlYAoxMC4gYHJwcm9jX2FsbG9jYAphbG9uZyB3aXRoIHBvdGVudGlhbGx5IGB2cF9yZXNldGAsIGV2ZW4gaWYgdGhleSBtYXkgYmUgYHN0YXRpY2AuCgpUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgd2VsbC1kZWZpbmVkIHBhdGNoIHNlcmllcyB0aGF0IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgdGhlIHJlc2lsaWVuY2Ugb2YgdGhlIHZpcnRpbyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZwX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYz04NT1zdGF0aWMgdm9pZCB2cF9zZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1OCBzdGF0dXMpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYy05Mi1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmM6OTM6c3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTk0LXtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jPTE4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb19wY2lfY29uZmlnX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTE5MS1cdC5zZXRfc3RhdHVzXHQ9IHZwX3NldF9zdGF0dXMsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jOjE5MjpcdC5yZXNldFx0XHQ9IHZwX3Jlc2V0LFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYy0xOTMtXHQuZmluZF92cXNcdD0gdnBfZmluZF92cXMsXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz01MzU9c3RhdGljIHZvaWQgdnBfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtNTQ1LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYzo1NDY6c3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jLTU0Ny17XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz0xMjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfbm9kZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTIyOS1cdC5zZXRfc3RhdHVzXHQ9IHZwX3NldF9zdGF0dXMsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jOjEyMzA6XHQucmVzZXRcdFx0PSB2cF9yZXNldCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTIzMS1cdC5maW5kX3Zxc1x0PSB2cF9tb2Rlcm5fZmluZF92cXMsXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz0xMjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTI0OS1cdC5zZXRfc3RhdHVzXHQ9IHZwX3NldF9zdGF0dXMsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jOjEyNTA6XHQucmVzZXRcdFx0PSB2cF9yZXNldCxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTI1MS1cdC5maW5kX3Zxc1x0PSB2cF9tb2Rlcm5fZmluZF92cXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDQyCgkJCQkJCQlvdXRwdXQ6IDI0MQoJCQkJCQkJdGhvdWdodHM6IDU0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBUcnVlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoZSByZWxldmFudCBkcml2ZXJzLiBJIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIGVuYWJsZWQgYnkgYFZJUlRJT2AsIGBWSVJUSU9fUENJYCwgYFZJUlRJT19WRFBBYCwgYFZJUlRJT19JTlBVVGAsIGFuZCBgUkVNT1RFUFJPQ2AuIFRvIGJlIGNlcnRhaW4sIEkgZG92ZSBhIGxpdHRsZSBkZWVwZXIgdG8gY2hlY2sgZGVwZW5kZW5jaWVzLiBgVklSVElPX1ZEUEFgIGRlcGVuZHMgb24gYFZEUEFgIGFuZCBzZWxlY3RzIGBWSVJUSU9gLCBgVklSVElPX0lOUFVUYCBkZXBlbmRzIG9uIGBWSVJUSU9gLCBgSU5QVVRgLCBhbmQgYFZJUlRJT19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIHNlbGVjdHMgYm90aCBgVklSVElPX1BDSV9MSUJgIGFuZCBgVklSVElPYC4gYFJFTU9URVBST0NgIGlzIGEgYm9vbGVhbiBjb25maWcuIFdpdGggdGhpcyBJIGhhZCBhIHZlcmlmaWVkIGxpc3Qgb2YgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nOiBgVklSVElPYCwgYFZJUlRJT19QQ0lgLCBgVklSVElPX1ZEUEFgLCBgVkRQQWAsIGBWSVJUSU9fSU5QVVRgLCBhbmQgYFJFTU9URVBST0NgLgoKVGhlbiwgSSBsb29rZWQgYXQgYSBzZWxlY3Rpb24gb2Yga2V5IHN5bWJvbHMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb2RlIHdlIGFyZSBsaWtlbHkgdG8gZXhwbG9yZS4gSSBwaWNrZWQgb3V0IGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCwgYHZpcnRpb19kZXZpY2Vfc2h1dGRvd25gLCBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYCwgYHZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYmAsIGB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNgLCBgcnByb2NfdnFfaW50ZXJydXB0YCwgYHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnNgLCBhbmQgYHJwcm9jX2FsbG9jYCBhcyBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyZXN0LiBCdXQgYWZ0ZXIgYSBxdWljayByZXZpZXcsIGl0JiMzOTtzIGNsZWFyIHRoZXNlIGFyZSBzcGVjaWZpYyBjYWxsYmFja3MgYW5kIGVudHJ5cG9pbnRzLCByYXRoZXIgdGhhbiBhIGJyb2FkLCB1YmlxdWl0b3VzIGhvdCBwYXRocyBpbiB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIGRyaXZlcnMuCgpBZnRlciB0aGlzIHF1aWNrIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIG9taXNzaW9ucyBvciByZWR1bmRhbmNpZXMuIEdpdmVuIHRoaXMgaW5mb3JtYXRpb24sIG15IHZlcmRpY3QgaXMgdGhhdCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJiMzOTttIHJlYWR5IHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VklSVElPX0lOUFVUJiMzNDssCiAgICAmIzM0O1JFTU9URVBST0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fcmVzZXRfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZpcnRpb19kZXZpY2Vfc2h1dGRvd24mIzM0OywKICAgICYjMzQ7dmlydGlucHV0X3JlY3ZfZXZlbnRzJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYiYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfdnFfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3Jwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgdmlydGlvIGRldmljZSByZXNldCBhbmQgc2h1dGRvd24gaGFuZGxpbmcgYWNyb3NzIGNvcmUgdmlydGlvLCB2aXJ0aW8taW5wdXQsIHZpcnRpby12ZHBhLCBhbmQgcmVtb3RlcHJvYyB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgdXNpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgKFNSQ1UgaW4gcmVtb3RlcHJvYywgcndsb2NrIGluIHZpcnRpb192ZHBhLCBhbmQgc3luY2hyb25pemVfY2JzIGluIHZpcnRpbyBjb3JlKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWwgYnVzIGRyaXZlcnMgYW5kIHN1YnN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fUENJJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VklSVElPX0lOUFVUJiMzNDssCiAgICAmIzM0O1JFTU9URVBST0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fcmVzZXRfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZpcnRpb19kZXZpY2Vfc2h1dGRvd24mIzM0OywKICAgICYjMzQ7dmlydGlucHV0X3JlY3ZfZXZlbnRzJiMzNDssCiAgICAmIzM0O3ZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYiYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfdnFfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3Jwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMmIzM0OywKICAgICYjMzQ7cnByb2NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgdmlydGlvIGRldmljZSByZXNldCBhbmQgc2h1dGRvd24gaGFuZGxpbmcgYWNyb3NzIGNvcmUgdmlydGlvLCB2aXJ0aW8taW5wdXQsIHZpcnRpby12ZHBhLCBhbmQgcmVtb3RlcHJvYyB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgdXNpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgKFNSQ1UgaW4gcmVtb3RlcHJvYywgcndsb2NrIGluIHZpcnRpb192ZHBhLCBhbmQgc3luY2hyb25pemVfY2JzIGluIHZpcnRpbyBjb3JlKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWwgYnVzIGRyaXZlcnMgYW5kIHN1YnN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cblxuS2V5IHBvaW50cyByZWdhcmRpbmcgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTpcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCB0b3VjaCB1c2VyLWNvcHkgYm91bmRhcmllcyBvciBuZXRsaW5rL2lvY3RsIG91dHB1dCBidWZmZXJzLCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgYWxsIG5ldyBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAoYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS5cblxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzVjMDgzMTZiNjNkYTkyMzExYjZjY2Y4ZWNjY2MwNGJiMDk5Y2RmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTU6MDc6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jIGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYwppbmRleCA3NDI1YTg1NDgxNDFhLi5iYWNhNmIwOWU5YWMyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAgKgogICogQmFzZWQgb24gVmlydGlvIE1NSU8gZHJpdmVyIGJ5IFBhd2VsIE1vbGwsIGNvcHlyaWdodCAyMDExLTIwMTQsIEFSTSBMdGQuCiAgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKQEAgLTg2OSw2ICYjNDM7ODcwLDE0IEBAIHN0YXRpYyB2b2lkIHZ1X3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXZ1X2Rldi0mZ3Q7c3RhdHVzID0gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHZ1X3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7CiYjNDM7CiYjNDM7CWlmICh2dV9kZXYtJmd0O2lycSAmZ3Q7PSAwKQomIzQzOwkJc3luY2hyb25pemVfaXJxKHZ1X2Rldi0mZ3Q7aXJxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2dV9kZWxfdnEoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHZpcnRpb191bWxfdnFfaW5mbyAqaW5mbyA9IHZxLSZndDtwcml2OwpAQCAtMTEyMSw2ICYjNDM7MTEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3VtbF9jb25maWdfb3BzID0gewogCS5yZXNldCA9IHZ1X3Jlc2V0LAogCS5maW5kX3ZxcyA9IHZ1X2ZpbmRfdnFzLAogCS5kZWxfdnFzID0gdnVfZGVsX3ZxcywKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IHZ1X3N5bmNocm9uaXplX2NicywKIAkuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLAogCS5maW5hbGl6ZV9mZWF0dXJlcyA9IHZ1X2ZpbmFsaXplX2ZlYXR1cmVzLAogCS5idXNfbmFtZSA9IHZ1X2J1c19uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uYyBiL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMKaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jCkBAIC0xMTM1LDYgJiM0MzsxMTM1LDE5IEBAIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJdG1fdmRldi0mZ3Q7c3RhdHVzID0gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7CiYjNDM7CXN0cnVjdCBtbHhiZl90bWZpZm8gKmZpZm8gPSB0bV92ZGV2LSZndDt2cmluZ3NbMF0uZmlmbzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZpZm8tJmd0O3NwaW5fbG9jayk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2ZpZm8tJmd0O3NwaW5fbG9ja1tpXSwgZmxhZ3MpOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2ZpZm8tJmd0O3NwaW5fbG9ja1tpXSwgZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogUmVhZCB0aGUgdmFsdWUgb2YgYSBjb25maWd1cmF0aW9uIGZpZWxkLiAqLwogc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsCiAJCQkJICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCkBAIC0xMTc5LDYgJiM0MzsxMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBtbHhiZl90bWZpZm9fdmlydGlvX2NvbmZpZ19vcHMgPSB7CiAJLmZpbmRfdnFzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19maW5kX3ZxcywKIAkuZGVsX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZGVsX3ZxcywKIAkucmVzZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0LAomIzQzOwkuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsCiAJLnNldF9zdGF0dXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX3NldF9zdGF0dXMsCiAJLmdldF9zdGF0dXMgPSBtbHhiZl90bWZpZm9fdmlydGlvX2dldF9zdGF0dXMsCiAJLmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCmluZGV4IDFlZDQwNjcxNDg0OTEuLjFiMTM5ZDI1YWIyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMKQEAgLTI0MTAsNiAmIzQzOzI0MTAsNyBAQCBzdGF0aWMgdm9pZCBycHJvY190eXBlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogCiAJZGV2X2luZm8oJmFtcDtycHJvYy0mZ3Q7ZGV2LCAmIzM0O3JlbGVhc2luZyAlc1xuJiMzNDssIHJwcm9jLSZndDtuYW1lKTsKIAomIzQzOwljbGVhbnVwX3NyY3Vfc3RydWN0KCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpOwogCWlkcl9kZXN0cm95KCZhbXA7cnByb2MtJmd0O25vdGlmeWlkcyk7CiAKIAlpZiAocnByb2MtJmd0O2luZGV4ICZndDs9IDApCkBAIC0yNTA3LDYgJiM0MzsyNTA4LDExIEBAIHN0cnVjdCBycHJvYyAqcnByb2NfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCWlmICghcnByb2MpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChpbml0X3NyY3Vfc3RydWN0KCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpKSB7CiYjNDM7CQlrZnJlZShycHJvYyk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCXJwcm9jLSZndDtwcml2ID0gJmFtcDtycHJvY1sxXTsKIAlycHJvYy0mZ3Q7YXV0b19ib290ID0gdHJ1ZTsKIAlycHJvYy0mZ3Q7ZWxmX2NsYXNzID0gRUxGQ0xBU1NOT05FOwpAQCAtMjU3MSw2ICYjNDM7MjU3Nyw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfYWxsb2MpOwogICoKICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkCiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuCiAgKi8KIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQogewpAQCAtMjU4Niw2ICYjNDM7MjU5NCw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfZnJlZSk7CiAgKgogICogSWYgbm8gb25lIGhvbGRzIGFueSByZWZlcmVuY2UgdG8gcnByb2MgYW55bW9yZSwgdGhlbiBpdHMgcmVmY291bnQgd291bGQKICAqIG5vdyBkcm9wIHRvIHplcm8sIGFuZCBpdCB3b3VsZCBiZSBmcmVlZC4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IE1heSBzbGVlcCBpZiB0aGlzIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAqLwogdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3JlZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3JjdS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JlbW90ZXByb2NfaW50ZXJuYWwuaCYjMzQ7CiAKQEAgLTg5LDE0ICYjNDM7OTAsMTkgQEAgc3RhdGljIGJvb2wgcnByb2NfdmlydGlvX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIGlycXJldHVybl90IHJwcm9jX3ZxX2ludGVycnVwdChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBpbnQgbm90aWZ5aWQpCiB7CiAJc3RydWN0IHJwcm9jX3ZyaW5nICpydnJpbmc7CiYjNDM7CWludCBzcmN1X2lkeDsKJiM0MzsJaXJxcmV0dXJuX3QgcmV0OwomIzQzOwomIzQzOwlzcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpOwogCiAJZGV2X2RiZygmYW1wO3Jwcm9jLSZndDtkZXYsICYjMzQ7dnEgaW5kZXggJWQgaXMgaW50ZXJydXB0ZWRcbiYjMzQ7LCBub3RpZnlpZCk7CiAKIAlydnJpbmcgPSBpZHJfZmluZCgmYW1wO3Jwcm9jLSZndDtub3RpZnlpZHMsIG5vdGlmeWlkKTsKLQlpZiAoIXJ2cmluZyB8fCAhcnZyaW5nLSZndDt2cSkKLQkJcmV0dXJuIElSUV9OT05FOwomIzQzOwlyZXQgPSBydnJpbmcgJmFtcDsmYW1wOyBydnJpbmctJmd0O3ZxID8gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy0mZ3Q7dnEpIDogSVJRX05PTkU7CiYjNDM7CiYjNDM7CXNyY3VfcmVhZF91bmxvY2soJmFtcDtycHJvYy0mZ3Q7dnFfc3JjdSwgc3JjdV9pZHgpOwogCi0JcmV0dXJuIHZyaW5nX2ludGVycnVwdCgwLCBydnJpbmctJmd0O3ZxKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocnByb2NfdnFfaW50ZXJydXB0KTsKIApAQCAtMjQyLDYgJiM0MzsyNDgsMTMgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCWRldl9kYmcoJmFtcDt2ZGV2LSZndDtkZXYsICYjMzQ7cmVzZXQgIVxuJiMzNDspOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBycHJvYyAqcnByb2MgPSB2ZGV2X3RvX3Jwcm9jKHZkZXYpOwomIzQzOwomIzQzOwlzeW5jaHJvbml6ZV9zcmN1KCZhbXA7cnByb2MtJmd0O3ZxX3NyY3UpOwomIzQzO30KJiM0MzsKIC8qIHByb3ZpZGUgdGhlIHZkZXYgZmVhdHVyZXMgYXMgcmV0cmlldmVkIGZyb20gdGhlIGZpcm13YXJlICovCiBzdGF0aWMgdTY0IHJwcm9jX3ZpcnRpb19nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CkBAIC0zMzAsNiAmIzQzOzM0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgcnByb2NfdmlydGlvX2NvbmZpZ19vcHMgPSB7CiAJLmZpbmRfdnFzCT0gcnByb2NfdmlydGlvX2ZpbmRfdnFzLAogCS5kZWxfdnFzCT0gcnByb2NfdmlydGlvX2RlbF92cXMsCiAJLnJlc2V0CQk9IHJwcm9jX3ZpcnRpb19yZXNldCwKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsCiAJLnNldF9zdGF0dXMJPSBycHJvY192aXJ0aW9fc2V0X3N0YXR1cywKIAkuZ2V0X3N0YXR1cwk9IHJwcm9jX3ZpcnRpb19nZXRfc3RhdHVzLAogCS5nZXQJCT0gcnByb2NfdmlydGlvX2dldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jIGIvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKaW5kZXggYmFiNmNhZDNmZDVjZS4uNTUyZDc3OTk4MDEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKQEAgLTEwNjIsNyAmIzQzOzEwNjIsNyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIAlzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpOwogCXN0cnVjdCBhaXJxX2luZm8gKmluZm8gPSB2Y2Rldi0mZ3Q7YWlycV9pbmZvOwogCi0JaWYgKGluZm8pIHsKJiM0MzsJaWYgKHZjZGV2LSZndDtpc190aGluaW50ICZhbXA7JmFtcDsgaW5mbykgewogCQkvKgogCQkgKiBUaGlzIGRldmljZSB1c2VzIGFkYXB0ZXIgaW50ZXJydXB0czogc3luY2hyb25pemUgd2l0aAogCQkgKiB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsZWQgYnkgdmlydGlvX2FpcnFfaGFuZGxlcigpCkBAIC0xMjA0LDEzICYjNDM7MTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAogCQkJdmNkZXYtJmd0O2VyciA9IC1FSU87CiAJfQogCXZpcnRpb19jY3dfY2hlY2tfYWN0aXZpdHkodmNkZXYsIGFjdGl2aXR5KTsKLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT04KIAkvKgogCSAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlCiAJICogZGlzYWJsZWQgaGVyZS4KIAkgKi8KIAlyZWFkX2xvY2soJmFtcDt2Y2Rldi0mZ3Q7aXJxX2xvY2spOwotI2VuZGlmCiAJZm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSwKIAkJCSBzaXplb2YoKmluZGljYXRvcnModmNkZXYpKSAqIEJJVFNfUEVSX0JZVEUpIHsKIAkJLyogVGhlIGJpdCBjbGVhciBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIHZyaW5nIGtpY2suICovCkBAIC0xMjE5LDkgJiM0MzsxMjE3LDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19pbnRfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJdnEgPSB2aXJ0aW9fY2N3X3ZxX2J5X2luZCh2Y2RldiwgaSk7CiAJCXZyaW5nX2ludGVycnVwdCgwLCB2cSk7CiAJfQotI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTgogCXJlYWRfdW5sb2NrKCZhbXA7dmNkZXYtJmd0O2lycV9sb2NrKTsKLSNlbmRpZgogCWlmICh0ZXN0X2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpKSB7CiAJCXZpcnRpb19jb25maWdfY2hhbmdlZCgmYW1wO3ZjZGV2LSZndDt2ZGV2KTsKIAkJY2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCmluZGV4IDc1YmI0ZmZlM2I4NzcuLmFkMWM1MGI4YTk0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCkBAIC0yNjQsNiAmIzQzOzI2NCw3IEBAIHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KQogI2VuZGlmCiAKIAlkZXYtJmd0O2NvbmZpZy0mZ3Q7cmVzZXQoZGV2KTsKJiM0MzsJdmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7CiAKQEAgLTQyNCw2ICYjNDM7NDI1LDcgQEAgdm9pZCB2aXJ0aW9fZGV2aWNlX3NodXRkb3duKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCiAJICogU29tZSBkZXZpY2VzIGdldCB3ZWRnZWQgaWYgdGhpcyBoYXBwZW5zLCBzbyByZXNldCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QuCiAJICovCiAJZGV2LSZndDtjb25maWctJmd0O3Jlc2V0KGRldik7CiYjNDM7CXZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb19kZXZpY2Vfc2h1dGRvd24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jCmluZGV4IGRlZWMyNGU4ZTY4MjguLjdiNjU0YWYwYTQyY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jCkBAIC00OSw5ICYjNDM7NDksMTIgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3ZfZXZlbnRzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogCQkJCSAgICBsZTE2X3RvX2NwdShldmVudC0mZ3Q7Y29kZSksCiAJCQkJICAgIGxlMzJfdG9fY3B1KGV2ZW50LSZndDt2YWx1ZSkpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2aS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJCWlmICghdmktJmd0O3JlYWR5KQomIzQzOwkJCQljb250aW51ZTsKIAkJCXZpcnRpbnB1dF9xdWV1ZV9ldnRidWYodmksIGV2ZW50KTsKIAkJfQotCQl2aXJ0cXVldWVfa2ljayh2cSk7CiYjNDM7CQlpZiAodmktJmd0O3JlYWR5KQomIzQzOwkJCXZpcnRxdWV1ZV9raWNrKHZxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZpLSZndDtsb2NrLCBmbGFncyk7CiB9CkBAIC0zNTAsOCAmIzQzOzM1Myw5IEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJdmktJmd0O3JlYWR5ID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZpLSZndDtsb2NrLCBmbGFncyk7CiAKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh2aS0mZ3Q7aWRldik7CiYjNDM7CS8qIENhbGxiYWNrcyB1c2UgdmktJmd0O2lkZXYuICovCiAJdmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTsKJiM0MzsJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktJmd0O2lkZXYpOwogCXdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZpLSZndDtzdHMpKSAhPSBOVUxMKQogCQlrZnJlZShidWYpOwogCXZkZXYtJmd0O2NvbmZpZy0mZ3Q7ZGVsX3Zxcyh2ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jCmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYwpAQCAtOTgsOCAmIzQzOzk4LDYgQEAgc3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiAJLyogRmx1c2ggb3V0IHRoZSBzdGF0dXMgd3JpdGUsIGFuZCBmbHVzaCBpbiBkZXZpY2Ugd3JpdGVzLAogCSAqIGluY2x1ZGluZyBNU2ktWCBpbnRlcnJ1cHRzLCBpZiBhbnkuICovCiAJdnBfbGVnYWN5X2dldF9zdGF0dXMoJmFtcDt2cF9kZXYtJmd0O2xkZXYpOwotCS8qIEZsdXNoIHBlbmRpbmcgVlEvY29uZmlndXJhdGlvbiBjYWxsYmFja3MuICovCi0JdnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTsKIH0KIAogc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKaW5kZXggNmQ4YWUyYTZhOGNhZi4uYzllMjEzMTdjNTFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jCkBAIC01NTksOSAmIzQzOzU1OSw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCQltc2xlZXAoMSk7CiAKIAl2cF9tb2Rlcm5fYXZxX2NsZWFudXAodmRldik7Ci0KLQkvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqLwotCXZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7CiB9CiAKIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYwppbmRleCBkZTJhZjY5NmRlNmNhLi40ZjllNzBjMTMzMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiBzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlIHsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSB2ZGV2OwogCXN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYTsKJiM0MzsJcndsb2NrX3QgY2FsbGJhY2tfbG9jazsKIAl1NjQgZmVhdHVyZXM7CiB9OwogCkBAIC0xMjMsOCAmIzQzOzEyNCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfY29uZmlnX2NiKHZvaWQgKnByaXZhdGUpCiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpCiB7CiAJc3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlOwomIzQzOwlzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWlycXJldHVybl90IHJldDsKIAotCXJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpOwomIzQzOwl2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodnEtJmd0O3ZkZXYpOwomIzQzOwlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO3ZkX2Rldi0mZ3Q7Y2FsbGJhY2tfbG9jaywgZmxhZ3MpOwomIzQzOwlyZXQgPSB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpOwomIzQzOwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2ZGV2KTsKJiM0MzsKJiM0MzsJd3JpdGVfbG9ja19pcnEoJmFtcDt2ZF9kZXYtJmd0O2NhbGxiYWNrX2xvY2spOwomIzQzOwl3cml0ZV91bmxvY2tfaXJxKCZhbXA7dmRfZGV2LSZndDtjYWxsYmFja19sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKgpAQCAtNDM5LDYgJiM0Mzs0NTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb192ZHBhX2NvbmZpZ19vcHMgPSB7CiAJLnJlc2V0CQk9IHZpcnRpb192ZHBhX3Jlc2V0LAogCS5maW5kX3Zxcwk9IHZpcnRpb192ZHBhX2ZpbmRfdnFzLAogCS5kZWxfdnFzCT0gdmlydGlvX3ZkcGFfZGVsX3ZxcywKJiM0MzsJLnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicywKIAkuZ2V0X2ZlYXR1cmVzCT0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLAogCS5maW5hbGl6ZV9mZWF0dXJlcyA9IHZpcnRpb192ZHBhX2ZpbmFsaXplX2ZlYXR1cmVzLAogCS5idXNfbmFtZQk9IHZpcnRpb192ZHBhX2J1c19uYW1lLApAQCAtNDcyLDYgJiM0Mzs0OTAsNyBAQCBzdGF0aWMgaW50IHZpcnRpb192ZHBhX3Byb2JlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKIAl2ZF9kZXYtJmd0O3ZkZXYuY29uZmlnID0gJmFtcDt2aXJ0aW9fdmRwYV9jb25maWdfb3BzOwogCXZkX2Rldi0mZ3Q7dmRldi5tYXAgPSB2ZHBhLSZndDttYXA7CiAJdmRfZGV2LSZndDt2ZHBhID0gdmRwYTsKJiM0MzsJcndsb2NrX2luaXQoJmFtcDt2ZF9kZXYtJmd0O2NhbGxiYWNrX2xvY2spOwogCiAJdmRfZGV2LSZndDt2ZGV2LmlkLmRldmljZSA9IG9wcy0mZ3Q7Z2V0X2RldmljZV9pZCh2ZHBhKTsKIAlpZiAodmRfZGV2LSZndDt2ZGV2LmlkLmRldmljZSA9PSAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaAppbmRleCBhNDQzNjg3MzdiMzlhLi5hZDZiY2NiZGZhYmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3JjdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZpcnRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIGVudW0gcnByb2NfZmVhdHVyZXMgewogICogQHJ2ZGV2czogbGlzdCBvZiByZW1vdGUgdmlydGlvIGRldmljZXMKICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZQogICogQG5vdGlmeWlkczogaWRyIGZvciBkeW5hbWljYWxseSBhc3NpZ25pbmcgcnByb2Mtd2lkZSB1bmlxdWUgbm90aWZ5IGlkcwomIzQzOyAqIEB2cV9zcmN1OiBTUkNVIGRvbWFpbiBmb3IgdmlydHF1ZXVlIGNhbGxiYWNrcwogICogQGluZGV4OiBpbmRleCBvZiB0aGlzIHJwcm9jIGRldmljZQogICogQGF0dGFjaF93b3JrOiB3b3JrcXVldWUgZm9yIGF0dGFjaGluZyBycHJvYwogICogQGNyYXNoX2hhbmRsZXI6IHdvcmtxdWV1ZSBmb3IgaGFuZGxpbmcgYSBjcmFzaApAQCAtMjc2LDYgJiM0MzsyNzgsNyBAQCBzdHJ1Y3QgcnByb2MgewogCXN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzOwogCXN0cnVjdCBsaXN0X2hlYWQgc3ViZGV2czsKIAlzdHJ1Y3QgaWRyIG5vdGlmeWlkczsKJiM0MzsJc3RydWN0IHNyY3Vfc3RydWN0IHZxX3NyY3U7CiAJaW50IGluZGV4OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3Jhc2hfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKaW5kZXggNjlmODRlYTg1ZDcxYS4uODY4NGExZTI2OGVlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKQEAgLTcxLDkgJiM0Mzs3MSw5IEBAIHN0cnVjdCB2aXJ0cXVldWVfaW5mbyB7CiAgKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvciBzdGF0dXMKICAqIEBkZWxfdnFzOiBmcmVlIHZpcnRxdWV1ZXMgZm91bmQgYnkgZmluZF92cXMoKS4KICAqIEBzeW5jaHJvbml6ZV9jYnM6IHN5bmNocm9uaXplIHdpdGggdGhlIHZpcnRxdWV1ZSBjYWxsYmFja3MgKG9wdGlvbmFsKQotICogICAgICBUaGUgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGUKLSAqICAgICAgcXVldWUgYmVmb3JlIGl0IGFyZSB2aXNpYmxlIHRvIHRoZSB2cmluZ19pbnRlcnJ1cHQoKSB0aGF0IGlzCi0gKiAgICAgIGNhbGxlZCBhZnRlciBpdC4KJiM0MzsgKiAgICAgIFdhaXQgZm9yIHJ1bm5pbmcgY2FsbGJhY2tzIHRvIGNvbXBsZXRlLiBNZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGUKJiM0MzsgKiAgICAgIHF1ZXVlIGJlZm9yZSB0aGlzIGNhbGwgbXVzdCBiZSB2aXNpYmxlIHRvIHZyaW5nX2ludGVycnVwdCgpIGNhbGxzCiYjNDM7ICogICAgICB0aGF0IGZvbGxvdyBpdC4KICAqICAgICAgdmRldjogdGhlIHZpcnRpb19kZXZpY2UKICAqIEBnZXRfZmVhdHVyZXM6IGdldCB0aGUgYXJyYXkgb2YgZmVhdHVyZSBiaXRzIGZvciB0aGlzIGRldmljZS4KICAqCXZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQzCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDE1MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0aW8gU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZml4IGZvciB0aGUgdmlydGlvIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGRldmljZSByZXNldCwgc2h1dGRvd24sIGFuZCByZW1vdmFsIHNjZW5hcmlvcy4gSXQgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHZhcmlldHkgb2YgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gdmlydHF1ZXVlIGNhbGxiYWNrcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCBkZXZpY2UgbGlmZWN5Y2xlIGV2ZW50cy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgYXJlYXM6CgoxLiAgYGFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNgOiBUaGlzIGFkZHMgYSBgdnVfc3luY2hyb25pemVfY2JzYCBjYWxsYmFjayB3aGljaCBjYWxscyBgc3luY2hyb25pemVfaXJxYC4gU3RyYWlnaHRmb3J3YXJkIElSUSBzeW5jaHJvbml6YXRpb24uCjIuICBgZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY2A6ICBUaGlzIG9uZSBhZGRzIGBtbHhiZl90bWZpZm9fdmlydGlvX3N5bmNocm9uaXplX2Nic2AgdGhhdCB0YWtlcyBhbmQgcmVsZWFzZXMgc3BpbmxvY2tzLiBTZWVtcyBsaWtlIHN0YW5kYXJkIHNwaW5sb2NrIHVzYWdlIHdpdGhpbiB0aGlzIGRyaXZlci4KMy4gIGBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNgLCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oYDogIFRoZSByZW1vdGVwcm9jIGNoYW5nZXMgYXJlIGludGVyZXN0aW5nLiBJdCBpbnRyb2R1Y2VzIGFuIGBzcmN1X3N0cnVjdGAgKGB2cV9zcmN1YCkgdG8gdGhlIGBycHJvY2Agc3RydWN0dXJlLCBpbml0aWFsaXppbmcgYW5kIGNsZWFuaW5nIGl0IHVwIGFwcHJvcHJpYXRlbHkuICBJdCB1c2VzIGBzcmN1X3JlYWRfbG9ja2AvYHVubG9ja2Agd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYWRkcyBhIGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYCB0aGF0IGNhbGxzIGBzeW5jaHJvbml6ZV9zcmN1YC4gVGhpcyBpcyBhIGNsYXNzaWMgU1JDVSB1c2FnZSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByZWFkcyBkdXJpbmcgcmVzZXQuCjQuICBgZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNgOiAgU29tZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnNgIGNoZWNrLCBhbmQgdGhlIHJlbW92YWwgb2YgYSBgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OYCBndWFyZCBhcm91bmQgc29tZSBsb2NraW5nLiAgSXQmIzM5O3MgbGlrZWx5IHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IHN5bmNocm9uaXphdGlvbiBsb2dpYyBnaXZlbiB0aGUgb3RoZXIgY2hhbmdlcy4KNS4gIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW8uY2A6ICBUaGUgY29yZSBjaGFuZ2UgaGVyZTogYWRkcyBhIGNhbGwgdG8gYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIHdpdGhpbiBgdmlydGlvX3Jlc2V0X2RldmljZWAgYW5kIGB2aXJ0aW9fZGV2aWNlX3NodXRkb3duYC4gVGhpcyBpcyB0aGUgaG9vayBmb3IgYWxsIHRoZSBvdGhlciBkcml2ZXJzIHRvIHJlZ2lzdGVyIHRoZWlyIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMuCjYuICBgZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNgOiAgQ2hhbmdlcyB0byB0aGUgZXZlbnQgaGFuZGxpbmcgdG8gY2hlY2sgdGhlIGB2aS0mZ3Q7cmVhZHlgIGZsYWcgYW5kIGVuc3VyZSBgdmlydHF1ZXVlX2tpY2tgIGlzIGNhbGxlZCBpbiB0aGUgcmlnaHQgb3JkZXIgYW5kIG1vZGlmaWVzIGRldmljZSB1bnJlZ2lzdHJhdGlvbiB0byB1c2UgYHZpcnRpb19yZXNldF9kZXZpY2VgLiBUaGlzIGZpeGVzIG9yZGVyaW5nIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIGRldmljZSByZXNldCBhbmQgaGVscHMgd2l0aCBlbnN1cmluZyB3ZSBkbyBub3QgdW5yZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlIHRvbyBlYXJseS4KNy4gIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jYCAmYW1wOyBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY2A6IFJlbW92aW5nIGNhbGxzIHRvIGB2cF9zeW5jaHJvbml6ZV92ZWN0b3JzYCBiZWNhdXNlIHRoZSBuZXcgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGhhbmRsZXMgaXQuCjguICBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY2A6IEFkZHMgYW4gYHJ3bG9ja190YCB0byB0aGUgYHZpcnRpb192ZHBhX2RldmljZWAgc3RydWN0LiAgSXQgcHJvdGVjdHMgYHZyaW5nX2ludGVycnVwdGAgd2l0aGluIGB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JgIHVzaW5nIGByZWFkX2xvY2tfaXJxc2F2ZWAvYHJlYWRfdW5sb2NrX2lycXJlc3RvcmVgIGFuZCBpbXBsZW1lbnRzIGB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNgIHVzaW5nIGB3cml0ZV9sb2NrX2lycWAvYHdyaXRlX3VubG9ja19pcnFgLiBTdGFuZGFyZCByZWFkLXdyaXRlIGxvY2sgdG8gbWFrZSBzdXJlIGNhbGxiYWNrcyBzeW5jaHJvbml6ZS4KOS4gIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGA6ICBBIHNpbXBsZSBjb21tZW50IHVwZGF0ZS4KCk5vdywgZnJvbSBhIHNhZmV0eSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBpbXBvcnRhbnQ6IHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFib3V0ICpzeW5jaHJvbml6YXRpb24qLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBkaXJlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS4gSXTigJlzIGFsbCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIElSUSBzeW5jaHJvbml6YXRpb24uCgpTbywgZG9lcyBpdCBuZWVkIEtNU0FOPyBObywgYmVjYXVzZSBLTVNBTiBpcyBiZXN0IHN1aXRlZCB0byBmaW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmlza3MgaGVyZSBhcmUgS0FTQU4vTE9DS0RFUCByZWxhdGVkLCBpbiB0aGF0IEtBU0FOIGRldGVjdHMgdGhlIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUsIHdoaWxlIExPQ0tERVAgZGV0ZWN0cyB0aGUgbG9ja2luZyBpc3N1ZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKSGVyZSYjMzk7cyBteSByZWFzb25pbmcgZm9yIHRoZSBgS01TQU5SZWFzb25pbmdgOgoKJmd0OyBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gdmlydGlvIGRldmljZSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlc2V0LCBzaHV0ZG93biwgYW5kIHRlYXJkb3duIGFjcm9zcyB2YXJpb3VzIHZpcnRpbyB0cmFuc3BvcnRzIGFuZCBzdWJzeXN0ZW1zIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpLiBJdCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvbgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGNhbGxiYWNrIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIChzeW5jaHJvbml6ZV9jYnMpIGFjcm9zcyB2YXJpb3VzIFZpcnRJTyB0cmFuc3BvcnRzIGFuZCBkcml2ZXJzIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpIHRvIGVuc3VyZSB0aGF0IHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyBjb21wbGV0ZSBiZWZvcmUgdmlydGlvIGRldmljZSByZXNldCwgc2h1dGRvd24sIG9yIHVucmVnaXN0cmF0aW9uLlxuXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxuMS4gU3luY2hyb25pemF0aW9uIGFuZCBDb25jdXJyZW5jeTogVGhlIGNoYW5nZXMgYWRkIFNSQ1UgKGB2cV9zcmN1YCksIHJ3bG9ja3MgKGBjYWxsYmFja19sb2NrYCksIHNwaW5sb2NrIGZsdXNoZXMsIGFuZCBJUlEgc3luY2hyb25pemF0aW9uIHRvIGVsaW1pbmF0ZSByYWNlcyB3aGVyZSB2aXJ0cXVldWUgY2FsbGJhY2tzIGV4ZWN1dGUgY29uY3VycmVudGx5IGR1cmluZyB0ZWFyZG93bi5cbjIuIEZhaWx1cmUgTW9kZXM6IFBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgaW52b2x2ZSBsb2NraW5nIGlzc3VlcyAoZS5nLiwgZGVhZGxvY2tzLCBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dCkgb3IgdXNlLWFmdGVyLWZyZWUvcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxuXG5Db25zZXF1ZW50bHksIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGZ1enppbmcgYnVpbGRzIGFyZSBmdWxseSBhZGVxdWF0ZSB0byB0ZXN0IHRoZXNlIGNoYW5nZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cblxuS2V5IHBvaW50cyByZWdhcmRpbmcgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTpcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCB0b3VjaCB1c2VyLWNvcHkgYm91bmRhcmllcyBvciBuZXRsaW5rL2lvY3RsIG91dHB1dCBidWZmZXJzLCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgYWxsIG5ldyBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAoYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS5cblxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzowOC4xOTg2ODMyMzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzUxNzc1MDU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUSU9cIixcbiAgICBcIlZJUlRJT19QQ0lcIixcbiAgICBcIlZJUlRJT19WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWSVJUSU9fSU5QVVRcIixcbiAgICBcIlJFTU9URVBST0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0aW9fcmVzZXRfZGV2aWNlXCIsXG4gICAgXCJ2aXJ0aW9fZGV2aWNlX3NodXRkb3duXCIsXG4gICAgXCJ2aXJ0aW5wdXRfcmVjdl9ldmVudHNcIixcbiAgICBcInZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYlwiLFxuICAgIFwidmlydGlvX3ZkcGFfc3luY2hyb25pemVfY2JzXCIsXG4gICAgXCJycHJvY192cV9pbnRlcnJ1cHRcIixcbiAgICBcInJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnNcIixcbiAgICBcInJwcm9jX2FsbG9jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cXG5cXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXFxuMi4gRmFpbHVyZSBNb2RlczogUG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBpbnZvbHZlIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBkZWFkbG9ja3MsIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KSBvciB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxcblxcbkNvbnNlcXVlbnRseSwgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZnV6emluZyBidWlsZHMgYXJlIGZ1bGx5IGFkZXF1YXRlIHRvIHRlc3QgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MDguMTk4Njg3NDE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyNTM1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzVjMDgzMTZiNjNkYTkyMzExYjZjY2Y4ZWNjY2MwNGJiMDk5Y2RmNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXFxuaW5kZXggNzQyNWE4NTQ4MTQxYS4uYmFjYTZiMDllOWFjMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXFxuKysrIGIvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICAqXFxuICAqIEJhc2VkIG9uIFZpcnRpbyBNTUlPIGRyaXZlciBieSBQYXdlbCBNb2xsLCBjb3B5cmlnaHQgMjAxMS0yMDE0LCBBUk0gTHRkLlxcbiAgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuQEAgLTg2OSw2ICs4NzAsMTQgQEAgc3RhdGljIHZvaWQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuIFxcdHZ1X2Rldi1cXHUwMDNlc3RhdHVzID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdnVfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7XFxuK1xcbitcXHRpZiAodnVfZGV2LVxcdTAwM2VpcnEgXFx1MDAzZT0gMClcXG4rXFx0XFx0c3luY2hyb25pemVfaXJxKHZ1X2Rldi1cXHUwMDNlaXJxKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxcbiB7XFxuIFxcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cXHUwMDNlcHJpdjtcXG5AQCAtMTEyMSw2ICsxMTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdW1sX2NvbmZpZ19vcHMgPSB7XFxuIFxcdC5yZXNldCA9IHZ1X3Jlc2V0LFxcbiBcXHQuZmluZF92cXMgPSB2dV9maW5kX3ZxcyxcXG4gXFx0LmRlbF92cXMgPSB2dV9kZWxfdnFzLFxcbitcXHQuc3luY2hyb25pemVfY2JzID0gdnVfc3luY2hyb25pemVfY2JzLFxcbiBcXHQuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLFxcbiBcXHQuZmluYWxpemVfZmVhdHVyZXMgPSB2dV9maW5hbGl6ZV9mZWF0dXJlcyxcXG4gXFx0LmJ1c19uYW1lID0gdnVfYnVzX25hbWUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMgYi9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jXFxuaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jXFxuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xcbkBAIC0xMTM1LDYgKzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gXFx0dG1fdmRldi1cXHUwMDNlc3RhdHVzID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XFxuK1xcdHN0cnVjdCBtbHhiZl90bWZpZm8gKmZpZm8gPSB0bV92ZGV2LVxcdTAwM2V2cmluZ3NbMF0uZmlmbztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmaWZvLVxcdTAwM2VzcGluX2xvY2spOyBpKyspIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmZpZm8tXFx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmaWZvLVxcdTAwM2VzcGluX2xvY2tbaV0sIGZsYWdzKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXFxuIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcXG5AQCAtMTE3OSw2ICsxMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyBtbHhiZl90bWZpZm9fdmlydGlvX2NvbmZpZ19vcHMgPSB7XFxuIFxcdC5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsXFxuIFxcdC5kZWxfdnFzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19kZWxfdnFzLFxcbiBcXHQucmVzZXQgPSBtbHhiZl90bWZpZm9fdmlydGlvX3Jlc2V0LFxcbitcXHQuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXFxuIFxcdC5zZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zZXRfc3RhdHVzLFxcbiBcXHQuZ2V0X3N0YXR1cyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0X3N0YXR1cyxcXG4gXFx0LmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNcXG5pbmRleCAxZWQ0MDY3MTQ4NDkxLi4xYjEzOWQyNWFiMmJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xcbkBAIC0yNDEwLDYgKzI0MTAsNyBAQCBzdGF0aWMgdm9pZCBycHJvY190eXBlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXG4gXFx0ZGV2X2luZm8oXFx1MDAyNnJwcm9jLVxcdTAwM2VkZXYsIFxcXCJyZWxlYXNpbmcgJXNcXFxcblxcXCIsIHJwcm9jLVxcdTAwM2VuYW1lKTtcXG4gXFxuK1xcdGNsZWFudXBfc3JjdV9zdHJ1Y3QoXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KTtcXG4gXFx0aWRyX2Rlc3Ryb3koXFx1MDAyNnJwcm9jLVxcdTAwM2Vub3RpZnlpZHMpO1xcbiBcXG4gXFx0aWYgKHJwcm9jLVxcdTAwM2VpbmRleCBcXHUwMDNlPSAwKVxcbkBAIC0yNTA3LDYgKzI1MDgsMTEgQEAgc3RydWN0IHJwcm9jICpycHJvY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdGlmICghcnByb2MpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KSkge1xcbitcXHRcXHRrZnJlZShycHJvYyk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRycHJvYy1cXHUwMDNlcHJpdiA9IFxcdTAwMjZycHJvY1sxXTtcXG4gXFx0cnByb2MtXFx1MDAzZWF1dG9fYm9vdCA9IHRydWU7XFxuIFxcdHJwcm9jLVxcdTAwM2VlbGZfY2xhc3MgPSBFTEZDTEFTU05PTkU7XFxuQEAgLTI1NzEsNiArMjU3Nyw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfYWxsb2MpO1xcbiAgKlxcbiAgKiBJZiBubyBvbmUgaG9sZHMgYW55IHJlZmVyZW5jZSB0byBycHJvYyBhbnltb3JlLCB0aGVuIGl0cyByZWZjb3VudCB3b3VsZFxcbiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuXFxuKyAqXFxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCBpZiB0aGlzIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZS5cXG4gICovXFxuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxcbiB7XFxuQEAgLTI1ODYsNiArMjU5NCw4IEBAIEVYUE9SVF9TWU1CT0wocnByb2NfZnJlZSk7XFxuICAqXFxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXFxuICAqIG5vdyBkcm9wIHRvIHplcm8sIGFuZCBpdCB3b3VsZCBiZSBmcmVlZC5cXG4rICpcXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxcbiAgKi9cXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcXG4ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXFxuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xcbisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3JjdS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInJlbW90ZXByb2NfaW50ZXJuYWwuaFxcXCJcXG4gXFxuQEAgLTg5LDE0ICs5MCwxOSBAQCBzdGF0aWMgYm9vbCBycHJvY192aXJ0aW9fbm90aWZ5KHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxcbiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKVxcbiB7XFxuIFxcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xcbitcXHRpbnQgc3JjdV9pZHg7XFxuK1xcdGlycXJldHVybl90IHJldDtcXG4rXFxuK1xcdHNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KTtcXG4gXFxuIFxcdGRldl9kYmcoXFx1MDAyNnJwcm9jLVxcdTAwM2VkZXYsIFxcXCJ2cSBpbmRleCAlZCBpcyBpbnRlcnJ1cHRlZFxcXFxuXFxcIiwgbm90aWZ5aWQpO1xcbiBcXG4gXFx0cnZyaW5nID0gaWRyX2ZpbmQoXFx1MDAyNnJwcm9jLVxcdTAwM2Vub3RpZnlpZHMsIG5vdGlmeWlkKTtcXG4tXFx0aWYgKCFydnJpbmcgfHwgIXJ2cmluZy1cXHUwMDNldnEpXFxuLVxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFx0cmV0ID0gcnZyaW5nIFxcdTAwMjZcXHUwMDI2IHJ2cmluZy1cXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVxcdTAwM2V2cSkgOiBJUlFfTk9ORTtcXG4rXFxuK1xcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XFxuIFxcbi1cXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cXHUwMDNldnEpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocnByb2NfdnFfaW50ZXJydXB0KTtcXG4gXFxuQEAgLTI0Miw2ICsyNDgsMTMgQEAgc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRkZXZfZGJnKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIFxcXCJyZXNldCAhXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTtcXG4rXFxuK1xcdHN5bmNocm9uaXplX3NyY3UoXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1KTtcXG4rfVxcbitcXG4gLyogcHJvdmlkZSB0aGUgdmRldiBmZWF0dXJlcyBhcyByZXRyaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUgKi9cXG4gc3RhdGljIHU2NCBycHJvY192aXJ0aW9fZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiB7XFxuQEAgLTMzMCw2ICszNDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHJwcm9jX3ZpcnRpb19jb25maWdfb3BzID0ge1xcbiBcXHQuZmluZF92cXNcXHQ9IHJwcm9jX3ZpcnRpb19maW5kX3ZxcyxcXG4gXFx0LmRlbF92cXNcXHQ9IHJwcm9jX3ZpcnRpb19kZWxfdnFzLFxcbiBcXHQucmVzZXRcXHRcXHQ9IHJwcm9jX3ZpcnRpb19yZXNldCxcXG4rXFx0LnN5bmNocm9uaXplX2NicyA9IHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXFxuIFxcdC5zZXRfc3RhdHVzXFx0PSBycHJvY192aXJ0aW9fc2V0X3N0YXR1cyxcXG4gXFx0LmdldF9zdGF0dXNcXHQ9IHJwcm9jX3ZpcnRpb19nZXRfc3RhdHVzLFxcbiBcXHQuZ2V0XFx0XFx0PSBycHJvY192aXJ0aW9fZ2V0LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXFxuaW5kZXggYmFiNmNhZDNmZDVjZS4uNTUyZDc3OTk4MDEyOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuY1xcbisrKyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXFxuQEAgLTEwNjIsNyArMTA2Miw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlycV9pbmZvICppbmZvID0gdmNkZXYtXFx1MDAzZWFpcnFfaW5mbztcXG4gXFxuLVxcdGlmIChpbmZvKSB7XFxuK1xcdGlmICh2Y2Rldi1cXHUwMDNlaXNfdGhpbmludCBcXHUwMDI2XFx1MDAyNiBpbmZvKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoaXMgZGV2aWNlIHVzZXMgYWRhcHRlciBpbnRlcnJ1cHRzOiBzeW5jaHJvbml6ZSB3aXRoXFxuIFxcdFxcdCAqIHZyaW5nX2ludGVycnVwdCgpIGNhbGxlZCBieSB2aXJ0aW9fYWlycV9oYW5kbGVyKClcXG5AQCAtMTIwNCwxMyArMTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxcbiBcXHRcXHRcXHR2Y2Rldi1cXHUwMDNlZXJyID0gLUVJTztcXG4gXFx0fVxcbiBcXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XFxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4gXFx0LypcXG4gXFx0ICogUGFpcmVkIHdpdGggdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoKSBhbmQgaW50ZXJydXB0cyBhcmVcXG4gXFx0ICogZGlzYWJsZWQgaGVyZS5cXG4gXFx0ICovXFxuIFxcdHJlYWRfbG9jayhcXHUwMDI2dmNkZXYtXFx1MDAzZWlycV9sb2NrKTtcXG4tI2VuZGlmXFxuIFxcdGZvcl9lYWNoX3NldF9iaXQoaSwgaW5kaWNhdG9ycyh2Y2RldiksXFxuIFxcdFxcdFxcdCBzaXplb2YoKmluZGljYXRvcnModmNkZXYpKSAqIEJJVFNfUEVSX0JZVEUpIHtcXG4gXFx0XFx0LyogVGhlIGJpdCBjbGVhciBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIHZyaW5nIGtpY2suICovXFxuQEAgLTEyMTksOSArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsXFxuIFxcdFxcdHZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpO1xcbiBcXHRcXHR2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xcbiBcXHR9XFxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cXG4gXFx0cmVhZF91bmxvY2soXFx1MDAyNnZjZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuLSNlbmRpZlxcbiBcXHRpZiAodGVzdF9iaXQoMCwgaW5kaWNhdG9yczIodmNkZXYpKSkge1xcbiBcXHRcXHR2aXJ0aW9fY29uZmlnX2NoYW5nZWQoXFx1MDAyNnZjZGV2LVxcdTAwM2V2ZGV2KTtcXG4gXFx0XFx0Y2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcXG5pbmRleCA3NWJiNGZmZTNiODc3Li5hZDFjNTBiOGE5NGVjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jXFxuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvLmNcXG5AQCAtMjY0LDYgKzI2NCw3IEBAIHZvaWQgdmlydGlvX3Jlc2V0X2RldmljZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxcbiAjZW5kaWZcXG4gXFxuIFxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbitcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XFxuIFxcbkBAIC00MjQsNiArNDI1LDcgQEAgdm9pZCB2aXJ0aW9fZGV2aWNlX3NodXRkb3duKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuIFxcdCAqIFNvbWUgZGV2aWNlcyBnZXQgd2VkZ2VkIGlmIHRoaXMgaGFwcGVucywgc28gcmVzZXQgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90LlxcbiBcXHQgKi9cXG4gXFx0ZGV2LVxcdTAwM2Vjb25maWctXFx1MDAzZXJlc2V0KGRldik7XFxuK1xcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fZGV2aWNlX3NodXRkb3duKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNcXG5pbmRleCBkZWVjMjRlOGU2ODI4Li43YjY1NGFmMGE0MmNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXFxuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmNcXG5AQCAtNDksOSArNDksMTIgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlY3ZfZXZlbnRzKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxcbiBcXHRcXHRcXHRcXHQgICAgbGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZWNvZGUpLFxcbiBcXHRcXHRcXHRcXHQgICAgbGUzMl90b19jcHUoZXZlbnQtXFx1MDAzZXZhbHVlKSk7XFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAoIXZpLVxcdTAwM2VyZWFkeSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHZpcnRpbnB1dF9xdWV1ZV9ldnRidWYodmksIGV2ZW50KTtcXG4gXFx0XFx0fVxcbi1cXHRcXHR2aXJ0cXVldWVfa2ljayh2cSk7XFxuK1xcdFxcdGlmICh2aS1cXHUwMDNlcmVhZHkpXFxuK1xcdFxcdFxcdHZpcnRxdWV1ZV9raWNrKHZxKTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiB9XFxuQEAgLTM1MCw4ICszNTMsOSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHR2aS1cXHUwMDNlcmVhZHkgPSBmYWxzZTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVxcdTAwM2VpZGV2KTtcXG4rXFx0LyogQ2FsbGJhY2tzIHVzZSB2aS1cXHUwMDNlaWRldi4gKi9cXG4gXFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4rXFx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXFx1MDAzZWlkZXYpO1xcbiBcXHR3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2aS1cXHUwMDNlc3RzKSkgIT0gTlVMTClcXG4gXFx0XFx0a2ZyZWUoYnVmKTtcXG4gXFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xcbmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY1xcbisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNcXG5AQCAtOTgsOCArOTgsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gXFx0LyogRmx1c2ggb3V0IHRoZSBzdGF0dXMgd3JpdGUsIGFuZCBmbHVzaCBpbiBkZXZpY2Ugd3JpdGVzLFxcbiBcXHQgKiBpbmNsdWRpbmcgTVNpLVggaW50ZXJydXB0cywgaWYgYW55LiAqL1xcbiBcXHR2cF9sZWdhY3lfZ2V0X3N0YXR1cyhcXHUwMDI2dnBfZGV2LVxcdTAwM2VsZGV2KTtcXG4tXFx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cXG4tXFx0dnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xcbmluZGV4IDZkOGFlMmE2YThjYWYuLmM5ZTIxMzE3YzUxYTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xcbisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmNcXG5AQCAtNTU5LDkgKzU1OSw2IEBAIHN0YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRcXHRtc2xlZXAoMSk7XFxuIFxcbiBcXHR2cF9tb2Rlcm5fYXZxX2NsZWFudXAodmRldik7XFxuLVxcbi1cXHQvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqL1xcbi1cXHR2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZwX2FjdGl2ZV92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdTE2IG1zaXhfdmVjKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY1xcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiBzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlIHtcXG4gXFx0c3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjtcXG4gXFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhO1xcbitcXHRyd2xvY2tfdCBjYWxsYmFja19sb2NrO1xcbiBcXHR1NjQgZmVhdHVyZXM7XFxuIH07XFxuIFxcbkBAIC0xMjMsOCArMTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcXG4gc3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX3ZpcnRxdWV1ZV9jYih2b2lkICpwcml2YXRlKVxcbiB7XFxuIFxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpcnFyZXR1cm5fdCByZXQ7XFxuIFxcbi1cXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHZxKTtcXG4rXFx0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVxcdTAwM2V2ZGV2KTtcXG4rXFx0cmVhZF9sb2NrX2lycXNhdmUoXFx1MDAyNnZkX2Rldi1cXHUwMDNlY2FsbGJhY2tfbG9jaywgZmxhZ3MpO1xcbitcXHRyZXQgPSB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xcbitcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgdmlydGlvX3ZkcGFfZGV2aWNlICp2ZF9kZXYgPSB0b192aXJ0aW9fdmRwYV9kZXZpY2UodmRldik7XFxuK1xcbitcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrKTtcXG4rXFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKlxcbkBAIC00MzksNiArNDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xcbiBcXHQucmVzZXRcXHRcXHQ9IHZpcnRpb192ZHBhX3Jlc2V0LFxcbiBcXHQuZmluZF92cXNcXHQ9IHZpcnRpb192ZHBhX2ZpbmRfdnFzLFxcbiBcXHQuZGVsX3Zxc1xcdD0gdmlydGlvX3ZkcGFfZGVsX3ZxcyxcXG4rXFx0LnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyxcXG4gXFx0LmdldF9mZWF0dXJlc1xcdD0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLFxcbiBcXHQuZmluYWxpemVfZmVhdHVyZXMgPSB2aXJ0aW9fdmRwYV9maW5hbGl6ZV9mZWF0dXJlcyxcXG4gXFx0LmJ1c19uYW1lXFx0PSB2aXJ0aW9fdmRwYV9idXNfbmFtZSxcXG5AQCAtNDcyLDYgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxcbiBcXHR2ZF9kZXYtXFx1MDAzZXZkZXYuY29uZmlnID0gXFx1MDAyNnZpcnRpb192ZHBhX2NvbmZpZ19vcHM7XFxuIFxcdHZkX2Rldi1cXHUwMDNldmRldi5tYXAgPSB2ZHBhLVxcdTAwM2VtYXA7XFxuIFxcdHZkX2Rldi1cXHUwMDNldmRwYSA9IHZkcGE7XFxuK1xcdHJ3bG9ja19pbml0KFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZWNhbGxiYWNrX2xvY2spO1xcbiBcXG4gXFx0dmRfZGV2LVxcdTAwM2V2ZGV2LmlkLmRldmljZSA9IG9wcy1cXHUwMDNlZ2V0X2RldmljZV9pZCh2ZHBhKTtcXG4gXFx0aWYgKHZkX2Rldi1cXHUwMDNldmRldi5pZC5kZXZpY2UgPT0gMClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxcbmluZGV4IGE0NDM2ODczN2IzOWEuLmFkNmJjY2JkZmFiYzAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcmN1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92aXJ0aW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG5AQCAtMjMwLDYgKzIzMSw3IEBAIGVudW0gcnByb2NfZmVhdHVyZXMge1xcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xcbiAgKiBAc3ViZGV2czogbGlzdCBvZiBzdWJkZXZpY2VzLCB0byBmb2xsb3dpbmcgdGhlIHJ1bm5pbmcgc3RhdGVcXG4gICogQG5vdGlmeWlkczogaWRyIGZvciBkeW5hbWljYWxseSBhc3NpZ25pbmcgcnByb2Mtd2lkZSB1bmlxdWUgbm90aWZ5IGlkc1xcbisgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3NcXG4gICogQGluZGV4OiBpbmRleCBvZiB0aGlzIHJwcm9jIGRldmljZVxcbiAgKiBAYXR0YWNoX3dvcms6IHdvcmtxdWV1ZSBmb3IgYXR0YWNoaW5nIHJwcm9jXFxuICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2hcXG5AQCAtMjc2LDYgKzI3OCw3IEBAIHN0cnVjdCBycHJvYyB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRldnM7XFxuIFxcdHN0cnVjdCBpZHIgbm90aWZ5aWRzO1xcbitcXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcXG4gXFx0aW50IGluZGV4O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXR0YWNoX3dvcms7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oXFxuaW5kZXggNjlmODRlYTg1ZDcxYS4uODY4NGExZTI2OGVlMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oXFxuQEAgLTcxLDkgKzcxLDkgQEAgc3RydWN0IHZpcnRxdWV1ZV9pbmZvIHtcXG4gICpcXHRSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvciBzdGF0dXNcXG4gICogQGRlbF92cXM6IGZyZWUgdmlydHF1ZXVlcyBmb3VuZCBieSBmaW5kX3ZxcygpLlxcbiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbClcXG4tICogICAgICBUaGUgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGVcXG4tICogICAgICBxdWV1ZSBiZWZvcmUgaXQgYXJlIHZpc2libGUgdG8gdGhlIHZyaW5nX2ludGVycnVwdCgpIHRoYXQgaXNcXG4tICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuXFxuKyAqICAgICAgV2FpdCBmb3IgcnVubmluZyBjYWxsYmFja3MgdG8gY29tcGxldGUuIE1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZVxcbisgKiAgICAgIHF1ZXVlIGJlZm9yZSB0aGlzIGNhbGwgbXVzdCBiZSB2aXNpYmxlIHRvIHZyaW5nX2ludGVycnVwdCgpIGNhbGxzXFxuKyAqICAgICAgdGhhdCBmb2xsb3cgaXQuXFxuICAqICAgICAgdmRldjogdGhlIHZpcnRpb19kZXZpY2VcXG4gICogQGdldF9mZWF0dXJlczogZ2V0IHRoZSBhcnJheSBvZiBmZWF0dXJlIGJpdHMgZm9yIHRoaXMgZGV2aWNlLlxcbiAgKlxcdHZkZXY6IHRoZSB2aXJ0aW9fZGV2aWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjA5Ljc0MzA2MTE1NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTA1ODQ0NDIyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVElPXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJWSVJUSU9fVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVklSVElPX0lOUFVUXCIsXG4gICAgXCJSRU1PVEVQUk9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydGlvX3Jlc2V0X2RldmljZVwiLFxuICAgIFwidmlydGlvX2RldmljZV9zaHV0ZG93blwiLFxuICAgIFwidmlydGlucHV0X3JlY3ZfZXZlbnRzXCIsXG4gICAgXCJ2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JcIixcbiAgICBcInZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic1wiLFxuICAgIFwicnByb2NfdnFfaW50ZXJydXB0XCIsXG4gICAgXCJycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzXCIsXG4gICAgXCJycHJvY19hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duIGhhbmRsaW5nIGFjcm9zcyBjb3JlIHZpcnRpbywgdmlydGlvLWlucHV0LCB2aXJ0aW8tdmRwYSwgYW5kIHJlbW90ZXByb2MgdG8gcHJvcGVybHkgc3luY2hyb25pemUgcnVubmluZyB2aXJ0cXVldWUgY2FsbGJhY2tzIHVzaW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChTUkNVIGluIHJlbW90ZXByb2MsIHJ3bG9jayBpbiB2aXJ0aW9fdmRwYSwgYW5kIHN5bmNocm9uaXplX2NicyBpbiB2aXJ0aW8gY29yZSkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsIGJ1cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNcbmluZGV4IDc0MjVhODU0ODE0MWEuLmJhY2E2YjA5ZTlhYzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG4rKysgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICAqXG4gICogQmFzZWQgb24gVmlydGlvIE1NSU8gZHJpdmVyIGJ5IFBhd2VsIE1vbGwsIGNvcHlyaWdodCAyMDExLTIwMTQsIEFSTSBMdGQuXG4gICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuQEAgLTg2OSw2ICs4NzAsMTQgQEAgc3RhdGljIHZvaWQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHR2dV9kZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdnVfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuK3tcbitcdHN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7XG4rXG4rXHRpZiAodnVfZGV2LVx1MDAzZWlycSBcdTAwM2U9IDApXG4rXHRcdHN5bmNocm9uaXplX2lycSh2dV9kZXYtXHUwMDNlaXJxKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cdTAwM2Vwcml2O1xuQEAgLTExMjEsNiArMTEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3VtbF9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0ID0gdnVfcmVzZXQsXG4gXHQuZmluZF92cXMgPSB2dV9maW5kX3ZxcyxcbiBcdC5kZWxfdnFzID0gdnVfZGVsX3ZxcyxcbitcdC5zeW5jaHJvbml6ZV9jYnMgPSB2dV9zeW5jaHJvbml6ZV9jYnMsXG4gXHQuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdnVfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWUgPSB2dV9idXNfbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jIGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbkBAIC0xMTM1LDYgKzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHRtX3ZkZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XG4rXHRzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvID0gdG1fdmRldi1cdTAwM2V2cmluZ3NbMF0uZmlmbztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmlmby1cdTAwM2VzcGluX2xvY2spOyBpKyspIHtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmlmby1cdTAwM2VzcGluX2xvY2tbaV0sIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuK1x0fVxuK31cbitcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXG4gc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcbkBAIC0xMTc5LDYgKzExOTIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIG1seGJmX3RtZmlmb192aXJ0aW9fY29uZmlnX29wcyA9IHtcbiBcdC5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsXG4gXHQuZGVsX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZGVsX3ZxcyxcbiBcdC5yZXNldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXG4gXHQuc2V0X3N0YXR1cyA9IG1seGJmX3RtZmlmb192aXJ0aW9fc2V0X3N0YXR1cyxcbiBcdC5nZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfc3RhdHVzLFxuIFx0LmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuaW5kZXggMWVkNDA2NzE0ODQ5MS4uMWIxMzlkMjVhYjJiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG5AQCAtMjQxMCw2ICsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCJyZWxlYXNpbmcgJXNcXG5cIiwgcnByb2MtXHUwMDNlbmFtZSk7XG4gXG4rXHRjbGVhbnVwX3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuIFx0aWRyX2Rlc3Ryb3koXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzKTtcbiBcbiBcdGlmIChycHJvYy1cdTAwM2VpbmRleCBcdTAwM2U9IDApXG5AQCAtMjUwNyw2ICsyNTA4LDExIEBAIHN0cnVjdCBycHJvYyAqcnByb2NfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0aWYgKCFycHJvYylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KSkge1xuK1x0XHRrZnJlZShycHJvYyk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuIFx0cnByb2MtXHUwMDNlcHJpdiA9IFx1MDAyNnJwcm9jWzFdO1xuIFx0cnByb2MtXHUwMDNlYXV0b19ib290ID0gdHJ1ZTtcbiBcdHJwcm9jLVx1MDAzZWVsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTtcbkBAIC0yNTcxLDYgKzI1NzcsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2FsbG9jKTtcbiAgKlxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXG4gICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLlxuKyAqXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxuICAqL1xuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuIHtcbkBAIC0yNTg2LDYgKzI1OTQsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2ZyZWUpO1xuICAqXG4gICogSWYgbm8gb25lIGhvbGRzIGFueSByZWZlcmVuY2UgdG8gcnByb2MgYW55bW9yZSwgdGhlbiBpdHMgcmVmY291bnQgd291bGRcbiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuXG4rICpcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuXG4gICovXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVtb3RlcHJvY19pbnRlcm5hbC5oXCJcbiBcbkBAIC04OSwxNCArOTAsMTkgQEAgc3RhdGljIGJvb2wgcnByb2NfdmlydGlvX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKVxuIHtcbiBcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xuK1x0aW50IHNyY3VfaWR4O1xuK1x0aXJxcmV0dXJuX3QgcmV0O1xuK1xuK1x0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KTtcbiBcbiBcdGRldl9kYmcoXHUwMDI2cnByb2MtXHUwMDNlZGV2LCBcInZxIGluZGV4ICVkIGlzIGludGVycnVwdGVkXFxuXCIsIG5vdGlmeWlkKTtcbiBcbiBcdHJ2cmluZyA9IGlkcl9maW5kKFx1MDAyNnJwcm9jLVx1MDAzZW5vdGlmeWlkcywgbm90aWZ5aWQpO1xuLVx0aWYgKCFydnJpbmcgfHwgIXJ2cmluZy1cdTAwM2V2cSlcbi1cdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuK1xuK1x0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XG4gXG4tXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cdTAwM2V2cSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gXG5AQCAtMjQyLDYgKzI0OCwxMyBAQCBzdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRkZXZfZGJnKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCBcInJlc2V0ICFcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHJwcm9jICpycHJvYyA9IHZkZXZfdG9fcnByb2ModmRldik7XG4rXG4rXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuK31cbitcbiAvKiBwcm92aWRlIHRoZSB2ZGV2IGZlYXR1cmVzIGFzIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZSAqL1xuIHN0YXRpYyB1NjQgcnByb2NfdmlydGlvX2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiB7XG5AQCAtMzMwLDYgKzM0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgcnByb2NfdmlydGlvX2NvbmZpZ19vcHMgPSB7XG4gXHQuZmluZF92cXNcdD0gcnByb2NfdmlydGlvX2ZpbmRfdnFzLFxuIFx0LmRlbF92cXNcdD0gcnByb2NfdmlydGlvX2RlbF92cXMsXG4gXHQucmVzZXRcdFx0PSBycHJvY192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzXHQ9IHJwcm9jX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXNcdD0gcnByb2NfdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0XHRcdD0gcnByb2NfdmlydGlvX2dldCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5pbmRleCBiYWI2Y2FkM2ZkNWNlLi41NTJkNzc5OTgwMTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNcbisrKyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5AQCAtMTA2Miw3ICsxMDYyLDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpO1xuIFx0c3RydWN0IGFpcnFfaW5mbyAqaW5mbyA9IHZjZGV2LVx1MDAzZWFpcnFfaW5mbztcbiBcbi1cdGlmIChpbmZvKSB7XG4rXHRpZiAodmNkZXYtXHUwMDNlaXNfdGhpbmludCBcdTAwMjZcdTAwMjYgaW5mbykge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIGRldmljZSB1c2VzIGFkYXB0ZXIgaW50ZXJydXB0czogc3luY2hyb25pemUgd2l0aFxuIFx0XHQgKiB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsZWQgYnkgdmlydGlvX2FpcnFfaGFuZGxlcigpXG5AQCAtMTIwNCwxMyArMTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHRcdHZjZGV2LVx1MDAzZWVyciA9IC1FSU87XG4gXHR9XG4gXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XG4tI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuIFx0LypcbiBcdCAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlXG4gXHQgKiBkaXNhYmxlZCBoZXJlLlxuIFx0ICovXG4gXHRyZWFkX2xvY2soXHUwMDI2dmNkZXYtXHUwMDNlaXJxX2xvY2spO1xuLSNlbmRpZlxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSxcbiBcdFx0XHQgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7XG4gXHRcdC8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqL1xuQEAgLTEyMTksOSArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsXG4gXHRcdHZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpO1xuIFx0XHR2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnZjZGV2LVx1MDAzZWlycV9sb2NrKTtcbi0jZW5kaWZcbiBcdGlmICh0ZXN0X2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpKSB7XG4gXHRcdHZpcnRpb19jb25maWdfY2hhbmdlZChcdTAwMjZ2Y2Rldi1cdTAwM2V2ZGV2KTtcbiBcdFx0Y2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuaW5kZXggNzViYjRmZmUzYjg3Ny4uYWQxYzUwYjhhOTRlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuQEAgLTI2NCw2ICsyNjQsNyBAQCB2b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbiAjZW5kaWZcbiBcbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XG4gXG5AQCAtNDI0LDYgKzQyNSw3IEBAIHZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuIFx0ICogU29tZSBkZXZpY2VzIGdldCB3ZWRnZWQgaWYgdGhpcyBoYXBwZW5zLCBzbyByZXNldCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QuXG4gXHQgKi9cbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX2RldmljZV9zaHV0ZG93bik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuaW5kZXggZGVlYzI0ZThlNjgyOC4uN2I2NTRhZjBhNDJjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShldmVudC1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShldmVudC1cdTAwM2V2YWx1ZSkpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHRpZiAoIXZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0dmlydGlucHV0X3F1ZXVlX2V2dGJ1Zih2aSwgZXZlbnQpO1xuIFx0XHR9XG4tXHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbitcdFx0aWYgKHZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0zNTAsOCArMzUzLDkgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHZpLVx1MDAzZXJlYWR5ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuK1x0LyogQ2FsbGJhY2tzIHVzZSB2aS1cdTAwM2VpZGV2LiAqL1xuIFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcbitcdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuIFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXHUwMDNlc3RzKSkgIT0gTlVMTClcbiBcdFx0a2ZyZWUoYnVmKTtcbiBcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNcbmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG5AQCAtOTgsOCArOTgsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdC8qIEZsdXNoIG91dCB0aGUgc3RhdHVzIHdyaXRlLCBhbmQgZmx1c2ggaW4gZGV2aWNlIHdyaXRlcyxcbiBcdCAqIGluY2x1ZGluZyBNU2ktWCBpbnRlcnJ1cHRzLCBpZiBhbnkuICovXG4gXHR2cF9sZWdhY3lfZ2V0X3N0YXR1cyhcdTAwMjZ2cF9kZXYtXHUwMDNlbGRldik7XG4tXHQvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqL1xuLVx0dnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTtcbiB9XG4gXG4gc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG5pbmRleCA2ZDhhZTJhNmE4Y2FmLi5jOWUyMTMxN2M1MWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuQEAgLTU1OSw5ICs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdFx0bXNsZWVwKDEpO1xuIFxuIFx0dnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpO1xuLVxuLVx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cbi1cdHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG5AQCAtMjcsNiArMjcsNyBAQFxuIHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2Uge1xuIFx0c3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYTtcbitcdHJ3bG9ja190IGNhbGxiYWNrX2xvY2s7XG4gXHR1NjQgZmVhdHVyZXM7XG4gfTtcbiBcbkBAIC0xMjMsOCArMTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlO1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGlycXJldHVybl90IHJldDtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuK1x0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVx1MDAzZXZkZXYpO1xuK1x0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcbitcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4rXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZkZXYpO1xuK1xuK1x0d3JpdGVfbG9ja19pcnEoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuK1x0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpcbkBAIC00MzksNiArNDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0XHRcdD0gdmlydGlvX3ZkcGFfcmVzZXQsXG4gXHQuZmluZF92cXNcdD0gdmlydGlvX3ZkcGFfZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSB2aXJ0aW9fdmRwYV9kZWxfdnFzLFxuK1x0LnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyxcbiBcdC5nZXRfZmVhdHVyZXNcdD0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdmlydGlvX3ZkcGFfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWVcdD0gdmlydGlvX3ZkcGFfYnVzX25hbWUsXG5AQCAtNDcyLDYgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuY29uZmlnID0gXHUwMDI2dmlydGlvX3ZkcGFfY29uZmlnX29wcztcbiBcdHZkX2Rldi1cdTAwM2V2ZGV2Lm1hcCA9IHZkcGEtXHUwMDNlbWFwO1xuIFx0dmRfZGV2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuK1x0cndsb2NrX2luaXQoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIFxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID0gb3BzLVx1MDAzZWdldF9kZXZpY2VfaWQodmRwYSk7XG4gXHRpZiAodmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID09IDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcmN1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92aXJ0aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuQEAgLTIzMCw2ICsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHtcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xuICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZVxuICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHNcbisgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3NcbiAgKiBAaW5kZXg6IGluZGV4IG9mIHRoaXMgcnByb2MgZGV2aWNlXG4gICogQGF0dGFjaF93b3JrOiB3b3JrcXVldWUgZm9yIGF0dGFjaGluZyBycHJvY1xuICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2hcbkBAIC0yNzYsNiArMjc4LDcgQEAgc3RydWN0IHJwcm9jIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzO1xuIFx0c3RydWN0IGlkciBub3RpZnlpZHM7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcbiBcdGludCBpbmRleDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbkBAIC03MSw5ICs3MSw5IEBAIHN0cnVjdCB2aXJ0cXVldWVfaW5mbyB7XG4gICpcdFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yIHN0YXR1c1xuICAqIEBkZWxfdnFzOiBmcmVlIHZpcnRxdWV1ZXMgZm91bmQgYnkgZmluZF92cXMoKS5cbiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbClcbi0gKiAgICAgIFRoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZVxuLSAqICAgICAgcXVldWUgYmVmb3JlIGl0IGFyZSB2aXNpYmxlIHRvIHRoZSB2cmluZ19pbnRlcnJ1cHQoKSB0aGF0IGlzXG4tICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuXG4rICogICAgICBXYWl0IGZvciBydW5uaW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4gTWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlXG4rICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsc1xuKyAqICAgICAgdGhhdCBmb2xsb3cgaXQuXG4gICogICAgICB2ZGV2OiB0aGUgdmlydGlvX2RldmljZVxuICAqIEBnZXRfZmVhdHVyZXM6IGdldCB0aGUgYXJyYXkgb2YgZmVhdHVyZSBiaXRzIGZvciB0aGlzIGRldmljZS5cbiAgKlx0dmRldjogdGhlIHZpcnRpb19kZXZpY2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjA5Ljc0MzA2MzgwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NjQ4NjI4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggU2VyaWVzIEV2YWx1YXRpb246IFZpcnRpbyBTeW5jaHJvbml6YXRpb24gb24gYW1kNjQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIGdpdmVuIHRoZSBzdGF0ZWQgdGFyZ2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGFuZCBpZiB0aGVzZSBtb2RpZmljYXRpb25zIGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGZvciB0aGUgcGxhdGZvcm0gSSdtIG1vc3QgZmFtaWxpYXIgd2l0aC5cblxuSSBzZWUgYSB2YXJpZXR5IG9mIGRyaXZlcnMgYXJlIGFmZmVjdGVkLCBzbyBsZXQncyBicmVhayB0aGlzIGRvd246XG5cbiogICBGaXJzdCwgYGFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNgIGFkZHMgYHZ1X3N5bmNocm9uaXplX2Nic2AgY2FsbGluZyBgc3luY2hyb25pemVfaXJxYC4gVGhlIFVzZXItTW9kZSBMaW51eCBwYXJ0IGlzIG5vdCByZWxldmFudCBhcyB0aGUgdGFyZ2V0IGlzIGFtZDY0LlxuKiAgIGBkcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jYCBhZGRzIGEgc3BpbmxvY2sgYW5kIHN5bmNocm9uaXphdGlvbiBpbiBNZWxsYW5veCBCbHVlRmllbGQgU29DIHNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciwgc28gdGhpcyB3b24ndCBpbXBhY3QgYW1kNjQgZWl0aGVyLlxuKiAgIFRoZSBgcmVtb3RlcHJvY2AgY2hhbmdlcyBpbnRyb2R1Y2UgYW4gYHNyY3VgIG1lY2hhbmlzbSB3aXRoIGB2cV9zcmN1YCBpbiBgcmVtb3RlcHJvY19jb3JlLmNgIGFuZCBgcmVtb3RlcHJvY192aXJ0aW8uY2AsIGFsb25nIHdpdGggYSBuZXcgYHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnNgLiBUaGlzIGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgaG93IHdpZGVzcHJlYWQgYHJlbW90ZXByb2NgIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYW1kNjQuIEknbGwgbmVlZCB0byByZXNlYXJjaCBpdHMgaW50ZWdyYXRpb24uXG4qICAgYGRyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jYCBpcyBzMzkwLXNwZWNpZmljLCBzbyBpdCdzIG5vdCByZWxldmFudCB0byBteSBldmFsdWF0aW9uLlxuKiAgIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZXJpZXMsIGl0IHNlZW1zLCBpcyBpbiBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCBjYWxsZWQgYnkgYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAgaXMgc2lnbmlmaWNhbnQuIFRoZSBmYWN0IHRoYXQgYHZpcnRpb19yZXNldF9kZXZpY2VgIGlzIHRoZSBjb3JlIHZpcnRpbyBidXMgcmVzZXQgZnVuY3Rpb24gbWVhbnMgdGhpcyBpcyBhIGNlbnRyYWwgcGllY2UuIFRoaXMgd2lsbCBpbXBhY3QgYWxsIHZpcnRpbyBkcml2ZXJzIG9uIHJlc2V0IChuZXQsIGJsaywgY29uc29sZSwgaW5wdXQsIGV0Yy4pLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIGhlcmUuXG4qICAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jYCBtb2RpZmllcyB0aGUgaW5wdXQgaGFuZGxpbmcgYW5kIGFkZHMgc3luY2hyb25pemF0aW9uIGFyb3VuZCBgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2VgIGFuZCByZWFkeW5lc3MgY2hlY2tzLiBUaGlzIGlzIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcmVzZXQgYW5kIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIGNoYW5nZXMgaW4gYHZpcnRpby5jYC5cbiogICBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuY2AgYW5kIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jYCByZW1vdmUgcmVkdW5kYW50IGNhbGxzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiwgc2ltcGxpZnlpbmcgdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IGFuIGFydGlmYWN0IG9mIHRoZSBuZXcgYHZpcnRpb19yZXNldF9kZXZpY2VgIGNhbGwuXG4qICAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNgIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIGxvY2ssIGBjYWxsYmFja19sb2NrYCwgYW5kIGNvcnJlc3BvbmRpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIFRoaXMgaXMgYW5vdGhlciBhcmVhIG9mIGNvbmNlcm4sIGFzIGludHJvZHVjaW5nIGxvY2tzIGNhbiBiZSB0cmlja3ksIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgY29udGVudGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBJUlEgY29udGV4dC5cbiogICBGaW5hbGx5LCB0aGVyZSBpcyBhIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBvbiBhbWQ2NDogYHZpcnRpb19yZXNldF9kZXZpY2VgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGJlY2F1c2UgaXQgaXMgYSBjb3JlIGZ1bmN0aW9uLiBgdmlydGlvX3ZkcGEuY2AgYW5kIGB2aXJ0aW9faW5wdXQuY2AgYXJlIGFsc28gZHJpdmVycyBJIG5lZWQgdG8gcmV2aWV3IGluIGRldGFpbCBiZWNhdXNlIG9mIHRoZWlyIGluY2x1c2lvbiBvZiBsb2Nrcy9zeW5jaHJvbml6YXRpb24uIFRoZSBgcmVtb3RlcHJvY2Agc3Vic3lzdGVtIGlzIGFub3RoZXIgYXJlYSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi4gVGhlIGB2aXJ0aW9fcGNpYCBkcml2ZXJzIGFyZSBhbHNvIGNyaXRpY2FsIGNvbXBvbmVudHMgYXMgdGhleSBhcmUgaW52b2x2ZWQgaW4gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaXMsIEknbGwgdXNlIGBnaXQgZ3JlcGAgYW5kIHJlYWQgdGhlIGNvZGUgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9ucyBhbmQgaG93IGNhbGxlcnMgaW50ZXJhY3QgaW4gdGhlIGFtZDY0IGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgY29ycmVjdGx5IHBsYWNlZCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgZGVhZGxvY2tzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHdpbGwgcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBJUlEgY29udGV4dCBzeW5jaHJvbml6YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MTcuNjA3OTMwNjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5NTIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX3N5bmNocm9uaXplX2Nic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz0yNTM9dm9pZCB2aXJ0aW9fcmVzZXRfZGV2aWNlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNTYtXFx0LypcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzoyNTc6XFx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjU4LVxcdCAqIGludGVycnVwdCBmb3IgdGhpcyBsaW5lIGFycml2aW5nIGFmdGVyXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy0yNjItXFx0dmlydGlvX2JyZWFrX2RldmljZShkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjI2MzpcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjY0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjY2LVxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjI2NzpcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtMjY4LX1cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQxMj12b2lkIHZpcnRpb19kZXZpY2Vfc2h1dGRvd24oc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQyMS1cXHQgKi9cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0MjI6XFx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQyMy1cXHQvKlxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI3LVxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQyODpcXHR2aXJ0aW9fc3luY2hyb25pemVfY2JzKGRldik7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MTcuNjY5ODg3MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI1ODkzNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCBpbiBMaW51eCBLZXJuZWwgU291cmNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFZpcnRJTyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcyBhcmUgc3luY2hyb25pemVkLiBXaGVyZSB3b3VsZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBiZSwgYW5kIGhvdyB3b3VsZCBJIGJlc3QgZ2FpbiBpbnNpZ2h0PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGRlZmluZXMgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBmdW5jdGlvbnMuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaGAgZmlyc3QuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGlzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBWaXJ0SU8gZnJhbWV3b3JrLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBpdHMgdXNhZ2Ugb3IgZGVsdmUgZGVlcGVyIGludG8gdGhlIHJlbGV2YW50IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGJhc2VkIG9uIHdoYXQgSSBmaW5kIGluIHRoYXQgaGVhZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY1OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjE5LjY5NTc4NTA3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjk4NTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fc3luY2hyb25pemVfY2JzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMwMj1zdHJ1Y3QgdmlydHF1ZXVlICp2aXJ0aW9fZmluZF9zaW5nbGVfdnEoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zMTYtLyoqXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzE3OiAqIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMgLSBzeW5jaHJvbml6ZSB3aXRoIHZpcnRxdWV1ZSBjYWxsYmFja3NcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zMTgtICogQGRldjogdGhlIHZpcnRpbyBkZXZpY2VcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oPTMyMD1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzIxOnZvaWQgdmlydGlvX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oLTMyMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaD0zNDQ9dm9pZCB2aXJ0aW9fZGV2aWNlX3JlYWR5KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTEtXFx0LypcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaDozNTI6XFx0ICogVGhlIHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBtYWtlcyBzdXJlIHZyaW5nX2ludGVycnVwdCgpXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgtMzUzLVxcdCAqIHdpbGwgc2VlIHRoZSBkcml2ZXIgc3BlY2lmaWMgc2V0dXAgaWYgaXQgc2VlcyB2cS1cXHUwMDNlYnJva2VuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTUtXFx0ICovXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmg6MzU2OlxcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaC0zNTctXFx0X192aXJ0aW9fdW5icmVha19kZXZpY2UoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MTkuNzY4Nzc4ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkzODcwOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBWaXJ0aW8gRGV2aWNlIFJlc2V0IGFuZCBTaHV0ZG93bioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBWaXJ0aW8gZGV2aWNlcyBhcmUgcmVzZXQgYW5kIHNodXQgZG93biB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBmb3IgYSBzcGVjaWZpYyBpc3N1ZSBJJ20gZGVidWdnaW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGhlYWRzIGZvciB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IHRoZSBsaWtlbHkgY3VscHJpdHMgYXJlIGluIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW8uY2AsIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgdmlydGlvX3Jlc2V0X2RldmljZWAgYW5kIGB2aXJ0aW9fZGV2aWNlX3NodXRkb3duYCBmdW5jdGlvbnMuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZSBkb2luZyB3aXRoIHRoZSBkZXZpY2UncyBzdGF0ZSBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIGlzc3VlLiBJIGtub3cgdGhlcmUgYXJlIGxpa2VseSBpbnRyaWNhY2llcyB3aXRoIHRoZSBNTUlPIHJlZ2lzdGVycywgZXZlbnQgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVmlydHF1ZXVlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzoyMi4xNjI2NTIwMTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0ICogY2FsbC93b3JrcXVldWUvYmguICBJbnZva2luZyB2aXJ0aW9fYnJlYWtfZGV2aWNlIHRoZW4gZmx1c2hpbmcgYW55IHN1Y2hcXG4gMjUxOlxcdCAqIGNvbnRleHRzIGlzIG9uZSB3YXkgdG8gaGFuZGxlIHRoYXQuXFxuIDI1MjpcXHQgKiAqL1xcbiAyNTM6XFx0dm9pZCB2aXJ0aW9fcmVzZXRfZGV2aWNlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHQjaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXFxuIDI1NjpcXHRcXHQvKlxcbiAyNTc6XFx0XFx0ICogVGhlIGJlbG93IHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoKSBndWFyYW50ZWVzIHRoYXQgYW55XFxuIDI1ODpcXHRcXHQgKiBpbnRlcnJ1cHQgZm9yIHRoaXMgbGluZSBhcnJpdmluZyBhZnRlclxcbiAyNTk6XFx0XFx0ICogdmlydGlvX3N5bmNocm9uaXplX3ZxcygpIGhhcyBjb21wbGV0ZWQgaXMgZ3VhcmFudGVlZCB0byBzZWVcXG4gMjYwOlxcdFxcdCAqIHZxLVxcdTAwM2Vicm9rZW4gYXMgdHJ1ZS5cXG4gMjYxOlxcdFxcdCAqL1xcbiAyNjI6XFx0XFx0dmlydGlvX2JyZWFrX2RldmljZShkZXYpO1xcbiAyNjM6XFx0XFx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xcbiAyNjQ6XFx0I2VuZGlmXFxuIDI2NTpcXHRcXG4gMjY2OlxcdFxcdGRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VyZXNldChkZXYpO1xcbiAyNjc6XFx0XFx0dmlydGlvX3N5bmNocm9uaXplX2NicyhkZXYpO1xcbiAyNjg6XFx0fVxcbiAyNjk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdHN0YXRpYyBpbnQgdmlydGlvX2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZClcXG4gMjcyOlxcdHtcXG4gMjczOlxcdFxcdGludCBlcnIsIGk7XFxuIDI3NDpcXHRcXHRzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2ID0gZGV2X3RvX3ZpcnRpbyhfZCk7XFxuIDI3NTpcXHRcXHRzdHJ1Y3QgdmlydGlvX2RyaXZlciAqZHJ2ID0gZHJ2X3RvX3ZpcnRpbyhkZXYtXFx1MDAzZWRldi5kcml2ZXIpO1xcbiAyNzY6XFx0XFx0dTY0IGRldmljZV9mZWF0dXJlc1tWSVJUSU9fRkVBVFVSRVNfVTY0U107XFxuIDI3NzpcXHRcXHR1NjQgZHJpdmVyX2ZlYXR1cmVzW1ZJUlRJT19GRUFUVVJFU19VNjRTXTtcXG4gMjc4OlxcdFxcdHU2NCBkcml2ZXJfZmVhdHVyZXNfbGVnYWN5O1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHQvKiBXZSBoYXZlIGEgZHJpdmVyISAqL1xcbiAyODE6XFx0XFx0dmlydGlvX2FkZF9zdGF0dXMoZGV2LCBWSVJUSU9fQ09ORklHX1NfRFJJVkVSKTtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0LyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovXFxuIDI4NDpcXHRcXHR2aXJ0aW9fZ2V0X2ZlYXR1cmVzKGRldiwgZGV2aWNlX2ZlYXR1cmVzKTtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0LyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHRoZSBkcml2ZXIgc3VwcG9ydHMuICovXFxuIDI4NzpcXHRcXHR2aXJ0aW9fZmVhdHVyZXNfemVybyhkcml2ZXJfZmVhdHVyZXMpO1xcbiAyODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRydi1cXHUwMDNlZmVhdHVyZV90YWJsZV9zaXplOyBpKyspIHtcXG4gMjg5OlxcdFxcdFxcdHVuc2lnbmVkIGludCBmID0gZHJ2LVxcdTAwM2VmZWF0dXJlX3RhYmxlW2ldO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzoyMi4xNjI3NDU1NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODgyNjEzMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0aW8gRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpc+KApiBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgd291bGQgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGlzIHBhcnRpY3VsYXIgaXNzdWU/XCIgSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgVmlydGlvIGRyaXZlcnMuIFwiTGV0J3Mgc2VlLCB3aGVyZSBhcmUgdGhlIGtleSBpbXBsZW1lbnRhdGlvbnM/XCIgSSBpbW1lZGlhdGVseSB0aGluaywgdGhlIGBkcml2ZXJzL3ZpcnRpb2AgZGlyZWN0b3J5IGlzIGEgZ29sZCBtaW5lIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbi4gVGhlbiwgdG8gemVybyBpbiBvbiBzcGVjaWZpY3MsIEknbGwgZm9jdXMgb24gdGhlIHJlbGV2YW50IGRldmljZSB0eXBlczogdGhlIGB2aXJ0aW9fdmRwYS5jYCBkcml2ZXIsIGJlY2F1c2UgaXQncyBwcm9iYWJseSBoYW5kbGluZyB0aGUgc3BlY2lmaWMgdmlydHVhbCBkYXRhIHBhdGggSSdtIGludGVyZXN0ZWQgaW4sIGFuZCB0aGVuIHRoZSBgdmlydGlvX2lucHV0LmNgIGRyaXZlciwgd2hpY2gsIGdpdmVuIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGlzIGxpa2VseSB0byBiZSBpbnZvbHZlZCBzb21laG93LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgVmlydGlvIGRldmljZXMgYXJlIGZ1bmN0aW9uaW5nIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsLiBJJ2xsIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGluIHRoZXNlIHR3byBmaXJzdCwgYW5kIHNlZSB3aGF0IEkgY2FuIGxlYXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MjUuMDQ1MzYxNTI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbiAzNDE6XFx0ZXJyX2luaXRfdnE6XFxuIDM0MjpcXHRcXHRrZnJlZSh2aSk7XFxuIDM0MzpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbiAzNDk6XFx0XFx0dm9pZCAqYnVmO1xcbiAzNTA6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDM1MzpcXHRcXHR2aS1cXHUwMDNlcmVhZHkgPSBmYWxzZTtcXG4gMzU0OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdC8qIENhbGxiYWNrcyB1c2UgdmktXFx1MDAzZWlkZXYuICovXFxuIDM1NzpcXHRcXHR2aXJ0aW9fcmVzZXRfZGV2aWNlKHZkZXYpO1xcbiAzNTg6XFx0XFx0aW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodmktXFx1MDAzZWlkZXYpO1xcbiAzNTk6XFx0XFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXFx1MDAzZXN0cykpICE9IE5VTEwpXFxuIDM2MDpcXHRcXHRcXHRrZnJlZShidWYpO1xcbiAzNjE6XFx0XFx0dmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VkZWxfdnFzKHZkZXYpO1xcbiAzNjI6XFx0XFx0a2ZyZWUodmkpO1xcbiAzNjM6XFx0fVxcbiAzNjQ6XFx0XFxuIDM2NTpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuIDM2NjpcXHRzdGF0aWMgaW50IHZpcnRpbnB1dF9mcmVlemUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuIDM2NzpcXHR7XFxuIDM2ODpcXHRcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZkZXYtXFx1MDAzZXByaXY7XFxuIDM2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAzNzA6XFx0XFx0dm9pZCAqYnVmO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMzczOlxcdFxcdHZpLVxcdTAwM2VyZWFkeSA9IGZhbHNlO1xcbiAzNzQ6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMzc1OlxcdFxcbiAzNzY6XFx0XFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcXG4gMzc3OlxcdFxcdHdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZpLVxcdTAwM2VzdHMpKSAhPSBOVUxMKVxcbiAzNzg6XFx0XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMzc5OlxcdFxcdHZkZXYtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZGVsX3Zxcyh2ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MjUuMDQ1NTA1NDc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjcxMTcyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQsIGFuZCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBFdmVudCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGB2aXJ0aW5wdXRfcmVjdl9ldmVudHNgLiBJdCdzIGNydWNpYWwgd2UgdW5kZXJzdGFuZCBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBiZWhhdmluZywgZXNwZWNpYWxseSBpbiB0aGlzIGNvbnRleHQuIFdlIG5lZWQgdG8gZGlzc2VjdCBpdHMgcm9sZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHZpcnR1YWwgaW5wdXQgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB1bmV4cGVjdGVkIGJlaGF2aW9yIG1pZ2h0IGJlIG1hbmlmZXN0aW5nLiBJcyBpdCBoYW5kbGluZyBldmVudHMgZWZmaWNpZW50bHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGFyZWE/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBpcyB0aGlzIGZ1bmN0aW9uIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLCBvciBhIGRvd25zdHJlYW0gZWZmZWN0PyBMZXQncyB0cmVhdCBpdCBhcyBhIHN1c3BlY3QgYW5kIGludGVycm9nYXRlIGl0IHdpdGggYSBkZXRhaWxlZCBleGFtaW5hdGlvbiwgbG9va2luZyBmb3IgYW55IHNpZ24gdGhhdCB0aGUgcHJvY2Vzc2luZyBpcyBub3QgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjI3LjM3MjYyNDkxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdHNnX2luaXRfb25lKHNnLCBldnRidWYsIHNpemVvZigqZXZ0YnVmKSk7XFxuICAzMzpcXHRcXHR2aXJ0cXVldWVfYWRkX2luYnVmX2NhY2hlX2NsZWFuKHZpLVxcdTAwM2VldnQsIHNnLCAxLCBldnRidWYsIEdGUF9BVE9NSUMpO1xcbiAgMzQ6XFx0fVxcbiAgMzU6XFx0XFxuICAzNjpcXHRzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfcmVjdl9ldmVudHMoc3RydWN0IHZpcnRxdWV1ZSAqdnEpXFxuICAzNzpcXHR7XFxuICAzODpcXHRcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVxcdTAwM2V2ZGV2LVxcdTAwM2Vwcml2O1xcbiAgMzk6XFx0XFx0c3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqZXZlbnQ7XFxuICA0MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAgNDE6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA0NDpcXHRcXHRpZiAodmktXFx1MDAzZXJlYWR5KSB7XFxuICA0NTpcXHRcXHRcXHR3aGlsZSAoKGV2ZW50ID0gdmlydHF1ZXVlX2dldF9idWYodmktXFx1MDAzZWV2dCwgXFx1MDAyNmxlbikpICE9IE5VTEwpIHtcXG4gIDQ2OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA0NzpcXHRcXHRcXHRcXHRpbnB1dF9ldmVudCh2aS1cXHUwMDNlaWRldixcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShldmVudC1cXHUwMDNldHlwZSksXFxuICA0OTpcXHRcXHRcXHRcXHRcXHQgICAgbGUxNl90b19jcHUoZXZlbnQtXFx1MDAzZWNvZGUpLFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGV2ZW50LVxcdTAwM2V2YWx1ZSkpO1xcbiAgNTE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA1MjpcXHRcXHRcXHRcXHRpZiAoIXZpLVxcdTAwM2VyZWFkeSlcXG4gIDUzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNTQ6XFx0XFx0XFx0XFx0dmlydGlucHV0X3F1ZXVlX2V2dGJ1Zih2aSwgZXZlbnQpO1xcbiAgNTU6XFx0XFx0XFx0fVxcbiAgNTY6XFx0XFx0XFx0aWYgKHZpLVxcdTAwM2VyZWFkeSlcXG4gIDU3OlxcdFxcdFxcdFxcdHZpcnRxdWV1ZV9raWNrKHZxKTtcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdC8qXFxuICA2MzpcXHQgKiBPbiBlcnJvciB3ZSBhcmUgbG9zaW5nIHRoZSBzdGF0dXMgdXBkYXRlLCB3aGljaCBpc24ndCBjcml0aWNhbCBhc1xcbiAgNjQ6XFx0ICogdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3Igc3R1ZmYgbGlrZSBrZXlib2FyZCBsZWRzLlxcbiAgNjU6XFx0ICovXFxuICA2NjpcXHRzdGF0aWMgaW50IHZpcnRpbnB1dF9zZW5kX3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSxcXG4gIDY3OlxcdFxcdFxcdFxcdFxcdCB1MTYgdHlwZSwgdTE2IGNvZGUsIHMzMiB2YWx1ZSlcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCB2aXJ0aW9faW5wdXRfZXZlbnQgKnN0c2J1ZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MjcuMzcyNzA4MDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDI4MzM2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCB0aGlua2luZyBhcyBJIHdvdWxkIGluIHRoZSBtaWRzdCBvZiB0aGlzIHdvcms6XG5cbioqSW52ZXN0aWdhdGluZyBWaXJ0aW8gYW5kIFJlbW90ZSBQcm9jZXNzb3IgSW50ZXJhY3Rpb25zKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBmaWxlcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBGaXJzdCwgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNg4oCmIFJpZ2h0LCBWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRpb24uIFRoYXQncyBrZXkgZm9yIHBlcmZvcm1hbmNlLCBzbyBJIHNob3VsZCBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhhdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIFZEUEEtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBicm9hZGVyIHZpcnRpbyBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBwYXRocyBhcmUgb3B0aW1pemVkLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS5cblxuTmV4dCB1cCwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBSZW1vdGUgUHJvY2Vzc29yIHN0dWZmLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY2AgZG9lcy4gT2theSwgaXQncyB0aGUgY29yZSByZW1vdGVwcm9jIGZyYW1ld29yay4gVGhpcyBtZWFucyBpdCBjb250YWlucyB0aGUgZXNzZW50aWFsIG1lY2hhbmljcyBmb3IgbWFuYWdpbmcgcmVtb3RlIHByb2Nlc3NvcnMsIHRoZWlyIHJlc291cmNlcywgY29tbXVuaWNhdGlvbiwgYW5kIGxpZmVjeWNsZS4gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZXkgaGFuZGxlIHJlc291cmNlIGFsbG9jYXRpb24sIG1lc3NhZ2luZywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGJhc2ljIHN0YXRlIG1hY2hpbmVzIHRoYXQgZHJpdmUgdGhlIHJlbW90ZXByb2Mgb3BlcmF0aW9uLlxuXG5GaW5hbGx5LCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGJyaWRnaW5nIHRoZSBnYXAgYmV0d2VlbiByZW1vdGVwcm9jIGFuZCB2aXJ0aW8uIFNvLCBJIGV4cGVjdCB0byBzZWUgdGhlIHZpcnRpbyB0cmFuc3BvcnQgbWVjaGFuaXNtcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzb3IuIFRoaXMgZmlsZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZW1vdGUgcHJvY2Vzc29yJ3MgaGFyZHdhcmUgaXMgYWNjZXNzZWQgYW5kIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgdmlydGlvIGludGVyZmFjZS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBjb250cm9sIG1lc3NhZ2VzIGFuZCBkYXRhIGFyZSBleGNoYW5nZWQgYmV0d2VlbiB0aGUgaG9zdCBhbmQgcmVtb3RlIHByb2Nlc3NvciB0aHJvdWdoIHZpcnRpbyBxdWV1ZXMuIFRpbWUgdG8gZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTI3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzozMC4wNzU1NDM4NDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0c3RhdGljIGlycXJldHVybl90IHZpcnRpb192ZHBhX2NvbmZpZ19jYih2b2lkICpwcml2YXRlKVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gcHJpdmF0ZTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0dmlydGlvX2NvbmZpZ19jaGFuZ2VkKFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZXZkZXYpO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuIDEyMjpcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2Iodm9pZCAqcHJpdmF0ZSlcXG4gMTI1OlxcdHtcXG4gMTI2OlxcdFxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gcHJpdmF0ZTtcXG4gMTI3OlxcdFxcdHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldjtcXG4gMTI4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDEyOTpcXHRcXHRpcnFyZXR1cm5fdCByZXQ7XFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdHZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2cS1cXHUwMDNldmRldik7XFxuIDEzMjpcXHRcXHRyZWFkX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XFxuIDEzMzpcXHRcXHRyZXQgPSB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xcbiAxMzQ6XFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmRfZGV2LVxcdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdHJldHVybiByZXQ7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyB2b2lkIHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2UgKnZkX2RldiA9IHRvX3ZpcnRpb192ZHBhX2RldmljZSh2ZGV2KTtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNnZkX2Rldi1cXHUwMDNlY2FsbGJhY2tfbG9jayk7XFxuIDE0NDpcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZ2ZF9kZXYtXFx1MDAzZWNhbGxiYWNrX2xvY2spO1xcbiAxNDU6XFx0fVxcbiAxNDY6XFx0XFxuIDE0NzpcXHRzdGF0aWMgc3RydWN0IHZpcnRxdWV1ZSAqXFxuIDE0ODpcXHR2aXJ0aW9fdmRwYV9zZXR1cF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGluZGV4LFxcbiAxNDk6XFx0XFx0XFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSxcXG4gMTUwOlxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBjdHgpXFxuIDE1MTpcXHR7XFxuIDE1MjpcXHRcXHRzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSB2ZF9nZXRfdmRwYSh2ZGV2KTtcXG4gMTUzOlxcdFxcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXFx1MDAzZWNvbmZpZztcXG4gMTU0OlxcdFxcdGJvb2wgKCpub3RpZnkpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSA9IHZpcnRpb192ZHBhX25vdGlmeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MzAuMDc1NjI5NTk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzExMjQyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gcmVtb3RlcHJvY192aXJ0aW8uYyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLiBUaGlzIGZpbGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnRpbyB0cmFuc3BvcnQgd29ya3Mgd2l0aCByZW1vdGUgcHJvY2Vzc29ycy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdmlydGlvIGRldmljZSBpbnRlcmFjdGlvbjogdGhlIG5lZ290aWF0aW9uLCB0aGUgZGF0YSB0cmFuc2ZlciBtZWNoYW5pc21zLCBhbmQgaG93IHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBzZXQgdXAuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIGhvdyBpdCBpc29sYXRlcyB0aGUgcmVtb3RlIHByb2Nlc3NvcidzIHdvcmxkLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkIGluIHRoZSByZW1vdGVwcm9jIHN5c3RlbSwgdG9vLiBMZXQncyBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjMzLjI0Njc1NzQ2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0ICogbWVzc2FnZXMgYXZhaWxhYmxlLlxcbiAgODY6XFx0ICpcXG4gIDg3OlxcdCAqIFJldHVybjogSVJRX05PTkUgaWYgbm8gbWVzc2FnZSB3YXMgZm91bmQgaW4gdGhlIEBub3RpZnlpZCB2aXJ0cXVldWUsXFxuICA4ODpcXHQgKiBhbmQgb3RoZXJ3aXNlIHJldHVybnMgSVJRX0hBTkRMRUQuXFxuICA4OTpcXHQgKi9cXG4gIDkwOlxcdGlycXJldHVybl90IHJwcm9jX3ZxX2ludGVycnVwdChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBpbnQgbm90aWZ5aWQpXFxuICA5MTpcXHR7XFxuICA5MjpcXHRcXHRzdHJ1Y3QgcnByb2NfdnJpbmcgKnJ2cmluZztcXG4gIDkzOlxcdFxcdGludCBzcmN1X2lkeDtcXG4gIDk0OlxcdFxcdGlycXJldHVybl90IHJldDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2cnByb2MtXFx1MDAzZXZxX3NyY3UpO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRkZXZfZGJnKFxcdTAwMjZycHJvYy1cXHUwMDNlZGV2LCBcXFwidnEgaW5kZXggJWQgaXMgaW50ZXJydXB0ZWRcXFxcblxcXCIsIG5vdGlmeWlkKTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0cnZyaW5nID0gaWRyX2ZpbmQoXFx1MDAyNnJwcm9jLVxcdTAwM2Vub3RpZnlpZHMsIG5vdGlmeWlkKTtcXG4gMTAxOlxcdFxcdHJldCA9IHJ2cmluZyBcXHUwMDI2XFx1MDAyNiBydnJpbmctXFx1MDAzZXZxID8gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cXHUwMDNldnEpIDogSVJRX05PTkU7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnJwcm9jLVxcdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdHJldHVybiByZXQ7XFxuIDEwNjpcXHR9XFxuIDEwNzpcXHRFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XFxuIDEwODpcXHRcXG4gMTA5OlxcdHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpycF9maW5kX3ZxKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LFxcbiAxMTA6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBpZCxcXG4gMTExOlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSxcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCBib29sIGN0eClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdHN0cnVjdCBycHJvY192ZGV2ICpydmRldiA9IHZkZXZfdG9fcnZkZXYodmRldik7XFxuIDExNTpcXHRcXHRzdHJ1Y3QgcnByb2MgKnJwcm9jID0gdmRldl90b19ycHJvYyh2ZGV2KTtcXG4gMTE2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZycHJvYy1cXHUwMDNlZGV2O1xcbiAxMTc6XFx0XFx0c3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtO1xcbiAxMTg6XFx0XFx0c3RydWN0IHJwcm9jX3ZyaW5nICpydnJpbmc7XFxuIDExOTpcXHRcXHRzdHJ1Y3QgZndfcnNjX3ZkZXYgKnJzYztcXG4gMTIwOlxcdFxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxO1xcbiAxMjE6XFx0XFx0dm9pZCAqYWRkcjtcXG4gMTIyOlxcdFxcdGludCBudW0sIHNpemU7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdC8qIHdlJ3JlIHRlbXBvcmFyaWx5IGxpbWl0ZWQgdG8gdHdvIHZpcnRxdWV1ZXMgcGVyIHJ2ZGV2ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjMzLjI0Njg2NzU2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTE4MDUwNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgSW5zcGVjdGlvbiBUaW1lKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIGl0LiBCZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGlzIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZCBjb25maWd1cmF0aW9uLiBJdCdzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIGF0IHRoaXMgcG9pbnQg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IEtjb25maWdzIGFyZSBwcm9wZXJseSBzZXQgZm9yIHRoZXNlIGZpbGVzIHRvIGJlIGluY2x1ZGVkIGFuZCBiZWhhdmUgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBObyBwb2ludCBpbiBkZWJ1Z2dpbmcgc29tZXRoaW5nIHRoYXQncyBzaW1wbHkgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBvciwgZXZlbiB3b3JzZSwgbWlzYmVoYXZpbmcgYmVjYXVzZSB0aGUgcmlnaHQgZmVhdHVyZXMgYXJlICpvbiouXG5cbkxldCdzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSBjaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZXNlIHBhcnRpY3VsYXIgbW9kdWxlcy4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGNvbmZsaWN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZsYWdzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoYXQgd291bGQgaW1wYWN0IG15IGFuYWx5c2lzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IGEgY29ycmVjdCBhbmQgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIG1vZHVsZSBpcyBpbnRlbmRlZCB0byBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBidWlsZC4gR290dGEgbWFrZSBzdXJlIEknbSBjaGFzaW5nIHRoZSByaWdodCByYWJiaXQgZG93biB0aGUgaG9sZS4gU28sIEtjb25maWdzLCBsZXQncyBzZWUgd2hhdCB5b3UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk2MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6MzUuNzY0OTIwMjg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI1NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9faW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0aW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX1ZJUlRJT19CQUxMT09OKSArPSB2aXJ0aW9fYmFsbG9vbi5vXFxuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1ZJUlRJT19JTlBVVCkgKz0gdmlydGlvX2lucHV0Lm9cXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfVklSVElPX1ZEUEEpICs9IHZpcnRpb192ZHBhLm9cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTktI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvdmlydGlvX2lkcy5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEwOiNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L3ZpcnRpb19pbnB1dC5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnB1dC9tdC5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTEyLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzOnN0cnVjdCB2aXJ0aW9faW5wdXQge1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE0LVxcdHN0cnVjdCB2aXJ0aW9fZGV2aWNlICAgICAgICp2ZGV2O1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjAtXFx0X19kbWFfZnJvbV9kZXZpY2VfZ3JvdXBfYmVnaW4oKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyMTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICBldnRzWzY0XTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yMi1cXHRfX2RtYV9mcm9tX2RldmljZV9ncm91cF9lbmQoKTtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI2LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI3OnN0YXRpYyB2b2lkIHZpcnRpbnB1dF9xdWV1ZV9ldnRidWYoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mjg6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZpcnRpb19pbnB1dF9ldmVudCAqZXZ0YnVmKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM2PXN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNy17XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mzg6XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2cS1cXHUwMDNldmRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzozOTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpldmVudDtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjUtICovXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6NjY6c3RhdGljIGludCB2aXJ0aW5wdXRfc2VuZF9zdGF0dXMoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNjctXFx0XFx0XFx0XFx0IHUxNiB0eXBlLCB1MTYgY29kZSwgczMyIHZhbHVlKVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTY4LXtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo2OTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpzdHNidWY7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNzAtXFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MTEyPXN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X3N0YXR1cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMTMte1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjExNDpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSA9IHZxLVxcdTAwM2V2ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjExNTpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0X2V2ZW50ICpzdHNidWY7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTE2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0xMjU9c3RhdGljIGludCB2aXJ0aW5wdXRfc3RhdHVzKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHVuc2lnbmVkIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTI3LXtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMjg6XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMjktXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMzItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTMzOnN0YXRpYyB1OCB2aXJ0aW5wdXRfY2ZnX3NlbGVjdChzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xMzQtXFx0XFx0XFx0ICAgICAgIHU4IHNlbGVjdCwgdTggc3Vic2VsKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTM3LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjEzODpcXHR2aXJ0aW9fY3dyaXRlX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgc2VsZWN0LCBcXHUwMDI2c2VsZWN0KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxMzk6XFx0dmlydGlvX2N3cml0ZV9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHN1YnNlbCwgXFx1MDAyNnN1YnNlbCk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTQwOlxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHNpemUsIFxcdTAwMjZzaXplKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDEtXFx0cmV0dXJuIHNpemU7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDMtXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTQ0OnN0YXRpYyB2b2lkIHZpcnRpbnB1dF9jZmdfYml0cyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSwgaW50IHNlbGVjdCwgaW50IHN1YnNlbCxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xNDUtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdHMsIHVuc2lnbmVkIGludCBiaXRjb3VudClcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE2NC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTY1OlxcdHZpcnRpb19jcmVhZF9ieXRlcyh2aS1cXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTY2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUuYml0bWFwKSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE3Ny1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxNzg6c3RhdGljIHZvaWQgdmlydGlucHV0X2NmZ19hYnMoc3RydWN0IHZpcnRpb19pbnB1dCAqdmksIGludCBhYnMpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTE4Mi1cXHR2aXJ0aW5wdXRfY2ZnX3NlbGVjdCh2aSwgVklSVElPX0lOUFVUX0NGR19BQlNfSU5GTywgYWJzKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODM6XFx0dmlydGlvX2NyZWFkX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMubWluLCBcXHUwMDI2bWkpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE4NDpcXHR2aXJ0aW9fY3JlYWRfbGUodmktXFx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLCB1LmFicy5tYXgsIFxcdTAwMjZtYSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MTg1OlxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsIHUuYWJzLnJlcywgXFx1MDAyNnJlKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODY6XFx0dmlydGlvX2NyZWFkX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMuZnV6eiwgXFx1MDAyNmZ1KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoxODc6XFx0dmlydGlvX2NyZWFkX2xlKHZpLVxcdTAwM2V2ZGV2LCBzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZywgdS5hYnMuZmxhdCwgXFx1MDAyNmZsKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xODgtXFx0aW5wdXRfc2V0X2Fic19wYXJhbXModmktXFx1MDAzZWlkZXYsIGFicywgbWksIG1hLCBmdSwgZmwpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMTkxLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjE5MjpzdGF0aWMgaW50IHZpcnRpbnB1dF9pbml0X3ZxcyhzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aSlcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0xOTMte1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjA5LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjIxMDpzdGF0aWMgdm9pZCB2aXJ0aW5wdXRfZmlsbF9ldnQoc3RydWN0IHZpcnRpb19pbnB1dCAqdmkpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjExLXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTIyNT1zdGF0aWMgaW50IHZpcnRpbnB1dF9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yMjYte1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjIyNzpcXHRzdHJ1Y3QgdmlydGlvX2lucHV0ICp2aTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yMjgtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI1NC1cXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfTkFNRSwgMCk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjU1OlxcdHZpcnRpb19jcmVhZF9ieXRlcyh2aS1cXHUwMDNldmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjU2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUuc3RyaW5nKSxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI1OC1cXHRzaXplID0gdmlydGlucHV0X2NmZ19zZWxlY3QodmksIFZJUlRJT19JTlBVVF9DRkdfSURfU0VSSUFMLCAwKTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzoyNTk6XFx0dmlydGlvX2NyZWFkX2J5dGVzKHZpLVxcdTAwM2V2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2lucHV0X2NvbmZpZyxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0yNjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgdS5zdHJpbmcpLFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjY4LVxcdHNpemUgPSB2aXJ0aW5wdXRfY2ZnX3NlbGVjdCh2aSwgVklSVElPX0lOUFVUX0NGR19JRF9ERVZJRFMsIDApO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI2OTpcXHRpZiAoc2l6ZSBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHZpcnRpb19pbnB1dF9kZXZpZHMpKSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjcwOlxcdFxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjcxLVxcdFxcdFxcdFxcdHUuaWRzLmJ1c3R5cGUsIFxcdTAwMjZ2aS1cXHUwMDNlaWRldi1cXHUwMDNlaWQuYnVzdHlwZSk7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MjcyOlxcdFxcdHZpcnRpb19jcmVhZF9sZSh2aS1cXHUwMDNldmRldiwgc3RydWN0IHZpcnRpb19pbnB1dF9jb25maWcsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMjczLVxcdFxcdFxcdFxcdHUuaWRzLnZlbmRvciwgXFx1MDAyNnZpLVxcdTAwM2VpZGV2LVxcdTAwM2VpZC52ZW5kb3IpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI3NDpcXHRcXHR2aXJ0aW9fY3JlYWRfbGUodmktXFx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3NS1cXHRcXHRcXHRcXHR1Lmlkcy5wcm9kdWN0LCBcXHUwMDI2dmktXFx1MDAzZWlkZXYtXFx1MDAzZWlkLnByb2R1Y3QpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jOjI3NjpcXHRcXHR2aXJ0aW9fY3JlYWRfbGUodmktXFx1MDAzZXZkZXYsIHN0cnVjdCB2aXJ0aW9faW5wdXRfY29uZmlnLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTI3Ny1cXHRcXHRcXHRcXHR1Lmlkcy52ZXJzaW9uLCBcXHUwMDI2dmktXFx1MDAzZWlkZXYtXFx1MDAzZWlkLnZlcnNpb24pO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM9MzQ2PXN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtMzQ3LXtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzozNDg6XFx0c3RydWN0IHZpcnRpb19pbnB1dCAqdmkgPSB2ZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTM0OS1cXHR2b2lkICpidWY7XFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYz0zNjY9c3RhdGljIGludCB2aXJ0aW5wdXRfZnJlZXplKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTM2Ny17XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6MzY4OlxcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zNjktXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTM4Mz1zdGF0aWMgaW50IHZpcnRpbnB1dF9yZXN0b3JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTM4NC17XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6Mzg1OlxcdHN0cnVjdCB2aXJ0aW9faW5wdXQgKnZpID0gdmRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy0zODYtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jPTQwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTQwNi1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYzo0MDc6c3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19pbnB1dF9kcml2ZXIgPSB7XFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMtNDA4LVxcdC5kcml2ZXIubmFtZSAgICAgICAgID0gS0JVSUxEX01PRE5BTUUsXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuYy00MTktXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmM6NDIwOm1vZHVsZV92aXJ0aW9fZHJpdmVyKHZpcnRpb19pbnB1dF9kcml2ZXIpO1xcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jLTQyMS1NT0RVTEVfREVWSUNFX1RBQkxFKHZpcnRpbywgaWRfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzozNS44NDUxODQ5MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE5OTc0NTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVmlydGlvIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVmlydGlvIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgc3RhbmRhcmQga2VybmVsIGJ1aWxkIHN5c3RlbSwgaXMgdGhlIGBkcml2ZXJzL3ZpcnRpb2AgZGlyZWN0b3J5LiBBbmQgd2l0aGluIHRoYXQsIHRoZSBmaWxlIHRoYXQgZGljdGF0ZXMgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgYWxtb3N0IGNlcnRhaW5seSBgS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIHNob3VsZCBmaW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGhlbHAgdGV4dHMgdGhhdCBkZXRlcm1pbmUgaG93IHRoZSBWaXJ0aW8gc3Vic3lzdGVtIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIHRoZSBjZW50cmFsIGh1YiBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZmxhZ3MgcmVsYXRlZCB0byB0aG9zZSB2aXJ0dWFsaXplZCBkZXZpY2VzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgb3B0aW9ucyBmb3IgdGhlIGRpZmZlcmVudCB2aXJ0aW8gZGV2aWNlIHR5cGVzIChuZXQsIGJsb2NrLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc29tZSBnbG9iYWwgVmlydGlvIGZsYWdzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZXhhbWluZSB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDAuMDQ0OTMyODMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBWSVJUSU9fQU5DSE9SXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBWSVJUSU9cXG4gICA2OlxcdFxcdHRyaXN0YXRlXFxuICAgNzpcXHRcXHRzZWxlY3QgVklSVElPX0FOQ0hPUlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBhbnkgZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlIHZpcnRpb1xcbiAgMTA6XFx0XFx0ICBidXMsIHN1Y2ggYXMgQ09ORklHX1ZJUlRJT19QQ0ksIENPTkZJR19WSVJUSU9fTU1JTywgQ09ORklHX1JQTVNHXFxuICAxMTpcXHRcXHQgIG9yIENPTkZJR19TMzkwX0dVRVNULlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgVklSVElPX1BDSV9MSUJcXG4gIDE0OlxcdFxcdHRyaXN0YXRlXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIE1vZGVybiBQQ0kgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZVxcbiAgMTc6XFx0XFx0ICBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgYmFzZWQgb24gbW9kZXJuXFxuICAxODpcXHRcXHQgIFBDSSBkZXZpY2Ugd2l0aCBwb3NzaWJsZSB2ZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucy4gQW55XFxuICAxOTpcXHRcXHQgIG1vZHVsZSB0aGF0IHNlbGVjdHMgdGhpcyBtb2R1bGUgbXVzdCBkZXBlbmQgb24gUENJLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVklSVElPX1BDSV9MSUJfTEVHQUNZXFxuICAyMjpcXHRcXHR0cmlzdGF0ZVxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBMZWdhY3kgUENJIGRldmljZSAoVmlydGlvIFBDSSBDYXJkIDAuOS54IERyYWZ0IGFuZCBvbGRlciBkZXZpY2UpXFxuICAyNTpcXHRcXHQgIGltcGxlbWVudGF0aW9uLlxcbiAgMjY6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2aWNlc1xcbiAgMjc6XFx0XFx0ICB3aGljaCBhcmUgYmFzZWQgb24gbGVnYWN5IFBDSSBkZXZpY2UuIEFueSBtb2R1bGUgdGhhdCBzZWxlY3RzIHRoaXNcXG4gIDI4OlxcdFxcdCAgbW9kdWxlIG11c3QgZGVwZW5kIG9uIFBDSS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0bWVudWNvbmZpZyBWSVJUSU9fTUVOVVxcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiVmlydGlvIGRyaXZlcnNcXFwiXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0aWYgVklSVElPX01FTlVcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIFZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OXFxuICAzNzpcXHQgICAgICAgIGJvb2wgXFxcIkhhcmRlbiB2aXJ0aW8gbm90aWZpY2F0aW9uXFxcIlxcbiAgMzg6XFx0ICAgICAgICBkZXBlbmRzIG9uIEJST0tFTlxcbiAgMzk6XFx0ICAgICAgICBoZWxwXFxuICA0MDpcXHQgICAgICAgICAgRW5hYmxlIHRoaXMgdG8gaGFyZGVuIHRoZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyBhbmQgc3VwcHJlc3NcXG4gIDQxOlxcdCAgICAgICAgICB0aG9zZSB0aGF0IGhhcHBlbiBhdCBhIHRpbWUgd2hlcmUgbm90aWZpY2F0aW9ucyBhcmUgaWxsZWdhbC5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0ICAgICAgICAgIEV4cGVyaW1lbnRhbDogTm90ZSB0aGF0IHNldmVyYWwgZHJpdmVycyBzdGlsbCBoYXZlIGlzc3VlcyB0aGF0XFxuICA0NDpcXHQgICAgICAgICAgbWF5IGNhdXNlIGNyYXNoZXMgb3IgaGFuZ3Mgd2hlbiBjb3JyZWN0IGhhbmRsaW5nIG9mXFxuICA0NTpcXHQgICAgICAgICAgbm90aWZpY2F0aW9ucyBpcyBlbmZvcmNlZDsgZGVwZW5kaW5nIG9uIHRoZSBzdWJzZXQgb2ZcXG4gIDQ2OlxcdCAgICAgICAgICBkcml2ZXJzIGFuZCBkZXZpY2VzIHlvdSB1c2UsIHRoaXMgbWF5IG9yIG1heSBub3Qgd29yay5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBWSVJUSU9fUENJXFxuICA1MTpcXHRcXHR0cmlzdGF0ZSBcXFwiUENJIGRyaXZlciBmb3IgdmlydGlvIGRldmljZXNcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNTM6XFx0XFx0c2VsZWN0IFZJUlRJT19QQ0lfTElCXFxuICA1NDpcXHRcXHRzZWxlY3QgVklSVElPXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHZpcnRpbyBiYXNlZCBwYXJhdmlydHVhbCBkZXZpY2VcXG4gIDU3OlxcdFxcdCAgZHJpdmVycyBvdmVyIFBDSS4gIFRoaXMgcmVxdWlyZXMgdGhhdCB5b3VyIFZNTSBoYXMgYXBwcm9wcmlhdGUgUENJXFxuICA1ODpcXHRcXHQgIHZpcnRpbyBiYWNrZW5kcy4gIE1vc3QgUUVNVSBiYXNlZCBWTU1zIHNob3VsZCBzdXBwb3J0IHRoZXNlIGRldmljZXNcXG4gIDU5OlxcdFxcdCAgKGxpa2UgS1ZNIG9yIFhlbikuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIFZJUlRJT19QQ0lfQURNSU5fTEVHQUNZXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT19QQ0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBDT01QSUxFX1RFU1QpXFxuICA2NjpcXHRcXHRkZWZhdWx0IHlcXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIFZJUlRJT19QQ0lfTEVHQUNZXFxuICA2OTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBsZWdhY3kgdmlydGlvIGRyYWZ0IDAuOS5YIGFuZCBvbGRlciBkZXZpY2VzXFxcIlxcbiAgNzA6XFx0XFx0ZGVmYXVsdCB5XFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT19QQ0lcXG4gIDcyOlxcdFxcdHNlbGVjdCBWSVJUSU9fUENJX0xJQl9MRUdBQ1lcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdCAgICAgICAgICBWaXJ0aW8gUENJIENhcmQgMC45LlggRHJhZnQgKGNpcmNhIDIwMTQpIGFuZCBvbGRlciBkZXZpY2Ugc3VwcG9ydC5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGJ1aWxkaW5nIGEgdHJhbnNpdGlvbmFsIGRyaXZlciwgc3VwcG9ydGluZ1xcbiAgNzc6XFx0XFx0ICBib3RoIGRldmljZXMgY29uZm9ybWluZyB0byBWaXJ0aW8gMSBzcGVjaWZpY2F0aW9uLCBhbmQgbGVnYWN5IGRldmljZXMuXFxuICA3ODpcXHRcXHQgIElmIGRpc2FibGVkLCB5b3UgZ2V0IGEgc2xpZ2h0bHkgc21hbGxlciwgbm9uLXRyYW5zaXRpb25hbCBkcml2ZXIsXFxuICA3OTpcXHRcXHQgIHdpdGggbm8gbGVnYWN5IGNvbXBhdGliaWxpdHkuXFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDAuMDQ1MDI1MTgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTA3MzEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWx2aW5nIGludG8gdGhlIFZpcnRpbyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgaXQncyB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGBkcml2ZXJzL3ZpcnRpby9LY29uZmlnYCBmaWxlLiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoZSBWaXJ0aW8gc3Vic3lzdGVtLCBhbmQgdGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGxpbmNocGluIGZvciBjb25maWd1cmluZyB3aGljaCBWaXJ0aW8gZHJpdmVycyBnZXQgYnVpbHQgYW5kIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IHNvbGlkIGdyYXNwIG9mIHRoZSBWaXJ0aW8gYXJjaGl0ZWN0dXJlLCB0aGUgZGlmZmVyZW50IGRldmljZXMsIGFuZCB0aGUgdmFyaW91cyBpbnRlcmZhY2VzLiBCdXQsIHRvIHJlYWxseSBnZXQgbXkgaGVhZCBhcm91bmQgdGhlIGNvbmZpZ3VyYXRpb24gbnVhbmNlcywgZXNwZWNpYWxseSBpZiBJJ20gdHJvdWJsZXNob290aW5nIGEgc3BlY2lmaWMgZHJpdmVyIG9yIHRyeWluZyB0byBjdXN0b21pemUgYSBidWlsZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgaW4gdGhlIEtjb25maWcgZmlsZS5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBcImRlcGVuZHMgb25cIiBjbGF1c2VzLCB0aGUgY29uZGl0aW9uYWxzIGJhc2VkIG9uIGhhcmR3YXJlIHBsYXRmb3JtcyBvciBrZXJuZWwgZmVhdHVyZXMsIGFuZCBhbGwgdGhvc2UgbWVudSBzdHJ1Y3R1cmVzLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGJvdGggc2VsZWN0aW5nIHRoZSBjb3JyZWN0IGRyaXZlcnMgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBWaXJ0aW8gc3Vic3lzdGVtIGlzIGJ1aWx0IGFuZCBjb25maWd1cmVkLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBzcGVjaWZpYyBmbGFncyBvciBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgc3BlY2lmaWMgZHJpdmVycyBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsLCBidWlsdCBhcyBtb2R1bGVzLCBvciBjb21wbGV0ZWx5IGV4Y2x1ZGVkLiBJIGFudGljaXBhdGUgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgcHJvcGVyIGhhcmR3YXJlIGRpc2NvdmVyeSwgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGFuZCBvdmVyYWxsIHN5c3RlbSBjb21wYXRpYmlsaXR5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIFZpcnRpbyBkZXZpY2VzLCB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBWaXJ0aW8gYnVzLCBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncy4gS25vd2luZyB0aGUgaW5zIGFuZCBvdXRzIG9mIHRoaXMgS2NvbmZpZyBmaWxlIGlzIGdvaW5nIHRvIGJlIGtleSB0byBteSB3b3JrIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzo0NS44MzU3NTk1MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlydGlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0ICAgICAgICAgIFNvIGxvb2sgb3V0IGludG8geW91ciBkcml2ZXdheS4gIERvIHlvdSBoYXZlIGEgZmx5aW5nIGNhcj8gIElmXFxuICA4MjpcXHQgICAgICAgICAgc28sIHlvdSBjYW4gaGFwcGlseSBkaXNhYmxlIHRoaXMgb3B0aW9uIGFuZCB2aXJ0aW8gd2lsbCBub3RcXG4gIDgzOlxcdCAgICAgICAgICBicmVhay4gIE90aGVyd2lzZSwgbGVhdmUgaXQgc2V0LiAgVW5sZXNzIHlvdSdyZSB0ZXN0aW5nIHdoYXRcXG4gIDg0OlxcdCAgICAgICAgICBsaWZlIHdpbGwgYmUgbGlrZSBpbiBUaGUgRnV0dXJlLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBWSVJUSU9fVkRQQVxcbiAgODk6XFx0XFx0dHJpc3RhdGUgXFxcInZEUEEgZHJpdmVyIGZvciB2aXJ0aW8gZGV2aWNlc1xcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgOTE6XFx0XFx0c2VsZWN0IFZJUlRJT1xcbiAgOTI6XFx0XFx0aGVscFxcbiAgOTM6XFx0XFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWxcXG4gIDk0OlxcdFxcdCAgZGV2aWNlIGRyaXZlciBvdmVyIHZEUEEgYnVzLiBGb3IgdGhpcyB0byBiZSB1c2VmdWwsIHlvdSBuZWVkXFxuICA5NTpcXHRcXHQgIGFuIGFwcHJvcHJpYXRlIHZEUEEgZGV2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQgb3BlcmF0ZXMgb24gYVxcbiAgOTY6XFx0XFx0ICBwaHlzaWNhbCBkZXZpY2UgdG8gYWxsb3cgdGhlIGRhdGFwYXRoIG9mIHZpcnRpbyB0byBiZVxcbiAgOTc6XFx0XFx0ICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTAwOlxcdFxcbiAxMDE6XFx0Y29uZmlnIFZJUlRJT19QTUVNXFxuIDEwMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgdmlydGlvIHBtZW0gZHJpdmVyXFxcIlxcbiAxMDM6XFx0XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG4gMTA0OlxcdFxcdGRlcGVuZHMgb24gTElCTlZESU1NXFxuIDEwNTpcXHRcXHRoZWxwXFxuIDEwNjpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGFjY2VzcyB0byB2aXJ0aW8tcG1lbSBkZXZpY2VzLCBzdG9yYWdlIGRldmljZXNcXG4gMTA3OlxcdFxcdCAgdGhhdCBhcmUgbWFwcGVkIGludG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgLSBzaW1pbGFyIHRvIE5WRElNTXNcXG4gMTA4OlxcdFxcdCAgIC0gd2l0aCBhIHZpcnRpby1iYXNlZCBmbHVzaGluZyBpbnRlcmZhY2UuXFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTExOlxcdFxcbiAxMTI6XFx0Y29uZmlnIFZJUlRJT19CQUxMT09OXFxuIDExMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydGlvIGJhbGxvb24gZHJpdmVyXFxcIlxcbiAxMTQ6XFx0XFx0ZGVwZW5kcyBvbiBWSVJUSU9cXG4gMTE1OlxcdFxcdHNlbGVjdCBCQUxMT09OXFxuIDExNjpcXHRcXHRzZWxlY3QgUEFHRV9SRVBPUlRJTkdcXG4gMTE3OlxcdFxcdGhlbHBcXG4gMTE4OlxcdFxcdCBUaGlzIGRyaXZlciBzdXBwb3J0cyBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBhbW91bnRcXG4gMTE5OlxcdFxcdCBvZiBtZW1vcnkgd2l0aGluIGEgS1ZNIGd1ZXN0LlxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIFZJUlRJT19NRU1cXG4gMTI0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gbWVtIGRyaXZlclxcXCJcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IHx8IEFSTTY0IHx8IFJJU0NWIHx8IFMzOTBcXG4gMTI2OlxcdFxcdGRlcGVuZHMgb24gVklSVElPXFxuIDEyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuIDEyODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4gMTI5OlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuIDEzMDpcXHRcXHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxuIDEzMTpcXHRcXHRoZWxwXFxuIDEzMjpcXHRcXHQgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHZpcnRpby1tZW0gcGFyYXZpcnR1YWxpemVkIG1lbW9yeVxcbiAxMzM6XFx0XFx0IGRldmljZXMsIGFsbG93aW5nIHRvIGhvdHBsdWcgYW5kIGhvdHVucGx1ZyBtZW1vcnkuXFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdCBUaGlzIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgeDg2LTY0LCBhcm02NCwgcmlzY3YgYW5kIHMzOTAuXFxuIDEzNjpcXHRcXHQgQWx0aG91Z2ggaXQgc2hvdWxkIGNvbXBpbGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGF0IGltcGxlbWVudFxcbiAxMzc6XFx0XFx0IG1lbW9yeSBob3QodW4pcGx1ZywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFuZC9vciBjb21tb25cXG4gMTM4OlxcdFxcdCBjb2RlIGNoYW5nZXMgbWF5IGJlIHJlcXVpcmVkIGZvciB2aXJ0aW8tbWVtLCBrZHVtcCBhbmQga2V4ZWMgdG9cXG4gMTM5OlxcdFxcdCB3b3JrIGFzIGV4cGVjdGVkLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgSWYgdW5zdXJlLCBzYXkgTS5cXG4gMTQyOlxcdFxcbiAxNDM6XFx0Y29uZmlnIFZJUlRJT19JTlBVVFxcbiAxNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBpbnB1dCBkcml2ZXJcXFwiXFxuIDE0NTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbiAxNDY6XFx0XFx0ZGVwZW5kcyBvbiBJTlBVVFxcbiAxNDc6XFx0XFx0aGVscFxcbiAxNDg6XFx0XFx0IFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnRpbyBpbnB1dCBkZXZpY2VzIHN1Y2ggYXNcXG4gMTQ5OlxcdFxcdCBrZXlib2FyZHMsIG1pY2UgYW5kIHRhYmxldHMuXFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdCBJZiB1bnN1cmUsIHNheSBNLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRjb25maWcgVklSVElPX01NSU9cXG4gMTU0OlxcdFxcdHRyaXN0YXRlIFxcXCJQbGF0Zm9ybSBidXMgZHJpdmVyIGZvciBtZW1vcnkgbWFwcGVkIHZpcnRpbyBkZXZpY2VzXFxcIlxcbiAxNTU6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAxNTY6XFx0XFx0c2VsZWN0IFZJUlRJT1xcbiAxNTc6XFx0XFx0aGVscFxcbiAxNTg6XFx0XFx0IFRoaXMgZHJpdmVycyBwcm92aWRlcyBzdXBwb3J0IGZvciBtZW1vcnkgbWFwcGVkIHZpcnRpb1xcbiAxNTk6XFx0XFx0IHBsYXRmb3JtIGRldmljZSBkcml2ZXIuXFxuIDE2MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDUuODM1ODg0NTExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzA3MTI3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBSZW1vdGUgUHJvY2Vzc29yIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciByZW1vdGUgcHJvY2Vzc29ycy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgYGRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGUgcmVtb3RlcHJvYyBmcmFtZXdvcmsgYW5kIGl0cyBzdXBwb3J0ZWQgZGV2aWNlcy4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGBDT05GSUdfUkVNT1RFUFJPQ2AsIG9mIGNvdXJzZSwgYnV0IGFsc28gYW55IGRldmljZS1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgcmVzaWRlIHRoZXJlOiBvcHRpb25zIGZvciBlbmFibGluZyBzcGVjaWZpYyBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMsIHJlc291cmNlIHRhYmxlIGdlbmVyYXRpb24gY29uZmlndXJhdGlvbnMsIG9yIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24uIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyYWJsZSBhbmQgaG93IHRoZXkgYXJlIGV4cG9zZWQgdG8gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE2NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDcuODY2NjAwMjQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk1NTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkVNT1RFUFJPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3JlbW90ZXByb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9Mj1tZW51IFxcXCJSZW1vdGVwcm9jIGRyaXZlcnNcXFwiXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMy1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzo0OmNvbmZpZyBSRU1PVEVQUk9DXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctNS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBSZW1vdGUgUHJvY2Vzc29yIHN1YnN5c3RlbVxcXCJcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnPTE1PWlmIFJFTU9URVBST0NcXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzoxNzpjb25maWcgUkVNT1RFUFJPQ19DREVWXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiUmVtb3RlcHJvYyBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDc6NDcuOTUwNTYyMDc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyODYwMTA1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFZpcnRpbyBTeW5jaHJvbml6YXRpb24gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBhbGwgYWJvdXQgc3luY2hyb25pemluZyBjYWxsYmFja3MgZHVyaW5nIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCBzbyBpdCdzIHdvcnRoIGEgY2xvc2UgbG9vay5cblxuRmlyc3RseSwgdGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KWAgY2FsbGVkIGZyb20gYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAuIFRoaXMgc2lnbmFscyB0aGUgaW50ZW50IHRvIHN5bmNocm9uaXplIGFsbCB2aXJ0aW8gY2FsbGJhY2tzIG9uIHJlc2V0IG9yIHNodXRkb3duLlxuXG5Mb29raW5nIGRlZXBlciwgdGhlIHNlcmllcyB0aGVuIGFwcGxpZXMgdGhpcyB0byBpbmRpdmlkdWFsIGRyaXZlcnMuIGB2aXJ0aW9fdmRwYWAgbm93IHVzZXMgYSBgY2FsbGJhY2tfbG9ja2Agcndsb2NrLiBUaGF0IG1ha2VzIHNlbnNlIGZvciBlbnN1cmluZyBleGNsdXNpdmUgYWNjZXNzIGR1cmluZyBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFuZCByZXNldCBvcGVyYXRpb25zLiBgdmlydGlvX2lucHV0YCBoYXMgc29tZSBjaGVja3Mgb24gYHZpLVx1MDAzZXJlYWR5YCBpbiBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYCBiZWZvcmUgY2FsbGluZyBgdmlydGlucHV0X3F1ZXVlX2V2dGJ1ZmAgYW5kIGB2aXJ0cXVldWVfa2lja2AsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSB3YXkgdG8gcHJldmVudCBzZW5kaW5nIGV2ZW50cyB3aGVuIHRoZSBkZXZpY2UgaXNuJ3QgcmVhZHkuIFRoZSByZW9yZGVyaW5nIG9mIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBiZWZvcmUgYGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlYCBpbiBgdmlydGlucHV0X3JlbW92ZWAgYWxzbyBzZWVtcyBjb3JyZWN0IHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uXG5cblRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGByZW1vdGVwcm9jYCBjaGFuZ2VzLiBUaGV5J3ZlIGFkZGVkIFNSQ1Ugc3luY2hyb25pemF0aW9uIGZvciB2aXJ0cXVldWUgaW50ZXJydXB0IGNhbGxiYWNrcy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHJlbW90ZXByb2MgaXMgb2Z0ZW4gdXNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuIFNSQ1UgaXMgYSBnb29kIGNob2ljZSBpZiByZWFkIGFjY2VzcyBpcyBmcmVxdWVudCBhbmQgd3JpdGUgYWNjZXNzIGlzIGluZnJlcXVlbnQuXG5cblRoZSBQQ0kgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmFsIG9mIGB2cF9zeW5jaHJvbml6ZV92ZWN0b3JzYCBmcm9tIGB2cF9yZXNldGAsIGluZGljYXRlcyB0aGF0IHRoZSBzeW5jaHJvbml6YXRpb24gaXMgYmVpbmcgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCwgd2hpY2ggaXMgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIHJlZmFjdG9yaW5nJ3MgaW50ZW50LiBUaGUgZm9jdXMgb24gY2xlYW5pbmcgdXAgdGhlIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGZvY3VzaW5nIG9uIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaXMgZ29vZCwgaXQgY291bGQgYmUgYSBsYXJnZSBpbXBhY3QuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFRoYW5rZnVsbHksIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYCBpcyBjYWxsZWQgb24gdmlydGlvIHJlc2V0cyBhY3Jvc3MgYWxsIGRyaXZlcnMuIFRoZSBgdmlydGlvX2lucHV0YCBldmVudCBxdWV1ZSBpcyBhbHNvIGEgdmVyeSBhY3RpdmUgcGFydCBvZiB0aGUgc3lzdGVtLiBXZSBrbm93IGB2aXJ0aW9fdmRwYWAgaXMgcHJlc2VudC4gYHJlbW90ZXByb2NgIGFsc28gaW52b2x2ZXMgaW50ZXJydXB0IGFuZCBkZXZpY2UgY2FsbGJhY2tzLiBgdmlydGlvX3BjaWAgYW5kIGB2cF9yZXNldGAgYXJlIG9idmlvdXNseSBpbnZva2VkIGR1cmluZyBQQ0kgdmlydGlvIHJlc2V0LlxuXG5HaXZlbiB0aGUgY3JpdGVyaWEgb2YgXCJXb3J0aEZ1enppbmcsXCIgdGhpcyBwYXRjaCBzZXJpZXMgZGVmaW5pdGVseSBxdWFsaWZpZXMuIEl0IHRvdWNoZXMgY29yZSB2aXJ0aW8gYnVzIHJlc2V0IGxvZ2ljLCBtdWx0aXBsZSBkcml2ZXJzLCBhbmQgaW50cm9kdWNlcyBsb2NraW5nIHByaW1pdGl2ZXMuIEl0IGhpdHMgY29yZSBzdWJzeXN0ZW1zLCByZWFjaGFibGUgZHJpdmVycyAodmlydGlvKSwgYW5kIGludHJvZHVjZXMgcmVmYWN0b3JpbmcvY29kZSBjbGVhbnVwLiBJdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW5jbHVkZTpcbjEuIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYFxuMi4gYHZpcnRpb19kZXZpY2Vfc2h1dGRvd25gXG4zLiBgdmlydGlucHV0X3JlY3ZfZXZlbnRzYFxuNC4gYHZpcnRpbnB1dF9yZW1vdmVgXG41LiBgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiYFxuNi4gYHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic2BcbjcuIGBycHJvY192cV9pbnRlcnJ1cHRgXG44LiBgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2Nic2BcbjkuIGBycHJvY190eXBlX3JlbGVhc2VgXG4xMC4gYHJwcm9jX2FsbG9jYFxuYWxvbmcgd2l0aCBwb3RlbnRpYWxseSBgdnBfcmVzZXRgLCBldmVuIGlmIHRoZXkgbWF5IGJlIGBzdGF0aWNgLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgd2VsbC1kZWZpbmVkIHBhdGNoIHNlcmllcyB0aGF0IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgdGhlIHJlc2lsaWVuY2Ugb2YgdGhlIHZpcnRpbyBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNTowNzo1NS4yMzY1NzYxMTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODI0NDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2cF9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jPTg1PXN0YXRpYyB2b2lkIHZwX3NldF9zdGF0dXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHU4IHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmMtOTItXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYzo5MzpzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTk0LXtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYy0xOTEtXFx0LnNldF9zdGF0dXNcXHQ9IHZwX3NldF9zdGF0dXMsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYzoxOTI6XFx0LnJlc2V0XFx0XFx0PSB2cF9yZXNldCxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jLTE5My1cXHQuZmluZF92cXNcXHQ9IHZwX2ZpbmRfdnFzLFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz01MzU9c3RhdGljIHZvaWQgdnBfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYy01NDUtXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYzo1NDY6c3RhdGljIHZvaWQgdnBfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYy01NDcte1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYz0xMjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3BjaV9jb25maWdfbm9kZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYy0xMjI5LVxcdC5zZXRfc3RhdHVzXFx0PSB2cF9zZXRfc3RhdHVzLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmM6MTIzMDpcXHQucmVzZXRcXHRcXHQ9IHZwX3Jlc2V0LFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTIzMS1cXHQuZmluZF92cXNcXHQ9IHZwX21vZGVybl9maW5kX3ZxcyxcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmM9MTI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb19wY2lfY29uZmlnX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMtMTI0OS1cXHQuc2V0X3N0YXR1c1xcdD0gdnBfc2V0X3N0YXR1cyxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jOjEyNTA6XFx0LnJlc2V0XFx0XFx0PSB2cF9yZXNldCxcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jLTEyNTEtXFx0LmZpbmRfdnFzXFx0PSB2cF9tb2Rlcm5fZmluZF92cXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA3OjU1LjM1NDgyNDUwN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODIxMDA0MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IFRydWUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoZSByZWxldmFudCBkcml2ZXJzLiBJIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIGVuYWJsZWQgYnkgYFZJUlRJT2AsIGBWSVJUSU9fUENJYCwgYFZJUlRJT19WRFBBYCwgYFZJUlRJT19JTlBVVGAsIGFuZCBgUkVNT1RFUFJPQ2AuIFRvIGJlIGNlcnRhaW4sIEkgZG92ZSBhIGxpdHRsZSBkZWVwZXIgdG8gY2hlY2sgZGVwZW5kZW5jaWVzLiBgVklSVElPX1ZEUEFgIGRlcGVuZHMgb24gYFZEUEFgIGFuZCBzZWxlY3RzIGBWSVJUSU9gLCBgVklSVElPX0lOUFVUYCBkZXBlbmRzIG9uIGBWSVJUSU9gLCBgSU5QVVRgLCBhbmQgYFZJUlRJT19QQ0lgIGRlcGVuZHMgb24gYFBDSWAgYW5kIHNlbGVjdHMgYm90aCBgVklSVElPX1BDSV9MSUJgIGFuZCBgVklSVElPYC4gYFJFTU9URVBST0NgIGlzIGEgYm9vbGVhbiBjb25maWcuIFdpdGggdGhpcyBJIGhhZCBhIHZlcmlmaWVkIGxpc3Qgb2YgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nOiBgVklSVElPYCwgYFZJUlRJT19QQ0lgLCBgVklSVElPX1ZEUEFgLCBgVkRQQWAsIGBWSVJUSU9fSU5QVVRgLCBhbmQgYFJFTU9URVBST0NgLlxuXG5UaGVuLCBJIGxvb2tlZCBhdCBhIHNlbGVjdGlvbiBvZiBrZXkgc3ltYm9scyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvZGUgd2UgYXJlIGxpa2VseSB0byBleHBsb3JlLiBJIHBpY2tlZCBvdXQgYHZpcnRpb19yZXNldF9kZXZpY2VgLCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAsIGB2aXJ0aW5wdXRfcmVjdl9ldmVudHNgLCBgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiYCwgYHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic2AsIGBycHJvY192cV9pbnRlcnJ1cHRgLCBgcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2Nic2AsIGFuZCBgcnByb2NfYWxsb2NgIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJlc3QuIEJ1dCBhZnRlciBhIHF1aWNrIHJldmlldywgaXQncyBjbGVhciB0aGVzZSBhcmUgc3BlY2lmaWMgY2FsbGJhY2tzIGFuZCBlbnRyeXBvaW50cywgcmF0aGVyIHRoYW4gYSBicm9hZCwgdWJpcXVpdG91cyBob3QgcGF0aHMgaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBkcml2ZXJzLlxuXG5BZnRlciB0aGlzIHF1aWNrIHJldmlldywgSSdtIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBvbWlzc2lvbnMgb3IgcmVkdW5kYW5jaWVzLiBHaXZlbiB0aGlzIGluZm9ybWF0aW9uLCBteSB2ZXJkaWN0IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdtIHJlYWR5IHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwNDIsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA4OjAwLjE3NTgzMTUyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY2NzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVElPXCIsXG4gICAgXCJWSVJUSU9fUENJXCIsXG4gICAgXCJWSVJUSU9fVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVklSVElPX0lOUFVUXCIsXG4gICAgXCJSRU1PVEVQUk9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydGlvX3Jlc2V0X2RldmljZVwiLFxuICAgIFwidmlydGlvX2RldmljZV9zaHV0ZG93blwiLFxuICAgIFwidmlydGlucHV0X3JlY3ZfZXZlbnRzXCIsXG4gICAgXCJ2aXJ0aW9fdmRwYV92aXJ0cXVldWVfY2JcIixcbiAgICBcInZpcnRpb192ZHBhX3N5bmNocm9uaXplX2Nic1wiLFxuICAgIFwicnByb2NfdnFfaW50ZXJydXB0XCIsXG4gICAgXCJycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzXCIsXG4gICAgXCJycHJvY19hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIHZpcnRpbyBkZXZpY2UgcmVzZXQgYW5kIHNodXRkb3duIGhhbmRsaW5nIGFjcm9zcyBjb3JlIHZpcnRpbywgdmlydGlvLWlucHV0LCB2aXJ0aW8tdmRwYSwgYW5kIHJlbW90ZXByb2MgdG8gcHJvcGVybHkgc3luY2hyb25pemUgcnVubmluZyB2aXJ0cXVldWUgY2FsbGJhY2tzIHVzaW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChTUkNVIGluIHJlbW90ZXByb2MsIHJ3bG9jayBpbiB2aXJ0aW9fdmRwYSwgYW5kIHN5bmNocm9uaXplX2NicyBpbiB2aXJ0aW8gY29yZSkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsIGJ1cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVklSVElPX1BDSVwiLFxuICAgIFwiVklSVElPX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZJUlRJT19JTlBVVFwiLFxuICAgIFwiUkVNT1RFUFJPQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb19yZXNldF9kZXZpY2VcIixcbiAgICBcInZpcnRpb19kZXZpY2Vfc2h1dGRvd25cIixcbiAgICBcInZpcnRpbnB1dF9yZWN2X2V2ZW50c1wiLFxuICAgIFwidmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiXCIsXG4gICAgXCJ2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnNcIixcbiAgICBcInJwcm9jX3ZxX2ludGVycnVwdFwiLFxuICAgIFwicnByb2NfdmlydGlvX3N5bmNocm9uaXplX2Nic1wiLFxuICAgIFwicnByb2NfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyB2aXJ0aW8gZGV2aWNlIHJlc2V0IGFuZCBzaHV0ZG93biBoYW5kbGluZyBhY3Jvc3MgY29yZSB2aXJ0aW8sIHZpcnRpby1pbnB1dCwgdmlydGlvLXZkcGEsIGFuZCByZW1vdGVwcm9jIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyB1c2luZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoU1JDVSBpbiByZW1vdGVwcm9jLCByd2xvY2sgaW4gdmlydGlvX3ZkcGEsIGFuZCBzeW5jaHJvbml6ZV9jYnMgaW4gdmlydGlvIGNvcmUpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbCBidXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtIGxvZ2ljLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDg6MDAuMzI3NTA4NTExWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4ODg4MDcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA4OjAwLjMyODM1ODM2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUzODgwMjQyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGNhbGxiYWNrIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIChzeW5jaHJvbml6ZV9jYnMpIGFjcm9zcyB2YXJpb3VzIFZpcnRJTyB0cmFuc3BvcnRzIGFuZCBkcml2ZXJzIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpIHRvIGVuc3VyZSB0aGF0IHJ1bm5pbmcgdmlydHF1ZXVlIGNhbGxiYWNrcyBjb21wbGV0ZSBiZWZvcmUgdmlydGlvIGRldmljZSByZXNldCwgc2h1dGRvd24sIG9yIHVucmVnaXN0cmF0aW9uLlxcblxcbktleSBwb2ludHMgcmVnYXJkaW5nIGRldGVjdG9yIGFwcGxpY2FiaWxpdHk6XFxuMS4gU3luY2hyb25pemF0aW9uIGFuZCBDb25jdXJyZW5jeTogVGhlIGNoYW5nZXMgYWRkIFNSQ1UgKGB2cV9zcmN1YCksIHJ3bG9ja3MgKGBjYWxsYmFja19sb2NrYCksIHNwaW5sb2NrIGZsdXNoZXMsIGFuZCBJUlEgc3luY2hyb25pemF0aW9uIHRvIGVsaW1pbmF0ZSByYWNlcyB3aGVyZSB2aXJ0cXVldWUgY2FsbGJhY2tzIGV4ZWN1dGUgY29uY3VycmVudGx5IGR1cmluZyB0ZWFyZG93bi5cXG4yLiBGYWlsdXJlIE1vZGVzOiBQb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGludm9sdmUgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGRlYWRsb2Nrcywgc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpIG9yIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgdG91Y2ggdXNlci1jb3B5IGJvdW5kYXJpZXMgb3IgbmV0bGluay9pb2N0bCBvdXRwdXQgYnVmZmVycywgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIGFsbCBuZXcgc3luY2hyb25pemF0aW9uIHN0cnVjdHVyZXMgKGBpbml0X3NyY3Vfc3RydWN0YCwgYHJ3bG9ja19pbml0YCkuXFxuXFxuQ29uc2VxdWVudGx5LCBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBmdXp6aW5nIGJ1aWxkcyBhcmUgZnVsbHkgYWRlcXVhdGUgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1YzA4MzE2YjYzZGE5MjMxMWI2Y2NmOGVjY2NjMDRiYjA5OWNkZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjA3OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYyBiL2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmNcbmluZGV4IDc0MjVhODU0ODE0MWEuLmJhY2E2YjA5ZTlhYzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG4rKysgYi9hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICAqXG4gICogQmFzZWQgb24gVmlydGlvIE1NSU8gZHJpdmVyIGJ5IFBhd2VsIE1vbGwsIGNvcHlyaWdodCAyMDExLTIwMTQsIEFSTSBMdGQuXG4gICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuQEAgLTg2OSw2ICs4NzAsMTQgQEAgc3RhdGljIHZvaWQgdnVfcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHR2dV9kZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdnVfc3luY2hyb25pemVfY2JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuK3tcbitcdHN0cnVjdCB2aXJ0aW9fdW1sX2RldmljZSAqdnVfZGV2ID0gdG9fdmlydGlvX3VtbF9kZXZpY2UodmRldik7XG4rXG4rXHRpZiAodnVfZGV2LVx1MDAzZWlycSBcdTAwM2U9IDApXG4rXHRcdHN5bmNocm9uaXplX2lycSh2dV9kZXYtXHUwMDNlaXJxKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdnVfZGVsX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aXJ0aW9fdW1sX3ZxX2luZm8gKmluZm8gPSB2cS1cdTAwM2Vwcml2O1xuQEAgLTExMjEsNiArMTEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgdmlydGlvX3VtbF9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0ID0gdnVfcmVzZXQsXG4gXHQuZmluZF92cXMgPSB2dV9maW5kX3ZxcyxcbiBcdC5kZWxfdnFzID0gdnVfZGVsX3ZxcyxcbitcdC5zeW5jaHJvbml6ZV9jYnMgPSB2dV9zeW5jaHJvbml6ZV9jYnMsXG4gXHQuZ2V0X2ZlYXR1cmVzID0gdnVfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdnVfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWUgPSB2dV9idXNfbmFtZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jIGIvZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5veC9tbHhiZi10bWZpZm8uY1xuaW5kZXggM2M2NDA4NTgxMzczYi4uYzI2MGUzYTE1NDRlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmNcbkBAIC0xMTM1LDYgKzExMzUsMTkgQEAgc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHRtX3ZkZXYtXHUwMDNlc3RhdHVzID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2ID0gbWx4YmZfdmRldl90b190bWZpZm8odmRldik7XG4rXHRzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvID0gdG1fdmRldi1cdTAwM2V2cmluZ3NbMF0uZmlmbztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmlmby1cdTAwM2VzcGluX2xvY2spOyBpKyspIHtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmlmby1cdTAwM2VzcGluX2xvY2tbaV0sIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaWZvLVx1MDAzZXNwaW5fbG9ja1tpXSwgZmxhZ3MpO1xuK1x0fVxuK31cbitcbiAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gZmllbGQuICovXG4gc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9mZnNldCxcbkBAIC0xMTc5LDYgKzExOTIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIG1seGJmX3RtZmlmb192aXJ0aW9fY29uZmlnX29wcyA9IHtcbiBcdC5maW5kX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZmluZF92cXMsXG4gXHQuZGVsX3ZxcyA9IG1seGJmX3RtZmlmb192aXJ0aW9fZGVsX3ZxcyxcbiBcdC5yZXNldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMsXG4gXHQuc2V0X3N0YXR1cyA9IG1seGJmX3RtZmlmb192aXJ0aW9fc2V0X3N0YXR1cyxcbiBcdC5nZXRfc3RhdHVzID0gbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfc3RhdHVzLFxuIFx0LmdldCA9IG1seGJmX3RtZmlmb192aXJ0aW9fZ2V0LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuaW5kZXggMWVkNDA2NzE0ODQ5MS4uMWIxMzlkMjVhYjJiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuY1xuKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jXG5AQCAtMjQxMCw2ICsyNDEwLDcgQEAgc3RhdGljIHZvaWQgcnByb2NfdHlwZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnJwcm9jLVx1MDAzZWRldiwgXCJyZWxlYXNpbmcgJXNcXG5cIiwgcnByb2MtXHUwMDNlbmFtZSk7XG4gXG4rXHRjbGVhbnVwX3NyY3Vfc3RydWN0KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuIFx0aWRyX2Rlc3Ryb3koXHUwMDI2cnByb2MtXHUwMDNlbm90aWZ5aWRzKTtcbiBcbiBcdGlmIChycHJvYy1cdTAwM2VpbmRleCBcdTAwM2U9IDApXG5AQCAtMjUwNyw2ICsyNTA4LDExIEBAIHN0cnVjdCBycHJvYyAqcnByb2NfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0aWYgKCFycHJvYylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KSkge1xuK1x0XHRrZnJlZShycHJvYyk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuIFx0cnByb2MtXHUwMDNlcHJpdiA9IFx1MDAyNnJwcm9jWzFdO1xuIFx0cnByb2MtXHUwMDNlYXV0b19ib290ID0gdHJ1ZTtcbiBcdHJwcm9jLVx1MDAzZWVsZl9jbGFzcyA9IEVMRkNMQVNTTk9ORTtcbkBAIC0yNTcxLDYgKzI1NzcsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2FsbG9jKTtcbiAgKlxuICAqIElmIG5vIG9uZSBob2xkcyBhbnkgcmVmZXJlbmNlIHRvIHJwcm9jIGFueW1vcmUsIHRoZW4gaXRzIHJlZmNvdW50IHdvdWxkXG4gICogbm93IGRyb3AgdG8gemVybywgYW5kIGl0IHdvdWxkIGJlIGZyZWVkLlxuKyAqXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGlmIHRoaXMgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNlLlxuICAqL1xuIHZvaWQgcnByb2NfZnJlZShzdHJ1Y3QgcnByb2MgKnJwcm9jKVxuIHtcbkBAIC0yNTg2LDYgKzI1OTQsOCBAQCBFWFBPUlRfU1lNQk9MKHJwcm9jX2ZyZWUpO1xuICAqXG4gICogSWYgbm8gb25lIGhvbGRzIGFueSByZWZlcmVuY2UgdG8gcnByb2MgYW55bW9yZSwgdGhlbiBpdHMgcmVmY291bnQgd291bGRcbiAgKiBub3cgZHJvcCB0byB6ZXJvLCBhbmQgaXQgd291bGQgYmUgZnJlZWQuXG4rICpcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgaWYgdGhpcyBkcm9wcyB0aGUgbGFzdCByZWZlcmVuY2UuXG4gICovXG4gdm9pZCBycHJvY19wdXQoc3RydWN0IHJwcm9jICpycHJvYylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuaW5kZXggZDVlOWZmMDQ1YTI4YS4uZWNjMDIyZTM1NGRiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY192aXJ0aW8uY1xuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NyY3UuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVtb3RlcHJvY19pbnRlcm5hbC5oXCJcbiBcbkBAIC04OSwxNCArOTAsMTkgQEAgc3RhdGljIGJvb2wgcnByb2NfdmlydGlvX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBpcnFyZXR1cm5fdCBycHJvY192cV9pbnRlcnJ1cHQoc3RydWN0IHJwcm9jICpycHJvYywgaW50IG5vdGlmeWlkKVxuIHtcbiBcdHN0cnVjdCBycHJvY192cmluZyAqcnZyaW5nO1xuK1x0aW50IHNyY3VfaWR4O1xuK1x0aXJxcmV0dXJuX3QgcmV0O1xuK1xuK1x0c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1KTtcbiBcbiBcdGRldl9kYmcoXHUwMDI2cnByb2MtXHUwMDNlZGV2LCBcInZxIGluZGV4ICVkIGlzIGludGVycnVwdGVkXFxuXCIsIG5vdGlmeWlkKTtcbiBcbiBcdHJ2cmluZyA9IGlkcl9maW5kKFx1MDAyNnJwcm9jLVx1MDAzZW5vdGlmeWlkcywgbm90aWZ5aWQpO1xuLVx0aWYgKCFydnJpbmcgfHwgIXJ2cmluZy1cdTAwM2V2cSlcbi1cdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0cmV0ID0gcnZyaW5nIFx1MDAyNlx1MDAyNiBydnJpbmctXHUwMDNldnEgPyB2cmluZ19pbnRlcnJ1cHQoMCwgcnZyaW5nLVx1MDAzZXZxKSA6IElSUV9OT05FO1xuK1xuK1x0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZycHJvYy1cdTAwM2V2cV9zcmN1LCBzcmN1X2lkeCk7XG4gXG4tXHRyZXR1cm4gdnJpbmdfaW50ZXJydXB0KDAsIHJ2cmluZy1cdTAwM2V2cSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJwcm9jX3ZxX2ludGVycnVwdCk7XG4gXG5AQCAtMjQyLDYgKzI0OCwxMyBAQCBzdGF0aWMgdm9pZCBycHJvY192aXJ0aW9fcmVzZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRkZXZfZGJnKFx1MDAyNnZkZXYtXHUwMDNlZGV2LCBcInJlc2V0ICFcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJwcm9jX3ZpcnRpb19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHJwcm9jICpycHJvYyA9IHZkZXZfdG9fcnByb2ModmRldik7XG4rXG4rXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNnJwcm9jLVx1MDAzZXZxX3NyY3UpO1xuK31cbitcbiAvKiBwcm92aWRlIHRoZSB2ZGV2IGZlYXR1cmVzIGFzIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZSAqL1xuIHN0YXRpYyB1NjQgcnByb2NfdmlydGlvX2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiB7XG5AQCAtMzMwLDYgKzM0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZpZ19vcHMgcnByb2NfdmlydGlvX2NvbmZpZ19vcHMgPSB7XG4gXHQuZmluZF92cXNcdD0gcnByb2NfdmlydGlvX2ZpbmRfdnFzLFxuIFx0LmRlbF92cXNcdD0gcnByb2NfdmlydGlvX2RlbF92cXMsXG4gXHQucmVzZXRcdFx0PSBycHJvY192aXJ0aW9fcmVzZXQsXG4rXHQuc3luY2hyb25pemVfY2JzID0gcnByb2NfdmlydGlvX3N5bmNocm9uaXplX2NicyxcbiBcdC5zZXRfc3RhdHVzXHQ9IHJwcm9jX3ZpcnRpb19zZXRfc3RhdHVzLFxuIFx0LmdldF9zdGF0dXNcdD0gcnByb2NfdmlydGlvX2dldF9zdGF0dXMsXG4gXHQuZ2V0XHRcdD0gcnByb2NfdmlydGlvX2dldCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvdmlydGlvL3ZpcnRpb19jY3cuYyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5pbmRleCBiYWI2Y2FkM2ZkNWNlLi41NTJkNzc5OTgwMTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmNcbisrKyBiL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jXG5AQCAtMTA2Miw3ICsxMDYyLDcgQEAgc3RhdGljIHZvaWQgdmlydGlvX2Njd19zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4gXHRzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gdG9fdmNfZGV2aWNlKHZkZXYpO1xuIFx0c3RydWN0IGFpcnFfaW5mbyAqaW5mbyA9IHZjZGV2LVx1MDAzZWFpcnFfaW5mbztcbiBcbi1cdGlmIChpbmZvKSB7XG4rXHRpZiAodmNkZXYtXHUwMDNlaXNfdGhpbmludCBcdTAwMjZcdTAwMjYgaW5mbykge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIGRldmljZSB1c2VzIGFkYXB0ZXIgaW50ZXJydXB0czogc3luY2hyb25pemUgd2l0aFxuIFx0XHQgKiB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsZWQgYnkgdmlydGlvX2FpcnFfaGFuZGxlcigpXG5AQCAtMTIwNCwxMyArMTIwNCwxMSBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LFxuIFx0XHRcdHZjZGV2LVx1MDAzZWVyciA9IC1FSU87XG4gXHR9XG4gXHR2aXJ0aW9fY2N3X2NoZWNrX2FjdGl2aXR5KHZjZGV2LCBhY3Rpdml0eSk7XG4tI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTlxuIFx0LypcbiBcdCAqIFBhaXJlZCB3aXRoIHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzKCkgYW5kIGludGVycnVwdHMgYXJlXG4gXHQgKiBkaXNhYmxlZCBoZXJlLlxuIFx0ICovXG4gXHRyZWFkX2xvY2soXHUwMDI2dmNkZXYtXHUwMDNlaXJxX2xvY2spO1xuLSNlbmRpZlxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBpbmRpY2F0b3JzKHZjZGV2KSxcbiBcdFx0XHQgc2l6ZW9mKCppbmRpY2F0b3JzKHZjZGV2KSkgKiBCSVRTX1BFUl9CWVRFKSB7XG4gXHRcdC8qIFRoZSBiaXQgY2xlYXIgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSB2cmluZyBraWNrLiAqL1xuQEAgLTEyMTksOSArMTIxNyw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsXG4gXHRcdHZxID0gdmlydGlvX2Njd192cV9ieV9pbmQodmNkZXYsIGkpO1xuIFx0XHR2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfVklSVElPX0hBUkRFTl9OT1RJRklDQVRJT05cbiBcdHJlYWRfdW5sb2NrKFx1MDAyNnZjZGV2LVx1MDAzZWlycV9sb2NrKTtcbi0jZW5kaWZcbiBcdGlmICh0ZXN0X2JpdCgwLCBpbmRpY2F0b3JzMih2Y2RldikpKSB7XG4gXHRcdHZpcnRpb19jb25maWdfY2hhbmdlZChcdTAwMjZ2Y2Rldi1cdTAwM2V2ZGV2KTtcbiBcdFx0Y2xlYXJfYml0KDAsIGluZGljYXRvcnMyKHZjZGV2KSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuaW5kZXggNzViYjRmZmUzYjg3Ny4uYWQxYzUwYjhhOTRlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uY1xuQEAgLTI2NCw2ICsyNjQsNyBAQCB2b2lkIHZpcnRpb19yZXNldF9kZXZpY2Uoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldilcbiAjZW5kaWZcbiBcbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Jlc2V0X2RldmljZSk7XG4gXG5AQCAtNDI0LDYgKzQyNSw3IEBAIHZvaWQgdmlydGlvX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgdmlydGlvX2RldmljZSAqZGV2KVxuIFx0ICogU29tZSBkZXZpY2VzIGdldCB3ZWRnZWQgaWYgdGhpcyBoYXBwZW5zLCBzbyByZXNldCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QuXG4gXHQgKi9cbiBcdGRldi1cdTAwM2Vjb25maWctXHUwMDNlcmVzZXQoZGV2KTtcbitcdHZpcnRpb19zeW5jaHJvbml6ZV9jYnMoZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX2RldmljZV9zaHV0ZG93bik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2lucHV0LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuaW5kZXggZGVlYzI0ZThlNjgyOC4uN2I2NTRhZjBhNDJjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19pbnB1dC5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY1xuQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0YXRpYyB2b2lkIHZpcnRpbnB1dF9yZWN2X2V2ZW50cyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiBcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShldmVudC1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShldmVudC1cdTAwM2V2YWx1ZSkpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHRpZiAoIXZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0dmlydGlucHV0X3F1ZXVlX2V2dGJ1Zih2aSwgZXZlbnQpO1xuIFx0XHR9XG4tXHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbitcdFx0aWYgKHZpLVx1MDAzZXJlYWR5KVxuK1x0XHRcdHZpcnRxdWV1ZV9raWNrKHZxKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0zNTAsOCArMzUzLDkgQEAgc3RhdGljIHZvaWQgdmlydGlucHV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdHZpLVx1MDAzZXJlYWR5ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuK1x0LyogQ2FsbGJhY2tzIHVzZSB2aS1cdTAwM2VpZGV2LiAqL1xuIFx0dmlydGlvX3Jlc2V0X2RldmljZSh2ZGV2KTtcbitcdGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHZpLVx1MDAzZWlkZXYpO1xuIFx0d2hpbGUgKChidWYgPSB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYodmktXHUwMDNlc3RzKSkgIT0gTlVMTClcbiBcdFx0a2ZyZWUoYnVmKTtcbiBcdHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWRlbF92cXModmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9sZWdhY3kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNcbmluZGV4IGQ5Y2JiMDJiMzVhMTEuLjgxMTVhYTM5ZTAxZTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2xlZ2FjeS5jXG5AQCAtOTgsOCArOTgsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdC8qIEZsdXNoIG91dCB0aGUgc3RhdHVzIHdyaXRlLCBhbmQgZmx1c2ggaW4gZGV2aWNlIHdyaXRlcyxcbiBcdCAqIGluY2x1ZGluZyBNU2ktWCBpbnRlcnJ1cHRzLCBpZiBhbnkuICovXG4gXHR2cF9sZWdhY3lfZ2V0X3N0YXR1cyhcdTAwMjZ2cF9kZXYtXHUwMDNlbGRldik7XG4tXHQvKiBGbHVzaCBwZW5kaW5nIFZRL2NvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiAqL1xuLVx0dnBfc3luY2hyb25pemVfdmVjdG9ycyh2ZGV2KTtcbiB9XG4gXG4gc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jXG5pbmRleCA2ZDhhZTJhNmE4Y2FmLi5jOWUyMTMxN2M1MWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY1xuQEAgLTU1OSw5ICs1NTksNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbiBcdFx0bXNsZWVwKDEpO1xuIFxuIFx0dnBfbW9kZXJuX2F2cV9jbGVhbnVwKHZkZXYpO1xuLVxuLVx0LyogRmx1c2ggcGVuZGluZyBWUS9jb25maWd1cmF0aW9uIGNhbGxiYWNrcy4gKi9cbi1cdHZwX3N5bmNocm9uaXplX3ZlY3RvcnModmRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdnBfYWN0aXZlX3ZxKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1MTYgbXNpeF92ZWMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkcGEuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNcbmluZGV4IGRlMmFmNjk2ZGU2Y2EuLjRmOWU3MGMxMzMyZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG4rKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRwYS5jXG5AQCAtMjcsNiArMjcsNyBAQFxuIHN0cnVjdCB2aXJ0aW9fdmRwYV9kZXZpY2Uge1xuIFx0c3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjtcbiBcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYTtcbitcdHJ3bG9ja190IGNhbGxiYWNrX2xvY2s7XG4gXHR1NjQgZmVhdHVyZXM7XG4gfTtcbiBcbkBAIC0xMjMsOCArMTI0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB2aXJ0aW9fdmRwYV9jb25maWdfY2Iodm9pZCAqcHJpdmF0ZSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiKHZvaWQgKnByaXZhdGUpXG4ge1xuIFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSBwcml2YXRlO1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGlycXJldHVybl90IHJldDtcbiBcbi1cdHJldHVybiB2cmluZ19pbnRlcnJ1cHQoMCwgdnEpO1xuK1x0dmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZxLVx1MDAzZXZkZXYpO1xuK1x0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2ssIGZsYWdzKTtcbitcdHJldCA9IHZyaW5nX2ludGVycnVwdCgwLCB2cSk7XG4rXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkX2Rldi1cdTAwM2VjYWxsYmFja19sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB2aXJ0aW9fdmRwYV9zeW5jaHJvbml6ZV9jYnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHZpcnRpb192ZHBhX2RldmljZSAqdmRfZGV2ID0gdG9fdmlydGlvX3ZkcGFfZGV2aWNlKHZkZXYpO1xuK1xuK1x0d3JpdGVfbG9ja19pcnEoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuK1x0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ2ZF9kZXYtXHUwMDNlY2FsbGJhY2tfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpcbkBAIC00MzksNiArNDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fdmRwYV9jb25maWdfb3BzID0ge1xuIFx0LnJlc2V0XHRcdD0gdmlydGlvX3ZkcGFfcmVzZXQsXG4gXHQuZmluZF92cXNcdD0gdmlydGlvX3ZkcGFfZmluZF92cXMsXG4gXHQuZGVsX3Zxc1x0PSB2aXJ0aW9fdmRwYV9kZWxfdnFzLFxuK1x0LnN5bmNocm9uaXplX2NicyA9IHZpcnRpb192ZHBhX3N5bmNocm9uaXplX2NicyxcbiBcdC5nZXRfZmVhdHVyZXNcdD0gdmlydGlvX3ZkcGFfZ2V0X2ZlYXR1cmVzLFxuIFx0LmZpbmFsaXplX2ZlYXR1cmVzID0gdmlydGlvX3ZkcGFfZmluYWxpemVfZmVhdHVyZXMsXG4gXHQuYnVzX25hbWVcdD0gdmlydGlvX3ZkcGFfYnVzX25hbWUsXG5AQCAtNDcyLDYgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgdmlydGlvX3ZkcGFfcHJvYmUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKVxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuY29uZmlnID0gXHUwMDI2dmlydGlvX3ZkcGFfY29uZmlnX29wcztcbiBcdHZkX2Rldi1cdTAwM2V2ZGV2Lm1hcCA9IHZkcGEtXHUwMDNlbWFwO1xuIFx0dmRfZGV2LVx1MDAzZXZkcGEgPSB2ZHBhO1xuK1x0cndsb2NrX2luaXQoXHUwMDI2dmRfZGV2LVx1MDAzZWNhbGxiYWNrX2xvY2spO1xuIFxuIFx0dmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID0gb3BzLVx1MDAzZWdldF9kZXZpY2VfaWQodmRwYSk7XG4gXHRpZiAodmRfZGV2LVx1MDAzZXZkZXYuaWQuZGV2aWNlID09IDApXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZW1vdGVwcm9jLmggYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuaW5kZXggYTQ0MzY4NzM3YjM5YS4uYWQ2YmNjYmRmYWJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JlbW90ZXByb2MuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcmN1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92aXJ0aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuQEAgLTIzMCw2ICsyMzEsNyBAQCBlbnVtIHJwcm9jX2ZlYXR1cmVzIHtcbiAgKiBAcnZkZXZzOiBsaXN0IG9mIHJlbW90ZSB2aXJ0aW8gZGV2aWNlc1xuICAqIEBzdWJkZXZzOiBsaXN0IG9mIHN1YmRldmljZXMsIHRvIGZvbGxvd2luZyB0aGUgcnVubmluZyBzdGF0ZVxuICAqIEBub3RpZnlpZHM6IGlkciBmb3IgZHluYW1pY2FsbHkgYXNzaWduaW5nIHJwcm9jLXdpZGUgdW5pcXVlIG5vdGlmeSBpZHNcbisgKiBAdnFfc3JjdTogU1JDVSBkb21haW4gZm9yIHZpcnRxdWV1ZSBjYWxsYmFja3NcbiAgKiBAaW5kZXg6IGluZGV4IG9mIHRoaXMgcnByb2MgZGV2aWNlXG4gICogQGF0dGFjaF93b3JrOiB3b3JrcXVldWUgZm9yIGF0dGFjaGluZyBycHJvY1xuICAqIEBjcmFzaF9oYW5kbGVyOiB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGEgY3Jhc2hcbkBAIC0yNzYsNiArMjc4LDcgQEAgc3RydWN0IHJwcm9jIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgcnZkZXZzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzO1xuIFx0c3RydWN0IGlkciBub3RpZnlpZHM7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdnFfc3JjdTtcbiBcdGludCBpbmRleDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBhdHRhY2hfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaF9oYW5kbGVyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbmluZGV4IDY5Zjg0ZWE4NWQ3MWEuLjg2ODRhMWUyNjhlZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmhcbkBAIC03MSw5ICs3MSw5IEBAIHN0cnVjdCB2aXJ0cXVldWVfaW5mbyB7XG4gICpcdFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yIHN0YXR1c1xuICAqIEBkZWxfdnFzOiBmcmVlIHZpcnRxdWV1ZXMgZm91bmQgYnkgZmluZF92cXMoKS5cbiAgKiBAc3luY2hyb25pemVfY2JzOiBzeW5jaHJvbml6ZSB3aXRoIHRoZSB2aXJ0cXVldWUgY2FsbGJhY2tzIChvcHRpb25hbClcbi0gKiAgICAgIFRoZSBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIG9uIHRoZVxuLSAqICAgICAgcXVldWUgYmVmb3JlIGl0IGFyZSB2aXNpYmxlIHRvIHRoZSB2cmluZ19pbnRlcnJ1cHQoKSB0aGF0IGlzXG4tICogICAgICBjYWxsZWQgYWZ0ZXIgaXQuXG4rICogICAgICBXYWl0IGZvciBydW5uaW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4gTWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlXG4rICogICAgICBxdWV1ZSBiZWZvcmUgdGhpcyBjYWxsIG11c3QgYmUgdmlzaWJsZSB0byB2cmluZ19pbnRlcnJ1cHQoKSBjYWxsc1xuKyAqICAgICAgdGhhdCBmb2xsb3cgaXQuXG4gICogICAgICB2ZGV2OiB0aGUgdmlydGlvX2RldmljZVxuICAqIEBnZXRfZmVhdHVyZXM6IGdldCB0aGUgYXJyYXkgb2YgZmVhdHVyZSBiaXRzIGZvciB0aGlzIGRldmljZS5cbiAgKlx0dmRldjogdGhlIHZpcnRpb19kZXZpY2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjA4OjAwLjMyODM1OTkzMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTM4Nzk3OTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnRpbyBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZml4IGZvciB0aGUgdmlydGlvIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGRldmljZSByZXNldCwgc2h1dGRvd24sIGFuZCByZW1vdmFsIHNjZW5hcmlvcy4gSXQgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHZhcmlldHkgb2YgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gdmlydHF1ZXVlIGNhbGxiYWNrcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCBkZXZpY2UgbGlmZWN5Y2xlIGV2ZW50cy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhczpcblxuMS4gIGBhcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jYDogVGhpcyBhZGRzIGEgYHZ1X3N5bmNocm9uaXplX2Nic2AgY2FsbGJhY2sgd2hpY2ggY2FsbHMgYHN5bmNocm9uaXplX2lycWAuIFN0cmFpZ2h0Zm9yd2FyZCBJUlEgc3luY2hyb25pemF0aW9uLlxuMi4gIGBkcml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jYDogIFRoaXMgb25lIGFkZHMgYG1seGJmX3RtZmlmb192aXJ0aW9fc3luY2hyb25pemVfY2JzYCB0aGF0IHRha2VzIGFuZCByZWxlYXNlcyBzcGlubG9ja3MuIFNlZW1zIGxpa2Ugc3RhbmRhcmQgc3BpbmxvY2sgdXNhZ2Ugd2l0aGluIHRoaXMgZHJpdmVyLlxuMy4gIGBkcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmNgLCBgZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfdmlydGlvLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvcmVtb3RlcHJvYy5oYDogIFRoZSByZW1vdGVwcm9jIGNoYW5nZXMgYXJlIGludGVyZXN0aW5nLiBJdCBpbnRyb2R1Y2VzIGFuIGBzcmN1X3N0cnVjdGAgKGB2cV9zcmN1YCkgdG8gdGhlIGBycHJvY2Agc3RydWN0dXJlLCBpbml0aWFsaXppbmcgYW5kIGNsZWFuaW5nIGl0IHVwIGFwcHJvcHJpYXRlbHkuICBJdCB1c2VzIGBzcmN1X3JlYWRfbG9ja2AvYHVubG9ja2Agd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYWRkcyBhIGBycHJvY192aXJ0aW9fc3luY2hyb25pemVfY2JzYCB0aGF0IGNhbGxzIGBzeW5jaHJvbml6ZV9zcmN1YC4gVGhpcyBpcyBhIGNsYXNzaWMgU1JDVSB1c2FnZSB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByZWFkcyBkdXJpbmcgcmVzZXQuXG40LiAgYGRyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jYDogIFNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHZpcnRpb19jY3dfc3luY2hyb25pemVfY2JzYCBjaGVjaywgYW5kIHRoZSByZW1vdmFsIG9mIGEgYENPTkZJR19WSVJUSU9fSEFSREVOX05PVElGSUNBVElPTmAgZ3VhcmQgYXJvdW5kIHNvbWUgbG9ja2luZy4gIEl0J3MgbGlrZWx5IHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IHN5bmNocm9uaXphdGlvbiBsb2dpYyBnaXZlbiB0aGUgb3RoZXIgY2hhbmdlcy5cbjUuICBgZHJpdmVycy92aXJ0aW8vdmlydGlvLmNgOiAgVGhlIGNvcmUgY2hhbmdlIGhlcmU6IGFkZHMgYSBjYWxsIHRvIGB2aXJ0aW9fc3luY2hyb25pemVfY2JzYCB3aXRoaW4gYHZpcnRpb19yZXNldF9kZXZpY2VgIGFuZCBgdmlydGlvX2RldmljZV9zaHV0ZG93bmAuIFRoaXMgaXMgdGhlIGhvb2sgZm9yIGFsbCB0aGUgb3RoZXIgZHJpdmVycyB0byByZWdpc3RlciB0aGVpciBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zLlxuNi4gIGBkcml2ZXJzL3ZpcnRpby92aXJ0aW9faW5wdXQuY2A6ICBDaGFuZ2VzIHRvIHRoZSBldmVudCBoYW5kbGluZyB0byBjaGVjayB0aGUgYHZpLVx1MDAzZXJlYWR5YCBmbGFnIGFuZCBlbnN1cmUgYHZpcnRxdWV1ZV9raWNrYCBpcyBjYWxsZWQgaW4gdGhlIHJpZ2h0IG9yZGVyIGFuZCBtb2RpZmllcyBkZXZpY2UgdW5yZWdpc3RyYXRpb24gdG8gdXNlIGB2aXJ0aW9fcmVzZXRfZGV2aWNlYC4gVGhpcyBmaXhlcyBvcmRlcmluZyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBkZXZpY2UgcmVzZXQgYW5kIGhlbHBzIHdpdGggZW5zdXJpbmcgd2UgZG8gbm90IHVucmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZSB0b28gZWFybHkuXG43LiAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbGVnYWN5LmNgIFx1MDAyNiBgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uY2A6IFJlbW92aW5nIGNhbGxzIHRvIGB2cF9zeW5jaHJvbml6ZV92ZWN0b3JzYCBiZWNhdXNlIHRoZSBuZXcgYHZpcnRpb19zeW5jaHJvbml6ZV9jYnNgIGhhbmRsZXMgaXQuXG44LiAgYGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZHBhLmNgOiBBZGRzIGFuIGByd2xvY2tfdGAgdG8gdGhlIGB2aXJ0aW9fdmRwYV9kZXZpY2VgIHN0cnVjdC4gIEl0IHByb3RlY3RzIGB2cmluZ19pbnRlcnJ1cHRgIHdpdGhpbiBgdmlydGlvX3ZkcGFfdmlydHF1ZXVlX2NiYCB1c2luZyBgcmVhZF9sb2NrX2lycXNhdmVgL2ByZWFkX3VubG9ja19pcnFyZXN0b3JlYCBhbmQgaW1wbGVtZW50cyBgdmlydGlvX3ZkcGFfc3luY2hyb25pemVfY2JzYCB1c2luZyBgd3JpdGVfbG9ja19pcnFgL2B3cml0ZV91bmxvY2tfaXJxYC4gU3RhbmRhcmQgcmVhZC13cml0ZSBsb2NrIHRvIG1ha2Ugc3VyZSBjYWxsYmFja3Mgc3luY2hyb25pemUuXG45LiAgYGluY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oYDogIEEgc2ltcGxlIGNvbW1lbnQgdXBkYXRlLlxuXG5Ob3csIGZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgaW1wb3J0YW50OiB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlcmllcyBpcyBhYm91dCAqc3luY2hyb25pemF0aW9uKi4gSXQgZG9lc24ndCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBkaXJlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgYGluaXRfc3JjdV9zdHJ1Y3RgLCBgcndsb2NrX2luaXRgKS4gSXTigJlzIGFsbCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIElSUSBzeW5jaHJvbml6YXRpb24uXG5cblNvLCBkb2VzIGl0IG5lZWQgS01TQU4/IE5vLCBiZWNhdXNlIEtNU0FOIGlzIGJlc3Qgc3VpdGVkIHRvIGZpbmQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSByaXNrcyBoZXJlIGFyZSBLQVNBTi9MT0NLREVQIHJlbGF0ZWQsIGluIHRoYXQgS0FTQU4gZGV0ZWN0cyB0aGUgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSwgd2hpbGUgTE9DS0RFUCBkZXRlY3RzIHRoZSBsb2NraW5nIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuSGVyZSdzIG15IHJlYXNvbmluZyBmb3IgdGhlIGBLTVNBTlJlYXNvbmluZ2A6XG5cblx1MDAzZSBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gdmlydGlvIGRldmljZSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlc2V0LCBzaHV0ZG93biwgYW5kIHRlYXJkb3duIGFjcm9zcyB2YXJpb3VzIHZpcnRpbyB0cmFuc3BvcnRzIGFuZCBzdWJzeXN0ZW1zIChyZW1vdGVwcm9jLCB2aXJ0aW8tdW1sLCBtbHhiZi10bWZpZm8sIHZpcnRpby1jY3csIHZpcnRpby12ZHBhLCB2aXJ0aW8taW5wdXQpLiBJdCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MywiT3V0cHV0VG9rZW5zIjoyOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MDg6MTUuNzE2MzQzNTQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cXG5cXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXFxuMi4gRmFpbHVyZSBNb2RlczogUG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBpbnZvbHZlIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBkZWFkbG9ja3MsIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KSBvciB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxcblxcbkNvbnNlcXVlbnRseSwgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZnV6emluZyBidWlsZHMgYXJlIGZ1bGx5IGFkZXF1YXRlIHRvIHRlc3QgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjYWxsYmFjayBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyAoc3luY2hyb25pemVfY2JzKSBhY3Jvc3MgdmFyaW91cyBWaXJ0SU8gdHJhbnNwb3J0cyBhbmQgZHJpdmVycyAocmVtb3RlcHJvYywgdmlydGlvLXVtbCwgbWx4YmYtdG1maWZvLCB2aXJ0aW8tY2N3LCB2aXJ0aW8tdmRwYSwgdmlydGlvLWlucHV0KSB0byBlbnN1cmUgdGhhdCBydW5uaW5nIHZpcnRxdWV1ZSBjYWxsYmFja3MgY29tcGxldGUgYmVmb3JlIHZpcnRpbyBkZXZpY2UgcmVzZXQsIHNodXRkb3duLCBvciB1bnJlZ2lzdHJhdGlvbi5cXG5cXG5LZXkgcG9pbnRzIHJlZ2FyZGluZyBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OlxcbjEuIFN5bmNocm9uaXphdGlvbiBhbmQgQ29uY3VycmVuY3k6IFRoZSBjaGFuZ2VzIGFkZCBTUkNVIChgdnFfc3JjdWApLCByd2xvY2tzIChgY2FsbGJhY2tfbG9ja2ApLCBzcGlubG9jayBmbHVzaGVzLCBhbmQgSVJRIHN5bmNocm9uaXphdGlvbiB0byBlbGltaW5hdGUgcmFjZXMgd2hlcmUgdmlydHF1ZXVlIGNhbGxiYWNrcyBleGVjdXRlIGNvbmN1cnJlbnRseSBkdXJpbmcgdGVhcmRvd24uXFxuMi4gRmFpbHVyZSBNb2RlczogUG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBpbnZvbHZlIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBkZWFkbG9ja3MsIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KSBvciB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IHRvdWNoIHVzZXItY29weSBib3VuZGFyaWVzIG9yIG5ldGxpbmsvaW9jdGwgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBhbGwgbmV3IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3R1cmVzIChgaW5pdF9zcmN1X3N0cnVjdGAsIGByd2xvY2tfaW5pdGApLlxcblxcbkNvbnNlcXVlbnRseSwgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZnV6emluZyBidWlsZHMgYXJlIGZ1bGx5IGFkZXF1YXRlIHRvIHRlc3QgdGhlc2UgY2hhbmdlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4j6b8[1] Phase: Succeeded StartedAt: 2026-09-06 15:08:26 +0000 UTC FinishedAt: 2026-09-06 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 15:08:26 +0000 UTC FinishedAt: 2026-09-06 15:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2] Phase: Succeeded StartedAt: 2026-09-06 15:08:26 +0000 UTC FinishedAt: 2026-09-06 16:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 15:08:26 +0000 UTC FinishedAt: 2026-09-06 16:21:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 15:08:26 +0000 UTC FinishedAt: 2026-09-06 15:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 15:08:26 +0000 UTC FinishedAt: 2026-09-06 15:08:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow4j6b8/series-workflow4j6b8-convert-artifact-3914209564/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 15:08:36 +0000 UTC FinishedAt: 2026-09-06 15:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 15:08:36 +0000 UTC FinishedAt: 2026-09-06 15:25:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*199e2112-b386-4bd8-8ff0-b8e000027cbb,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-workflow4j6b8/series-workflow4j6b8-convert-artifact-3914209564/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": "d3e8efda-081c-4771-aaf2-f2a5a6e3e411", "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-workflow4j6b8/series-workflow4j6b8-build-action-1744355146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 15:08:36 +0000 UTC FinishedAt: 2026-09-06 15:25:28 +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:*199e2112-b386-4bd8-8ff0-b8e000027cbb,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-workflow4j6b8/series-workflow4j6b8-convert-artifact-3914209564/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": "d3e8efda-081c-4771-aaf2-f2a5a6e3e411", "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-workflow4j6b8/series-workflow4j6b8-build-action-1744355146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 15:25:38 +0000 UTC FinishedAt: 2026-09-06 15:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 15:25:38 +0000 UTC FinishedAt: 2026-09-06 15:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 15:25:38 +0000 UTC FinishedAt: 2026-09-06 15:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 15:25:38 +0000 UTC FinishedAt: 2026-09-06 15:25:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow4j6b8/series-workflow4j6b8-convert-artifact-1398008411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 15:25:48 +0000 UTC FinishedAt: 2026-09-06 15:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 15:25:48 +0000 UTC FinishedAt: 2026-09-06 15:27:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3e8efda-081c-4771-aaf2-f2a5a6e3e411,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-workflow4j6b8/series-workflow4j6b8-build-action-1744355146/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-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 15:27:41 +0000 UTC FinishedAt: 2026-09-06 15:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 15:27:41 +0000 UTC FinishedAt: 2026-09-06 15:27:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 15:27:41 +0000 UTC FinishedAt: 2026-09-06 15:46:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 15:27:41 +0000 UTC FinishedAt: 2026-09-06 15:46:30 +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:*199e2112-b386-4bd8-8ff0-b8e000027cbb,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-workflow4j6b8/series-workflow4j6b8-convert-artifact-1398008411/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": "b77b271d-4485-47e2-8208-7d55bbf677bb", "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-workflow4j6b8/series-workflow4j6b8-build-action-1434947839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 15:27:41 +0000 UTC FinishedAt: 2026-09-06 15:46:20 +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:*199e2112-b386-4bd8-8ff0-b8e000027cbb,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-workflow4j6b8/series-workflow4j6b8-convert-artifact-1398008411/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": "b77b271d-4485-47e2-8208-7d55bbf677bb", "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-workflow4j6b8/series-workflow4j6b8-build-action-1434947839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 15:46:30 +0000 UTC FinishedAt: 2026-09-06 15:46:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 15:46:30 +0000 UTC FinishedAt: 2026-09-06 15:46:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 15:46:30 +0000 UTC FinishedAt: 2026-09-06 15:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 15:46:30 +0000 UTC FinishedAt: 2026-09-06 15:47:49 +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:*b77b271d-4485-47e2-8208-7d55bbf677bb,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-workflow4j6b8/series-workflow4j6b8-build-action-1434947839/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-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 16:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 16:21: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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"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:*d3e8efda-081c-4771-aaf2-f2a5a6e3e411,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b77b271d-4485-47e2-8208-7d55bbf677bb,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-workflow4j6b8/series-workflow4j6b8-build-action-1744355146/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-workflow4j6b8/series-workflow4j6b8-build-action-1434947839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 15:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 15:48:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"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-workflow4j6b8/series-workflow4j6b8-convert-artifact-3979983188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 15:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 15:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 15:48:11 +0000 UTC FinishedAt: 2026-09-06 15:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 15:48:21 +0000 UTC FinishedAt: 2026-09-06 16:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4j6b8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["virtio_reset_device","virtio_device_shutdown","virtinput_recv_events","virtio_vdpa_virtqueue_cb","virtio_vdpa_synchronize_cbs","rproc_vq_interrupt","rproc_virtio_synchronize_cbs","rproc_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a500db7819c50db59e55f1b4fa1c3baa5a2616f3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTIO","VIRTIO_PCI","VIRTIO_VDPA","VDPA","VIRTIO_INPUT","REMOTEPROC"],"series_id":"a9633763-a726-40d8-ac72-fa45e0cb3c28","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 15:48:21 +0000 UTC FinishedAt: 2026-09-06 16:21:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3e8efda-081c-4771-aaf2-f2a5a6e3e411,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b77b271d-4485-47e2-8208-7d55bbf677bb,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-workflow4j6b8/series-workflow4j6b8-build-action-1744355146/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-workflow4j6b8/series-workflow4j6b8-build-action-1434947839/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-workflow4j6b8/series-workflow4j6b8-convert-artifact-3979983188/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,}