Name: series-workflow7n5fz Phase: Succeeded StartedAt: 2026-08-05 00:37:39 +0000 UTC FinishedAt: 2026-08-05 01:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[0] Phase: Succeeded StartedAt: 2026-08-05 00:37:39 +0000 UTC FinishedAt: 2026-08-05 00:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 00:37:39 +0000 UTC FinishedAt: 2026-08-05 00:41:08 +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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "VFIO_PCI", "PCI_IOV" ], "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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "VFIO_PCI", "PCI_IOV" ], "series_id": "1b3d4ef8-781c-41bb-9e1e-e6c432d57791" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_close_device", "vfio_pci_core_sriov_configure" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBkaXNhYmxlIFNSLUlPViBWRnMgd2hlbiBhIFZGSU8gUENJIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBiaW5kaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRvIHZmaW8tcGNpLCBlbmFibGluZyBWRnMsIGFuZCBjbG9zaW5nIHRoZSBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMDM4YjVjMjk1ODQ2NjM5OGEwMTM0ODhjZTQ1MWE1MWIwOGRiMmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMDozOTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMTEzYzU1ODQ1ZTEwLi5iMzZjNzdlYjNjNDA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtODI2LDYgJiM0Mzs4MjYsMTMgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxuIFx0ZWVoX2Rldl9yZWxlYXNlKHZkZXYtXHUwMDNlcGRldik7XG4gI2VuZGlmXG4mIzQzO1xuJiM0MztcdGlmIChwY2lfbnVtX3ZmKHZkZXYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdGRldmljZV9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7XG4mIzQzO1x0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAodmRldik7XG4gXG4gXHR2ZmlvX3BjaV9jb3JlX2Rpc2FibGUodmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBkaXNhYmxlIFNSLUlPViBWRnMgd2hlbiBhIFZGSU8gUENJIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBiaW5kaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRvIHZmaW8tcGNpLCBlbmFibGluZyBWRnMsIGFuZCBjbG9zaW5nIHRoZSBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMDM4YjVjMjk1ODQ2NjM5OGEwMTM0ODhjZTQ1MWE1MWIwOGRiMmQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwMDozOTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggYTExM2M1NTg0NWUxMC4uYjM2Yzc3ZWIzYzQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTgyNiw2ICYjNDM7ODI2LDEzIEBAIHZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKQogCWVlaF9kZXZfcmVsZWFzZSh2ZGV2LSZndDtwZGV2KTsKICNlbmRpZgomIzQzOwomIzQzOwlpZiAocGNpX251bV92Zih2ZGV2LSZndDtwZGV2KSkgewomIzQzOwkJZGV2aWNlX2xvY2soJmFtcDt2ZGV2LSZndDtwZGV2LSZndDtkZXYpOwomIzQzOwkJdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7CiYjNDM7CQlkZXZpY2VfdW5sb2NrKCZhbXA7dmRldi0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJfQomIzQzOwogCXZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCh2ZGV2KTsKIAogCXZmaW9fcGNpX2NvcmVfZGlzYWJsZSh2ZGV2KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRklPLVBDSSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIGEgY2FsbCB0byBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMClgIHdpdGhpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgLCBidXQgb25seSBpZiB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgUENJIGRldmljZSAoYHZkZXYtJmd0O3BkZXZgKSBpcyBncmVhdGVyIHRoYW4gemVyby4gVGhpcyBpcyBjb3JlIFZGSU8tUENJIGRyaXZlciB0ZXJyaXRvcnksIHdoaWNoLCBhcyB3ZSBrbm93LCBwcm92aWRlcyB0aGUgY3J1Y2lhbCBpbnRlcmZhY2UgZm9yIHVzZXJzcGFjZSBhY2Nlc3MgdG8gZGV2aWNlcy4KClRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCwgYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCwgaXMgaW52b2tlZCB3aGVuIGEgVkZJTyBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkLiBUaGUga2V5IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSBwcmFjdGljYWwgc2NlbmFyaW8sIHBhcnRpY3VsYXJseSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIFdlIGtub3cgVkZJTy1QQ0kgdHlwaWNhbGx5IGV4cGVjdHMgYW4gSU9NTVUgYW5kIHBoeXNpY2FsIGRldmljZXMsIGJ1dCB0aGVyZSBhcmUgZGVmaW5pdGVseSBleGNlcHRpb25zIGxpa2UgYHZmaW8tbWRldmAgb3IgYHZmaW8tcGNpYCBjb25maWd1cmF0aW9ucyB0aGF0IGNhbiB3b3JrIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUgb3IgbW9jayBJT01NVXMuIFNvLCB5ZXMsIGl04oCZcyBwbGF1c2libGUuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIOKAkyBpcyB0aGlzICpmdXp6YWJsZSo/IENhbiB3ZSB0cmlnZ2VyIHRoaXMgcGF0aCB3aXRoIGZ1enppbmc/IEkgbmVlZCB0byBjaGVjay4gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZW0gdG8gcmVjYWxsIFN5emthbGxlciBoYXZpbmcgc29tZSBWRklPIGRlc2NyaXB0aW9ucywgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFdlIGtub3cgdGhhdCBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIGlzIGJlaW5nIHRyaWdnZXJlZCBvbiBhIGNsb3NlIGV2ZW50LCBzbyBub3cgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGJ5IGNoZWNraW5nIHRoZSB0ZXN0IGNhc2VzIGluIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE1NDI9c3RhdGljIHZvaWQgaGlzaV9hY2NfdmZpb19wY2lfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTU1Mi1cdG11dGV4X3VubG9jayhcdTAwMjZoaXNpX2FjY192ZGV2LVx1MDAzZW9wZW5fbXV0ZXgpO1xuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYzoxNTUzOlx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTU1NC19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MDYtXHQub3Blbl9kZXZpY2UgPSBoaXNpX2FjY192ZmlvX3BjaV9vcGVuX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTYwNzpcdC5jbG9zZV9kZXZpY2UgPSB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYwOC1cdC5pb2N0bCA9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzM5LVx0Lm9wZW5fZGV2aWNlID0gaXNtX3ZmaW9fcGNpX29wZW5fZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM0MDpcdC5jbG9zZV9kZXZpY2UgPSB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDEtXHQuaW9jdGwgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9MTM0MD1zdGF0aWMgdm9pZCBtbHg1dmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzNDUtXHRtbHg1dmZfY21kX2Nsb3NlX21pZ3JhdGFibGUobXZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYzoxMzQ2Olx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM0Ny19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MjI3PXN0YXRpYyB2b2lkIG52Z3JhY2VfZ3B1X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0yNTMtXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoyNTQ6XHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMjU1LX1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9jb3JlX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk0LVx0Lm9wZW5fZGV2aWNlXHQ9IG52Z3JhY2VfZ3B1X29wZW5fZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA5NTpcdC5jbG9zZV9kZXZpY2VcdD0gdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UsXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk2LVx0LmlvY3RsXHRcdD0gdmZpb19wY2lfY29yZV9pb2N0bCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jPTE3Nz1zdGF0aWMgdm9pZCBwZHNfdmZpb19jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTg3LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc192ZmlvLVx1MDAzZXN0YXRlX211dGV4KTtcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM6MTg4Olx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UodmRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE4OS19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jPTEwNj1zdGF0aWMgdm9pZCBxYXRfdmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmMtMTEyLVx0cWF0X3ZmX2Rpc2FibGVfZmRzKHFhdF92ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYzoxMTM6XHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jLTExNC19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE0OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1My1cdC5vcGVuX2RldmljZVx0PSB2ZmlvX3BjaV9vcGVuX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYzoxNTQ6XHQuY2xvc2VfZGV2aWNlXHQ9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1NS1cdC5pb2N0bFx0XHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9ODEzPUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfZGlzYWJsZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTQtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo4MTU6dm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTgxNi17XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODQ0LX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjg0NTpFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04NDYtXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTQ1PXN0YXRpYyB2b2lkIHZpcnRpb3ZmX3BjaV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTUwLVx0dmlydGlvdmZfY2xvc2VfbWlncmF0aW9uKHZpcnR2ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo1MTpcdHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKGNvcmVfdmRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtNTItfVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzItXHQub3Blbl9kZXZpY2UgPSB2aXJ0aW92Zl9wY2lfb3Blbl9kZXZpY2UsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTMzOlx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNC1cdC5pb2N0bCA9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM9MTY0PXN0YXRpYyB2b2lkIHhlX3ZmaW9fcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy0xNzEtXHR4ZV92ZmlvX3BjaV9zdGF0ZV9tdXRleF91bmxvY2soeGVfdmRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYzoxNzI6XHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtMTczLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD0xNjI9aW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTY1LVx0XHRcdFx0ICAgICAgc2l6ZV90IHNpemUsIHUzMiBmbGFncywgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaDoxNjY6dm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNjctaW50IHZmaW9fcGNpX2NvcmVfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBQQ0kgYW5kIFN5emthbGxlcjogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAgaXMgYSBrZXkgZnVuY3Rpb24sIGV4cG9ydGVkIGFuZCB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZSBieSB0aGVzZSBWRklPIFBDSSBkcml2ZXJzLCBldmVuIHdpdGhpbiBgdmZpb19wY2kuY2AgaXRzZWxmLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIGB2ZmlvX3BjaWAgdGhyb3VnaCBTeXprYWxsZXI/CgpTeXprYWxsZXIgZG9lcyBoYXZlIGBzeXMvbGludXgvdmZpby50eHRgLCBzbyBhdCBsZWFzdCBpdCAqa25vd3MqIGFib3V0IHRoZSBWRklPIGlvY3Rscy4gQnV0IGhvbGQgb24sIGZvciBWRklPIFBDSSwgSSBuZWVkIGEgUENJIGRldmljZSwgcmlnaHQ/IFN5emthbGxlciB1c2VzIGB2aGNpYCwgYHZrbXNgLCBhbmQgYHZuZXRg4oCmIERvZXMgaXQgaGF2ZSBzb21lIGtpbmQgb2YgdmlydHVhbCBQQ0kgZGV2aWNlIHRoYXQgY2FuIGFjdHVhbGx5IGJlIGJvdW5kIHRvIFZGSU8/IE5vdywgSSBkbyByZW1lbWJlciBzZWVpbmcgdGhlIGB2ZmlvLXBjaWAgZHJpdmVyLiBTbywgY2FuIFN5emthbGxlciBiaW5kIGEgZGV2aWNlIHRvIHRoYXQ/CgpMZXQgbWUgc2Vl4oCmIFllYWgsIGl0IGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgIGFuZCBvdGhlciByZWxhdGVkIHNldHVwIHJvdXRpbmVzLiBCdXQgZm9yIFZGSU8gc3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGl0IGNhbiBvcGVuIGAvZGV2L3ZmaW8vdmZpb2AgYW5kIGAvZGV2L3ZmaW8vWGAuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24hIE5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIGlmIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAgaXMgcmVhY2hhYmxlLCBhbmQgdGhlbiBJJiMzOTtsbCBzZWUgaWYgSSBjYW4gZ2V0IHRoaXMgYWxsIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTIwOT1zdGF0aWMgaW50IHZmaW9fcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG5yX3ZpcnRmbilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMjE1LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjIxNjpcdHJldHVybiB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCBucl92aXJ0Zm4pO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTIxNy19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NTM9aW50IHZmaW9fcGNpX2V2ZW50ZmRfcmVwbGFjZV9sb2NrZWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc3LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Nzg6LyogTGlzdCBvZiBQRiYjMzk7cyB0aGF0IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKCkgaGFzIGJlZW4gY2FsbGVkIG9uICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03OS1zdGF0aWMgREVGSU5FX01VVEVYKHZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9ODE1PXZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODMxLVx0XHRkZXZpY2VfbG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjgzMjpcdFx0dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MzMtXHRcdGRldmljZV91bmxvY2soXHUwMDI2dmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjA5OT1zdGF0aWMgaW50IHZmaW9fcGNpX3ZmX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIxMDctXHRcdC8qXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMTA4Olx0XHQgKiBJZiB0aGlzIFZGIHdhcyBjcmVhdGVkIGJ5IG91ciB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSgpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMTA5LVx0XHQgKiB0aGVuIHdlIGNhbiBmaW5kIHRoZSBQRiB2ZmlvX3BjaV9jb3JlX2RldmljZSBub3csIGFuZCBkdWUgdG9cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yMzI2PXZvaWQgdmZpb19wY2lfY29yZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzI3LXtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzMjg6XHR2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzMjktXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjM1Nj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Flcl9lcnJfZGV0ZWN0ZWQpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1Ny1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzNTg6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzNTktXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjQyNS19XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyNDI2OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI0MjctXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTcxPWV4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTcyOmludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzMtXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBQQ0kgU1JJT1YgRGlzYWJsZW1lbnQgb24gQ2xvc2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIFNSSU9WIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBWRklPIFBDSSBjb3JlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGNhbGwgdG8gYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApYCBpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgLiBUaGUgbG9naWMgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IElmIHRoZSBwaHlzaWNhbCBkZXZpY2UgKGBwZGV2YCkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aXJ0dWFsIGRldmljZSAoYHZkZXZgKSBoYXMgYW55IHZpcnR1YWwgZnVuY3Rpb25zIChWRnMpIGVuYWJsZWQgKGNoZWNrZWQgdmlhIGBwY2lfbnVtX3ZmKHZkZXYtJmd0O3BkZXYpYCksIHRoZW4gU1JJT1YgaXMgZXhwbGljaXRseSBkaXNhYmxlZCBkdXJpbmcgdGhlIGRldmljZSBjbG9zZSBwcm9jZWR1cmUuIFRoaXMgY2xlYXJseSByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvci4KCk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBmdXp6aW5nLiBJJiMzOTttIGFsd2F5cyB0aGlua2luZyBhYm91dCB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBJcyB0aGlzIFZGSU8gUENJIGNvZGUgcGF0aCBmdXp6YWJsZSB3aXRoIHN5emthbGxlcj8gV2Uga25vdyB0aGVyZSBhcmUgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYHN5el9rdm1fc2V0dXBfdm1gIGNhbGxzIGluIHN5emthbGxlciwgd2hpY2ggZGVhbCB3aXRoIEtWTS4gQnV0LCB3aGF0IGFib3V0IFZGSU8/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIHN5emthbGxlciBoYXMgYW55IGRlZGljYXRlZCBkZXNjcmlwdGlvbnMgb3Igc3VwcG9ydCBmb3IgVkZJTyBzeXN0ZW0gY2FsbHMuIFRoaXMgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBpZiB0aGVyZSBhcmUsIGFzIHRoZSBwYXRjaCBmb2N1c2VzIG9uIHRoaXMgU1JJT1YgY29uZmlndXJhdGlvbiBhbmQgY2xvc2luZyB0aGUgZGV2aWNlLCBib3RoIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfLip2ZmlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWRklPIFJlYWNoYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZGV0ZXJtaW5lIGlmIHNvbWV0aGluZyBpcyByZWFjaGFibGUgdGhyb3VnaCBWRklPLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBJJiMzOTt2ZSBnb3QgYSBiaXQgb2YgYSByb2FkYmxvY2s6IEkgY2FuJiMzOTt0IHVzZSBgc3l6X2Agd2l0aCBncmVwcGVyIGJlY2F1c2UgdGhvc2UgYXJlIFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMgYW5kIG5vdCBhY3R1YWwga2VybmVsIGNhbGxzLiBCdXQgdGhhdCYjMzk7cyBmaW5lOyBJJiMzOTttIG5vdCBsb29raW5nIGF0IFN5emthbGxlciBkZXNjcmlwdGlvbnMgcmlnaHQgbm93LiBJIGp1c3QgbmVlZCB0byBmaWd1cmUgb3V0IFZGSU8gcmVhY2hhYmlsaXR5LgoKVGhlIHByb21wdCBub3RlcyBgdmZpb2AgdXNlIHdpdGggdmlydHVhbCBkZXZpY2VzLiBJIGtub3cgdGhhdCBgdmZpby1tZGV2YCBvciBgdmZpby1wY2lgIHdpdGggYSB2aXJ0dWFsIFBDSSBkZXZpY2UgYXJlIHBvc3NpYmlsaXRpZXMuIEhvd2V2ZXIsIGB2ZmlvLXBjaWAgdHlwaWNhbGx5IGJpbmRzIHRvIGEgKnBoeXNpY2FsKiBQQ0kgZGV2aWNlLCByaWdodD8gQnV0IHRoZW4sIGluIFFFTVUsIHdlICpkbyogaGF2ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIGxpa2UgYGUxMDAwYCBhbmQgYHZpcnRpby1uZXQtcGNpYC4gSG1tLi4uIGNhbiB5b3UgYmluZCBhICp2aXJ0dWFsKiBQQ0kgZGV2aWNlIHRvIGB2ZmlvLXBjaWA/CgpBaCwgeWVzLCBvZiBjb3Vyc2UhIFlvdSBjYW4gaWYgdGhlIGtlcm5lbCBib290cyB3aXRoIGBpb21tdT1wdGAgb3IgYGludGVsX2lvbW11PW9uYCBhbmQgdGhlIFFFTVUgbWFjaGluZSBoYXMgYSB2SU9NTVUsIG9yIGlmIGB2ZmlvYCBpcyB1c2VkIHdpdGggYG5vaW9tbXVgIG1vZGUuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuCgpXYWl0IGEgc2Vjb25kLi4uIFN5emthbGxlciBhY3R1YWxseSAqZG9lcyogdGVzdCBWRklPISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgZm9yIGV4YW1wbGVzLiBTdGlsbCwgSSBtaWdodCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfVkZJT19QQ0lgIGFzIGEgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQW5hbHl6aW5nIHRoZSBWRklPIFBDSSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIGZvciB0aGlzIFZGSU8gUENJIGRyaXZlciBzdHVmZi4gVGhlIHNtYXJ0IG1vdmUgaGVyZSBpcyB0byBjb25zdWx0IHRoZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtsbCBsYXkgb3V0IHByZWNpc2VseSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgZHJpdmVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVkZJTyBzdWJzeXN0ZW0gYW5kIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBwcmVyZXF1aXNpdGVzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBSb3NldHRhIFN0b25lIGZvciBmaWd1cmluZyBvdXQgd2hhdCBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gUENJXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFZGSU9fUENJX0NPUkVcbiAgIDY6XHRcdHRyaXN0YXRlXG4gICA3Olx0XHRzZWxlY3QgVkZJT19WSVJRRkRcbiAgIDg6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgVkZJT19QQ0lfSU5UWFxuICAxMTpcdFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuICAxMjpcdFx0ZGVwZW5kcyBvbiBWRklPX1BDSV9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFZGSU9fUENJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcJiMzNDtcbiAgMTY6XHRcdHNlbGVjdCBWRklPX1BDSV9DT1JFXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIHRoZSBnZW5lcmljIFBDSSBWRklPIGJ1cyBkcml2ZXIgd2hpY2ggY2FuIGNvbm5lY3QgYW55XG4gIDE5Olx0XHQgIFBDSSBkZXZpY2UgdG8gdGhlIFZGSU8gZnJhbWV3b3JrLlxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMjI6XHRcbiAgMjM6XHRpZiBWRklPX1BDSVxuICAyNDpcdGNvbmZpZyBWRklPX1BDSV9WR0FcbiAgMjU6XHRcdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBYODYgXHUwMDI2XHUwMDI2IFZHQV9BUkJcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXG4gIDI5Olx0XHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcbiAgMzA6XHRcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTA1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU8gUENJIERldmljZSBDbG9zdXJlIGFuZCBTUi1JT1YgQ29uZmlndXJhdGlvbiAtIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIHdoaWNoIGlzIHdpdGhpbiB0aGUgYFZGSU9fUENJX0NPUkVgIG1vZHVsZS4gVGhlIGFkZGVkIGNvZGUgYmxvY2suLi4gbGV0IG1lIHNlZS4uLgoKYGBgYwoJaWYgKHBjaV9udW1fdmYodmRldi0mZ3Q7cGRldikpIHsKCQlkZXZpY2VfbG9jaygmYW1wO3ZkZXYtJmd0O3BkZXYtJmd0O2Rldik7CgkJdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7CgkJZGV2aWNlX3VubG9jaygmYW1wO3ZkZXYtJmd0O3BkZXYtJmd0O2Rldik7Cgl9CmBgYAoKLi4uaXMgb25seSByZWFjaGFibGUgaWYgYSBWRklPIFBDSSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkIGFuZCAqaXQqIGhhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gYHBjaV9udW1fdmZgLi4uIHJpZ2h0LCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBWRnMuIFRoaXMgaW1wbGllcyBhbiBTUi1JT1YgY2FwYWJsZSBQQ0kgZGV2aWNlLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICp0cmlnZ2VyKiB0aGlzPwoKUUVNVSBjYW4gZW11bGF0ZSBTUi1JT1YgZm9yIGNlcnRhaW4gZGV2aWNlcywgbGlrZSBgaWdiYCBvciBgbnZtZWAsIHNvIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIGJsb2NrZXIuIFNvLCBpZiBzeXprYWxsZXIgY2FuIGJpbmQgYW4gU1ItSU9WLWNhcGFibGUgZGV2aWNlIHRvIGB2ZmlvLXBjaWAsIGVuYWJsZSB0aGUgVkZzLCBhbmQgdGhlbiBjbG9zZSB0aGUgZGV2aWNlLCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgdmlhYmxlIGZ1enogdGFyZ2V0LiBJIGFsc28gbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgIGlzIGNhbGxlZCB3aGVuIFZGcyBhcmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBzeXNmcy4gSWYgdGhpcyBjb25maWd1cmF0aW9uIGhhcHBlbnMsIHRoZW4gY2xvc2VzIHRoZSBkZXZpY2UsIHRoaXMgY29kZSB3aWxsIGJlIGV4ZWN1dGVkLgoKSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRklPIFBDSSBsb2dpYy4gSXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSBWRnMgbWlnaHQgYmUgbGVmdCBlbmFibGVkIHdoZW4gdGhlIGRldmljZSBpcyBjbG9zZWQsIHNvIHdlIGNvdWxkIGJlIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBwYXRoLgoKU28sIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIGFuZCBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3Mgc2VlbSB0byBiZSBgVkZJT19QQ0lgIGFuZCBgUENJYC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGBQQ0lgIGlzIGVub3VnaCwgb3IgaWYgd2UgbmVlZCBgUENJX0lPVmAgdG8gZW5hYmxlIHRoZSBgcGNpX251bV92ZmAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lfSU9WJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTU0PWNvbmZpZyBQQ0lfQlJJREdFX0VNVUxcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTU3OmNvbmZpZyBQQ0lfSU9WXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7UENJIElPViBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipQQ0kgSU9WIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBQQ0lfSU9WYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIFBDSSBkcml2ZXJzIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuYXZpZ2F0ZSB0byBgZHJpdmVycy9wY2kvS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSBob3cgYFBDSV9JT1ZgIGlzIGV4cG9zZWQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50LCBhbnkgYXNzb2NpYXRlZCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBkZXNjcmlwdGlvbiBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBLbm93aW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUga2VybmVsJiMzOTtzIHZpcnR1YWwgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0Y29uZmlnIFBDSV9MT0NLTEVTU19DT05GSUdcbiAxNTI6XHRcdGJvb2xcbiAxNTM6XHRcbiAxNTQ6XHRjb25maWcgUENJX0JSSURHRV9FTVVMXG4gMTU1Olx0XHRib29sXG4gMTU2Olx0XG4gMTU3Olx0Y29uZmlnIFBDSV9JT1ZcbiAxNTg6XHRcdGJvb2wgXCYjMzQ7UENJIElPViBzdXBwb3J0XCYjMzQ7XG4gMTU5Olx0XHRzZWxlY3QgUENJX0FUU1xuIDE2MDpcdFx0aGVscFxuIDE2MTpcdFx0ICBJL08gVmlydHVhbGl6YXRpb24gaXMgYSBQQ0kgZmVhdHVyZSBzdXBwb3J0ZWQgYnkgc29tZSBkZXZpY2VzXG4gMTYyOlx0XHQgIHdoaWNoIGFsbG93cyB0aGVtIHRvIGNyZWF0ZSB2aXJ0dWFsIGRldmljZXMgd2hpY2ggc2hhcmUgdGhlaXJcbiAxNjM6XHRcdCAgcGh5c2ljYWwgcmVzb3VyY2VzLlxuIDE2NDpcdFxuIDE2NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE2NjpcdFxuIDE2NzpcdGNvbmZpZyBQQ0lfTlBFTVxuIDE2ODpcdFx0Ym9vbCBcJiMzNDtOYXRpdmUgUENJZSBFbmNsb3N1cmUgTWFuYWdlbWVudFwmIzM0O1xuIDE2OTpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlNSLUlPViBhbmQgSXRzIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCB0aGUgY29yZSBpc3N1ZSBpcyBTUi1JT1Ygc3VwcG9ydC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZywgYFBDSV9JT1ZgIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbC4gTm8gcmVhbCBzdXJwcmlzZXMgdGhlcmUuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBoYXBwZW5zIGlmIGBwY2lfbnVtX3ZmYCBpcyBkZWZpbmVkIHdpdGhvdXQgYFBDSV9JT1ZgLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQwIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX3BzZXJpZXMuYz03MjQ9c3RhdGljIGludCBwc2VyaWVzX2NhbGxfYWxsb3dfdW5mcmVlemUoc3RydWN0IGVlaF9kZXYgKmVkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmMtNzMyLVx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jOjczMzpcdGlmIChwY2lfbnVtX3ZmKGVkZXYtXHUwMDNlcGh5c2ZuID8gZWRldi1cdTAwM2VwaHlzZm4gOiBlZGV2LVx1MDAzZXBkZXYpKSB7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX3BzZXJpZXMuYy03MzQtXHRcdGlmIChlZGV2LVx1MDAzZXBkZXYtXHUwMDNlaXNfcGh5c2ZuKSB7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX3BzZXJpZXMuYzo3MzU6XHRcdFx0Y3VyX3ZmcyA9IHBjaV9udW1fdmYoZWRldi1cdTAwM2VwZGV2KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jLTczNi1cdFx0XHRwZG4gPSBlZWhfZGV2X3RvX3BkbihlZGV2KTtcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jPTQyPWludCBhaWU0X3NyaW92X3N0b3Aoc3RydWN0IGFtZHhkbmFfZGV2X2hkbCAqbmRldilcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jLTQ3LVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTRfc3Jpb3YuYzo0ODpcdGlmICghcGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWU0X3NyaW92LmMtNDktXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2Nhdml1bS9uaXRyb3gvbml0cm94X3NyaW92LmM9MTUzPXN0YXRpYyBpbnQgbml0cm94X3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2F2aXVtL25pdHJveC9uaXRyb3hfc3Jpb3YuYy0xNjItXG5kcml2ZXJzL2NyeXB0by9jYXZpdW0vbml0cm94L25pdHJveF9zcmlvdi5jOjE2MzpcdGlmIChwY2lfbnVtX3ZmKHBkZXYpID09IG51bV92ZnMpXG5kcml2ZXJzL2NyeXB0by9jYXZpdW0vbml0cm94L25pdHJveF9zcmlvdi5jLTE2NC1cdFx0cmV0dXJuIG51bV92ZnM7XG4tLVxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmM9NDI4Nj1pbnQgaGlzaV9xbV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtYXhfdmZzKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi9xbS5jLTQyOTUtXHR0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmM6NDI5NjpcdHByZV9leGlzdGluZ192ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmMtNDI5Ny1cdGlmIChwcmVfZXhpc3RpbmdfdmZzKSB7XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM9MTM9dm9pZCBhZGZfcGYydmZfbm90aWZ5X3Jlc3RhcnRpbmcoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldilcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0xNi1cdHN0cnVjdCBwZnZmX21lc3NhZ2UgbXNnID0geyAudHlwZSA9IEFERl9QRjJWRl9NU0dUWVBFX1JFU1RBUlRJTkcgfTtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjE3Olx0aW50IGksIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGFjY2VsX3RvX3BjaV9kZXYoYWNjZWxfZGV2KSk7XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0xOC1cbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz0zNT12b2lkIGFkZl9wZjJ2Zl93YWl0X2Zvcl9yZXN0YXJ0aW5nX2NvbXBsZXRlKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0zNi17XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYzozNzpcdGludCBudW1fdmZzID0gcGNpX251bV92ZihhY2NlbF90b19wY2lfZGV2KGFjY2VsX2RldikpO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtMzgtXHRpbnQgaSwgcmV0cmllcyA9IEFERl9WRl9TSFVURE9XTl9SRVRSWTtcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz01Nz12b2lkIGFkZl9wZjJ2Zl9ub3RpZnlfcmVzdGFydGVkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtNTktXHRzdHJ1Y3QgcGZ2Zl9tZXNzYWdlIG1zZyA9IHsgLnR5cGUgPSBBREZfUEYyVkZfTVNHVFlQRV9SRVNUQVJURUQgfTtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjYwOlx0aW50IGksIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGFjY2VsX3RvX3BjaV9kZXYoYWNjZWxfZGV2KSk7XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy02MS1cdHN0cnVjdCBhZGZfYWNjZWxfdmZfaW5mbyAqdmY7XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM9NzI9dm9pZCBhZGZfcGYydmZfbm90aWZ5X2ZhdGFsX2Vycm9yKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtNzQtXHRzdHJ1Y3QgcGZ2Zl9tZXNzYWdlIG1zZyA9IHsgLnR5cGUgPSBBREZfUEYyVkZfTVNHVFlQRV9GQVRBTF9FUlJPUiB9O1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM6NzU6XHRpbnQgaSwgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYWNjZWxfdG9fcGNpX2RldihhY2NlbF9kZXYpKTtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTc2LVx0c3RydWN0IGFkZl9hY2NlbF92Zl9pbmZvICp2Zjtcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3Jpb3YuYz02Nj1zdGF0aWMgaW50IGFkZl9lbmFibGVfc3Jpb3Yoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldilcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3Jpb3YuYy05NC1cdC8qIERvIG5vdCBlbmFibGUgU1ItSU9WIGlmIGFscmVhZHkgZW5hYmxlZCAqL1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmM6OTU6XHRpZiAocGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zcmlvdi5jLTk2LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYz02NDg9c3RhdGljIGludCBjcHRwZl9zcmlvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfbWFpbi5jLTY1MC1cdHN0cnVjdCBvdHgyX2NwdHBmX2RldiAqY3B0cGYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYzo2NTE6XHRpbnQgbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYy02NTItXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTEzNjM9c3RhdGljIGludCB4ZV9wY2lfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM3NS1cdHhlX2Fzc2VydCh4ZSwgIUlTX1NSSU9WX1ZGKHhlKSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTM3NjpcdHhlX2Fzc2VydCh4ZSwgIXBjaV9udW1fdmYocGRldikpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEzNzctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jPTE3Nj1zdGF0aWMgaW50IHBmX2Rpc2FibGVfdmZzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0xNzktXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYzoxODA6XHR1MTYgbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMTgxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0yMjE9aW50IHhlX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0yMzMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM6MjM0Olx0aWYgKG51bV92ZnMgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMjM1LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jPTI3ND12b2lkIHhlX3NyaW92X3BmX3ByaW50X3Zmc19zdW1tYXJ5KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmLmMtMjgxLVx0ZHJtX3ByaW50ZihwLCBcJiMzNDtzdXBwb3J0ZWQ6ICV1XFxuXCYjMzQ7LCB4ZS1cdTAwM2Vzcmlvdi5wZi5kcml2ZXJfbWF4X3Zmcyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGYuYzoyODI6XHRkcm1fcHJpbnRmKHAsIFwmIzM0O2VuYWJsZWQ6ICV1XFxuXCYjMzQ7LCBwY2lfbnVtX3ZmKHBkZXYpKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jLTI4My19XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmX2hlbHBlcnMuaD00Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZV9zcmlvdl9wZl9udW1fdmZzKGNvbnN0IHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmX2hlbHBlcnMuaC00OC17XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oOjQ5Olx0cmV0dXJuIHBjaV9udW1fdmYodG9fcGNpX2Rldih4ZS1cdTAwM2Vkcm0uZGV2KSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oLTUwLX1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYz00ODQ9c3RhdGljIGJvb2wgaXNfZGV2X2JvbmRfc3VwcG9ydGVkKHN0cnVjdCBobnNfcm9jZV9ib25kX2dyb3VwICpib25kX2dycCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYy01MDItXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYzo1MDM6XHRpZiAoaHJfZGV2LVx1MDAzZWlzX3ZmIHx8IHBjaV9udW1fdmYoaHJfZGV2LVx1MDAzZXBjaV9kZXYpIFx1MDAzZSAwKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYy01MDQtXHRcdHJldCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jPTI2NT1zdGF0aWMgaXJxcmV0dXJuX3QgZHBpX21ib3hfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmMtMjcyLVx0aWYgKHJlZykge1xuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmM6MjczOlx0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIHBjaV9udW1fdmYoZHBpLVx1MDAzZXBkZXYpOyB2ZiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTI3NC1cdFx0XHRpZiAocmVnIFx1MDAyNiBCSVRfVUxMKHZmKSlcbi0tXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYz0zMTU9c3RhdGljIHZvaWQgZHBpX3BmdmZfbWJveF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYy0zMzEtXHR2ZmlkID0gRFBJX01CT1hfVkZJRChtc2cud29yZF9sKTtcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jOjMzMjpcdGlmICh2ZmlkIFx1MDAzZT0gcGNpX251bV92ZihkcGktXHUwMDNlcGRldikpXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYy0zMzMtXHRcdGdvdG8gZXhpdDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00ODgxPWludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ4ODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0ODg1Olx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ4ODYtXHRcdERQKEJOWDJYX01TR19JT1YsIFwmIzM0O1ZGcyBhcmUgZW5hYmxlZCwgY2FuIG5vdCBjaGFuZ2UgTVRVXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00OTEwPW5ldGRldl9mZWF0dXJlc190IGJueDJ4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ5MTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0OTE1Olx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ5MTYtXHRcdG5ldGRldl9mZWF0dXJlc190IGNoYW5nZWQgPSBkZXYtXHUwMDNlZmVhdHVyZXMgXiBmZWF0dXJlcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00OTQ0PWludCBibngyeF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDk1MS1cdC8qIFZGcyBvciBub24gU1JJT1YgUEZzIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSBsb29wYmFjayBmZWF0dXJlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0OTUyOlx0aWYgKCFwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYy00OTUzLVx0XHRpZiAoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTE9PUEJBQ0spIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmM9MTk0Mj1zdGF0aWMgaW50IGJueDJ4X3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzoxOTUzOlx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0xOTU0LVx0XHREUChCTlgyWF9NU0dfSU9WLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYz0zMDA3PXN0YXRpYyB2b2lkIGJueDJ4X3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zMDEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jOjMwMTQ6XHRpZiAocGNpX251bV92ZihicC1cdTAwM2VwZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jLTMwMTUtXHRcdERQKEJOWDJYX01TR19JT1YsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTM1Njk9c3RhdGljIGludCBibngyeF9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMzU3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzozNTc5Olx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNTgwLVx0XHREUChCTlgyWF9NU0dfSU9WLCBcJiMzNDtWRnMgYXJlIGVuYWJsZWQsIGNhbiBub3Qgc2V0IGNoYW5uZWxzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xMjYxNT1zdGF0aWMgaW50IGJueHRfaHdybV9zaHV0ZG93bl9saW5rKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xMjYyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjEyNjIzOlx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xMjYyNC1cdCAgICAhKGJwLVx1MDAzZXBoeV9mbGFncyBcdTAwMjYgQk5YVF9QSFlfRkxfRldfTUFOQUdFRF9MS0ROKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYz05NzQ9dm9pZCBfX2JueHRfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYy05NzUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmM6OTc2Olx0dTE2IG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMtOTc3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jPTEwMDA9c3RhdGljIHZvaWQgYm54dF9zcmlvdl9kaXNhYmxlKHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jLTEwMDEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmM6MTAwMjpcdGlmICghcGNpX251bV92ZihicC1cdTAwM2VwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jLTEwMDMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM9MjYyPXZvaWQgYm54dF92Zl9yZXBzX2Nsb3NlKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjI3MDpcdG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTI3MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTI4Mj12b2lkIGJueHRfdmZfcmVwc19vcGVuKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjg4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjI4OTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjkwLVx0XHQvKiBPcGVuIHRoZSBWRi1SZXAgb25seSBpZiBpdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIEZXICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTMxMT1zdGF0aWMgdm9pZCBfX2JueHRfdmZfcmVwc19kZXN0cm95KHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0zMTIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjMxMzpcdHUxNiBudW1fdmZzID0gcGNpX251bV92ZihicC1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0zMTQtXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM9Mzc5PXZvaWQgYm54dF92Zl9yZXBzX2ZyZWUoc3RydWN0IGJueHQgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTM4MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM6MzgxOlx0dTE2IG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTM4Mi1cdGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz00MTY9aW50IGJueHRfdmZfcmVwc19hbGxvYyhzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNDE3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0MTg6XHR1MTYgKmNmYV9jb2RlX21hcCA9IGJwLVx1MDAzZWNmYV9jb2RlX21hcCwgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNDE5LVx0c3RydWN0IGJueHRfdmZfcmVwICp2Zl9yZXA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTQ4OT1pbnQgYm54dF92Zl9yZXBzX2NyZWF0ZShzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNDkwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0OTE6XHR1MTYgKmNmYV9jb2RlX21hcCA9IE5VTEwsIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTQ5Mi1cdHN0cnVjdCBibnh0X3ZmX3JlcCAqdmZfcmVwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz01NjE9aW50IGJueHRfZGxfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTE2IG1vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTU4NS1cdFx0LyogQ3JlYXRlIHJlcHJlc2VudG9ycyBmb3IgZXhpc3RpbmcgVkZzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM6NTg2Olx0XHRpZiAocGNpX251bV92ZihicC1cdTAwM2VwZGV2KSBcdTAwM2UgMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy01ODctXHRcdFx0cmV0ID0gYm54dF92Zl9yZXBzX2NyZWF0ZShicCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmM9NjIzNT1zdGF0aWMgaW50IGN4Z2I0X2lvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTYyMzgtXHRpbnQgZXJyID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jOjYyMzk6XHRpbnQgY3VycmVudF92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNjI0MC1cdHUzMiBwY2llX2Z3O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDIyMT1zdGF0aWMgaW50IGJlX3ZmX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNDIyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDIyODpcdG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQyMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz00NDQxPXN0YXRpYyBpbnQgYmVfZ2V0X3NyaW92X2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0NjAtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDQ2MTpcdG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0NjItXHRpZiAob2xkX3Zmcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDQ4MD1zdGF0aWMgdm9pZCBiZV9hbGxvY19zcmlvdl9yZXMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0ODEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo0NDgyOlx0aW50IG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0ODMtXHRzdHJ1Y3QgIGJlX3Jlc291cmNlcyB2ZnRfcmVzID0gezB9O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDc3OT1zdGF0aWMgYm9vbCBiZV9yZXNldF9yZXF1aXJlZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ3ODMtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjQ3ODQ6XHRcdHJldHVybiBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldikgPT0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNDc4NS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz02MDIyPXN0YXRpYyBpbnQgYmVfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy02MDQ2LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjYwNDc6XHRpZiAoc2t5aGF3a19jaGlwKGFkYXB0ZXIpIFx1MDAyNlx1MDAyNiAhcGNpX251bV92ZihwZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy02MDQ4LVx0XHRiZV9jYWxjdWxhdGVfdmZfcmVzKGFkYXB0ZXIsIGFkYXB0ZXItXHUwMDNlbnVtX3Zmcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMjEyPXN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3Zmcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMjI3LVx0fSBlbHNlIGlmICghcGNpX3Zmc19hc3NpZ25lZChwZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzIyODpcdFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMyMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYz0yMDkwPXN0YXRpYyBpbnQgaGNsZ2VfZGJnX2R1bXBfZmRfY291bnRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yMDkyLVx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGhjbGdlX3NlcV9maWxlX3RvX2hkZXYocyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jOjIwOTM6XHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KSAmIzQzOyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmMtMjA5NC1cdHN0cnVjdCBoY2xnZV9mZF9hZF9jbnRfcmVhZF9jbWQgKnJlcTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI2MTc9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF91bXZfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yNjE5LVx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGhjbGdlX3NlcV9maWxlX3RvX2hkZXYocyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jOjI2MjA6XHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KSAmIzQzOyAxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yNjIxLVx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI3ODA9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF92bGFuX2ZpbHRlcl9jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYzoyNzgzOlx0dTggZnVuY19udW0gPSBwY2lfbnVtX3ZmKGhkZXYtXHUwMDNlcGRldikgJiM0MzsgMTsgLyogcGYgYW5kIGVuYWJsZWQgdmYgbnVtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODQtXHR1OCBpLCB2bGFuX2ZlLCBieXBhc3MsIGluZ3Jlc3MsIGVncmVzcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI4MjU9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF92bGFuX29mZmxvYWRfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yODI3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjgyODpcdHU4IGZ1bmNfbnVtID0gcGNpX251bV92ZihoZGV2LVx1MDAzZXBkZXYpICYjNDM7IDE7IC8qIHBmIGFuZCBlbmFibGVkIHZmIG51bSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yODI5LVx0c3RydWN0IGhjbGdlX2RiZ192bGFuX2NmZyB2bGFuX2NmZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTI5OTQ9c3RhdGljIHZvaWQgaGNsZ2VfcHVzaF9saW5rX3N0YXR1cyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjk5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzAwMDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzAwMS1cdFx0dnBvcnQgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0W2kgJiM0MzsgSENMR0VfVkZfVlBPUlRfU1RBUlRfTlVNXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTM0NTI9c3RydWN0IGhjbGdlX3Zwb3J0ICpoY2xnZV9nZXRfdmZfdnBvcnQoc3RydWN0IGhjbGdlX2RldiAqaGRldiwgaW50IHZmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zNDUzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzQ1NDpcdGlmICghcGNpX251bV92ZihoZGV2LVx1MDAzZXBkZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTM0NTUtXHRcdGRldl9lcnIoXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTM0NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjM0NjA6XHRpZiAodmYgXHUwMDNjIDAgfHwgdmYgXHUwMDNlPSBwY2lfbnVtX3ZmKGhkZXYtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2MS1cdFx0ZGV2X2VycihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zNDYyLVx0XHRcdFwmIzM0O3ZmIGlkKCVkKSBpcyBvdXQgb2YgcmFuZ2UoMCBcdTAwM2M9IHZmaWQgXHUwMDNjICVkKVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzQ2MzpcdFx0XHR2ZiwgcGNpX251bV92ZihoZGV2LVx1MDAzZXBkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz05OTIzPXN0YXRpYyBpbnQgaGNsZ2VfcmVzdW1lX3ZmX3JhdGUoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk5MzAtXHQvKiByZXN1bWUgdGhlIHZmIG1heF90eF9yYXRlIGFmdGVyIHJlc2V0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjk5MzE6XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KTsgdmYmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk5MzItXHRcdHZwb3J0ID0gaGNsZ2VfZ2V0X3ZmX3Zwb3J0KGhkZXYsIHZmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYz0xNzIzPWludCBoY2xnZV90bV9nZXRfcXNldF9udW0oc3RydWN0IGhjbGdlX2RldiAqaGRldiwgdTE2ICpxc2V0X251bSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYy0xNzMwLVx0XHQvKiBFYWNoIFBGIGhhcyA4IHFzZXRzIGFuZCBlYWNoIFZGIGhhcyAxIHFzZXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV90bS5jOjE3MzE6XHRcdCpxc2V0X251bSA9IEhDTEdFX1RNX1BGX01BWF9RU0VUX05VTSAmIzQzOyBwY2lfbnVtX3ZmKGhkZXYtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYy0xNzMyLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYz00ODA9dm9pZCBmbTEwa19pb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jLTQ4MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYzo0ODI6XHRpZiAocGNpX251bV92ZihwZGV2KSBcdTAwMjZcdTAwMjYgcGNpX3Zmc19hc3NpZ25lZChwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jLTQ4My1cdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYz00OTE9aW50IGZtMTBrX2lvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmMtNDkyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jOjQ5MzpcdGludCBjdXJyZW50X3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYy00OTQtXHRpbnQgZXJyID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYz0yNDYzPXN0YXRpYyB2b2lkIGZtMTBrX2lvX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmMtMjQ2NS1cdC8qIHdhcm4gaW5jYXNlIHdlIGhhdmUgYW55IGFjdGl2ZSBWRiBkZXZpY2VzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYzoyNDY2Olx0aWYgKHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDY3LVx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTE1NTI4PXN0YXRpYyBpbnQgaTQwZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1ODc5LVx0ICAgICF0ZXN0X2JpdChfX0k0MEVfQkFEX0VFUFJPTSwgcGYtXHUwMDNlc3RhdGUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjE1ODgwOlx0XHRpZiAocGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTU4ODEtXHRcdFx0c2V0X2JpdChJNDBFX0ZMQUdfVkVCX01PREVfRU5BLCBwZi1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTU5NjQ6XHRcdGlmIChwY2lfbnVtX3ZmKHBkZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTY1LVx0XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2Ni1cdFx0XHRcdCBcJiMzNDtBY3RpdmUgVkZzIGZvdW5kLCBhbGxvY2F0aW5nIHJlc291cmNlcy5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxNTk2NzpcdFx0XHRlcnIgPSBpNDBlX2FsbG9jX3ZmcyhwZiwgcGNpX251bV92ZihwZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTY4LVx0XHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM9MTU4PXZvaWQgaTQwZV9yZXN0b3JlX2FsbF92ZnNfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE2NzpcdGlmICghcGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE2OC1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jPTE4Mjk9aW50IGk0MGVfYWxsb2NfdmZzKHN0cnVjdCBpNDBlX3BmICpwZiwgdTE2IG51bV9hbGxvY192ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTgzNy1cdC8qIENoZWNrIHRvIHNlZSBpZiB3ZSYjMzk7cmUganVzdCBhbGxvY2F0aW5nIHJlc291cmNlcyBmb3IgZXh0YW50IFZGcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM6MTgzODpcdGlmIChwY2lfbnVtX3ZmKHBmLVx1MDAzZXBkZXYpICE9IG51bV9hbGxvY192ZnMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4MzktXHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGYtXHUwMDNlcGRldiwgbnVtX2FsbG9jX3Zmcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM9MTg5MT1zdGF0aWMgaW50IGk0MGVfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTg5NC1cdHN0cnVjdCBpNDBlX3BmICpwZiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE4OTU6XHRpbnQgcHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYy0xODk2LVx0aW50IGVyciA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmM9Mzc1ND1zdGF0aWMgaW50IGlnYl9lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzLCBib29sIHJlaW5pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0zNzU3LVx0c3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjM3NTg6XHRpbnQgb2xkX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0zNzU5LVx0c3RydWN0IHZmX21hY19maWx0ZXIgKm1hY19saXN0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmM9MTU0PXZvaWQgaXhnYmVfZW5hYmxlX3NyaW92KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgbWF4X3Zmcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTE1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmM6MTU5Olx0cHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoYWRhcHRlci1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMTYwLVx0aWYgKCFwcmVfZXhpc3RpbmdfdmZzIFx1MDAyNlx1MDAyNiAhbWF4X3Zmcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jPTI3ND1zdGF0aWMgaW50IGl4Z2JlX3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0yNzctXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzoyNzg6XHRpbnQgcHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMjc5LVx0aW50IGVyciA9IDAsIG51bV9yeF9wb29scywgaSwgbGltaXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYz0zMzc9c3RhdGljIGludCBpeGdiZV9wY2lfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMzQyLVx0dTMyIGN1cnJlbnRfZmxhZ3MgPSBhZGFwdGVyLVx1MDAzZWZsYWdzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzozNDM6XHRpbnQgcHJldl9udW1fdmYgPSBwY2lfbnVtX3ZmKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTM0NC0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTM1MC1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiAoY3VycmVudF9mbGFncyAhPSBhZGFwdGVyLVx1MDAzZWZsYWdzIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jOjM1MTpcdFx0ICAgICBwcmV2X251bV92ZiAhPSBwY2lfbnVtX3ZmKGRldikpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0zNTItXHRcdGl4Z2JlX3NyaW92X3JlaW5pdChhZGFwdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jPTExODg9c3RhdGljIGludCBvdHgyX2FkZF9mbG93X21zZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBvdHgyX2Zsb3cgKmZsb3cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYy0xMjc0LVx0XHR2ZiA9IGV0aHRvb2xfZ2V0X2Zsb3dfc3BlY19yaW5nX3ZmKHJpbmdfY29va2llKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmM6MTI3NTpcdFx0aWYgKHZmIFx1MDAzZSBwY2lfbnVtX3ZmKHBmdmYtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMtMTI3Ni1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9OTM1PWludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9jZ3hfbGlua19ldmVudChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtOTQ0LVx0Lyogbm90aWZ5IFZGcyBhYm91dCBsaW5rIGV2ZW50ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjk0NTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBjaV9udW1fdmYocGYtXHUwMDNlcGRldik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTk0Ni1cdFx0c3RydWN0IG90eDJfdmZfY29uZmlnICpjb25maWcgPSBcdTAwMjZwZi1cdTAwM2V2Zl9jb25maWdzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTAwNT1zdGF0aWMgdm9pZCBvdHgyX3BmYWZfbWJveF91cF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTEwMzMtXHQvKiBGb3J3YXJkIHRvIFZGIGlmZiBWRnMgYXJlIHJlYWxseSBwcmVzZW50ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjEwMzQ6XHRpZiAoZGV2aWQgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGYtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTAzNS1cdFx0b3R4Ml9mb3J3YXJkX3ZmX21ib3hfbXNncyhwZiwgXHUwMDI2cGYtXHUwMDNlbWJveC5tYm94X3VwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTgyNz1zdGF0aWMgYm9vbCBvdHgyX3Byb21pc2NfdXNlX21jZV9saXN0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE4MzUtXHQvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHRydXN0ZWQgVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYgbmV0ZGV2ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE4MzY6XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIHBjaV9udW1fdmYocGZ2Zi1cdTAwM2VwZGV2KTsgdmYmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xODM3LVx0XHRpZiAocGZ2Zi1cdTAwM2V2Zl9jb25maWdzW3ZmXS50cnVzdGVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9Mjc0Mj1zdGF0aWMgaW50IG90eDJfc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6Mjc1MTpcdGlmICh2ZiBcdTAwM2U9IHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI3NTItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9Mjc2Nz1zdGF0aWMgaW50IG90eDJfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0yNzc2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyNzc3Olx0aWYgKHZmIFx1MDAzZT0gcGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc3OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yOTI0PXN0YXRpYyBpbnQgb3R4Ml9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI5MzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjI5MzE6XHRpZiAodmYgXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0yOTMyLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM0NTk9c3RhdGljIGludCBvdHgyX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNDYyLVx0c3RydWN0IG90eDJfbmljICpwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM0NjM6XHRpbnQgbnVtdmZzID0gcGNpX251bV92ZihwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzQ2NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYz0zMzgwPXN0YXRpYyBpbnQgbWx4NF9sb2FkX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBjaV9kZXZfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDQ5LVx0XHRcdGRldi1cdTAwM2VmbGFncyA9IE1MWDRfRkxBR19NQVNURVI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYzozNDUwOlx0XHRcdGV4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDUxLVx0XHRcdGlmIChleGlzdGluZ192ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYz0xODk9c3RhdGljIGludCBtbHg1X2RldmxpbmtfcmVsb2FkX2Rvd24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGJvb2wgbmV0bnNfY2hhbmdlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmMtMjIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYzoyMjE6XHRpZiAobWx4NV9jb3JlX2lzX3BmKGRldikgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTIyMi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7cmVsb2FkIHdoaWxlIFZGcyBhcmUgcHJlc2VudCBpcyB1bmZhdm9yYWJsZVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYz0xMTUzPW1seDVfZXN3X2hvc3RfcGZfZnJvbV9uZXRfZnVuY19wYXJhbXMoY29uc3QgdTggKmVudHJ5LCBpbnQgbnVtX2VudHJpZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYy0xMTcwLVx0XHRcdC5udW1fb2ZfdmZzID0gTUxYNV9HRVQobmV0d29ya19mdW5jdGlvbl9wYXJhbXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5jOjExNzE6XHRcdFx0XHRcdCAgICAgICBlbnRyeSwgcGNpX251bV92ZnMpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYy0xMTcyLVx0XHRcdC50b3RhbF92ZnMgPSBNTFg1X0dFVChuZXR3b3JrX2Z1bmN0aW9uX3BhcmFtcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmg9NDA3PXN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1X3NyaW92X2lzX2VuYWJsZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21seDVfY29yZS5oOjQwOTpcdHJldHVybiBwY2lfbnVtX3ZmKGRldi1cdTAwM2VwZGV2KSA/IHRydWUgOiBmYWxzZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIwMz12b2lkIG1seDVfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBudW1fdmZfY2hhbmdlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTIwNi1cdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYzoyMDc6XHRpbnQgbnVtX3ZmcyA9IHBjaV9udW1fdmYoZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjA4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIzMz1pbnQgbWx4NV9jb3JlX3NyaW92X3NldF9tc2l4X3ZlY19jb3VudChzdHJ1Y3QgcGNpX2RldiAqdmYsIGludCBtc2l4X3ZlY19jb3VudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0yNDYtXHRcdG1zaXhfdmVjX2NvdW50ID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjI0NzpcdFx0XHRtbHg1X2dldF9kZWZhdWx0X21zaXhfdmVjX2NvdW50KGRldiwgcGNpX251bV92ZihwZikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjQ4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTI1Nz1pbnQgbWx4NV9zcmlvdl9hdHRhY2goc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI1OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYzoyNTk6XHRpZiAoIW1seDVfY29yZV9pc19wZihkZXYpIHx8ICFwY2lfbnVtX3ZmKGRldi1cdTAwM2VwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI2MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjYyLVx0LyogSWYgc3Jpb3YgVkZzIGV4aXN0IGluIFBDSSBsZXZlbCwgZW5hYmxlIHRoZW0gaW4gZGV2aWNlIGxldmVsICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYzoyNjM6XHRyZXR1cm4gbWx4NV9kZXZpY2VfZW5hYmxlX3NyaW92KGRldiwgcGNpX251bV92ZihkZXYtXHUwMDNlcGRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjY0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYz0yNjY9dm9pZCBtbHg1X3NyaW92X2RldGFjaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjI3MTpcdG1seDVfZGV2aWNlX2Rpc2FibGVfc3Jpb3YoZGV2LCBwY2lfbnVtX3ZmKGRldi1cdTAwM2VwZGV2KSwgZmFsc2UsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI3Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM9Mjk4PWludCBtbHg1X3NyaW92X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0zMDgtXHRzcmlvdi1cdTAwM2VtYXhfdmZzID0gbWx4NV9nZXRfbWF4X3ZmcyhkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MzA5Olx0c3Jpb3YtXHUwMDNlbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0zMTAtXHRzcmlvdi1cdTAwM2VtYXhfZWNfdmZzID0gbWx4NV9jb3JlX2VjX3NyaW92X2VuYWJsZWQoZGV2KSA/IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMoZGV2LVx1MDAzZXBkZXYpIDogMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9tYWluLmM9NzU3PXN0YXRpYyBpbnQgbmZwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9tYWluLmMtODQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jOjg0ODpcdHBmLVx1MDAzZW51bV92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jLTg0OS1cdGlmIChwZi1cdTAwM2VudW1fdmZzIFx1MDAzZSBwZi1cdTAwM2VsaW1pdF92ZnMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9MzA4PXN0YXRpYyBpbnQgaW9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jLTM2MC1cdGluaXRfcndzZW0oXHUwMDI2aW9uaWMtXHUwMDNldmZfb3BfbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6MzYxOlx0bnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtMzYyLVx0aWYgKG51bV92ZnMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYz0yMzQ4PXN0YXRpYyBpbnQgaW9uaWNfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jLTIzNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYzoyMzYwOlx0aWYgKHZmIFx1MDAzZT0gcGNpX251bV92Zihpb25pYy1cdTAwM2VwZGV2KSB8fCAhaW9uaWMtXHUwMDNldmZzKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzYxLVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jPTIzNzk9c3RhdGljIGludCBpb25pY19nZXRfdmZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jLTIzOTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYzoyMzkyOlx0aWYgKHZmIFx1MDAzZT0gcGNpX251bV92Zihpb25pYy1cdTAwM2VwZGV2KSB8fCAhaW9uaWMtXHUwMDNldmZzKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzkzLVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jPTI0MTY9c3RhdGljIGludCBpb25pY19zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTggKm1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yNDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmM6MjQzMTpcdGlmICh2ZiBcdTAwM2U9IHBjaV9udW1fdmYoaW9uaWMtXHUwMDNlcGRldikgfHwgIWlvbmljLVx1MDAzZXZmcykge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgcGNpX251bV92ZmAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgcGNpX251bV92ZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcywgYW5kIHNpbmNlIHRoaXMgc291bmRzIGxpa2UgYSBQQ0ktc3BlY2lmaWMgdmFsdWUsIGBpbmNsdWRlL2xpbnV4L3BjaS5oYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIGdldCB0byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMgYWJvdXQgYHBjaV9udW1fdmZgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbWFjcm8sIGEgc3RydWN0dXJlIG1lbWJlciwgb3Igc29tZXRoaW5nIHRoYXQgY2xhcmlmaWVzIGl0cyBtZWFuaW5nIGFuZCB1c2FnZSBpbiB0aGUga2VybmVsJiMzOTtzIFBDSSBzdWJzeXN0ZW0uIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfbnVtX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wY2kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BjaS5oPTI1Njk9dm9pZCBwY2lfaW92X3JlbW92ZV92aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKTtcbmluY2x1ZGUvbGludXgvcGNpLmg6MjU3MDppbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmgtMjU3MS1pbnQgcGNpX3Zmc19hc3NpZ25lZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTI2MjA9c3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfVxuaW5jbHVkZS9saW51eC9wY2kuaDoyNjIxOnN0YXRpYyBpbmxpbmUgaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9wY2kuaC0yNjIyLXN0YXRpYyBpbmxpbmUgaW50IHBjaV92ZnNfYXNzaWduZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBwY2lfbnVtX3ZmYCBzaXR1YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3IGNvZGUuIEl0IGxvb2tzIGxpa2UgYHBjaV9udW1fdmZgIGlzIHByZXNlbnQgcmVnYXJkbGVzcywgYnV0IGl0JiMzOTtsbCByZXR1cm4gemVybyBpZiBgUENJX0lPVmAgaXNuJiMzOTt0IGVuYWJsZWQuIFRoYXQmIzM5O3Mgbm8gZ29vZCBmb3IgbWU7IEkgbmVlZCB0byBhY3R1YWxseSAqcnVuKiB0aGUgY29kZSwgbm90IGp1c3QgY2hlY2sgaWYgaXQmIzM5O3MgdGhlcmUuIFNvLCBgUENJX0lPVmAgKmRlZmluaXRlbHkqIG5lZWRzIHRvIGJlIGluIG15IGBFbmFibGVDb25maWdzYC4KClRoZW4gdGhlcmUmIzM5O3MgYFZGSU9fUENJYC4gSSBrbm93IHRoYXQgSSBuZWVkIHRoZSBWRklPIFBDSSBkcml2ZXIgZm9yIGV4cG9zaW5nIFBDSSBkZXZpY2VzIHRvIFZGSU8sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpcyBpbmNsdWRlZC4gVGhlbiBJIHJlY2FsbGVkIHRoYXQgYFZGSU9fUENJYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBWRklPX1BDSV9DT1JFYC4gR29vZCB0aGluZyBJIGNoZWNrZWQhIEJ1dCwgZG9lcyBgVkZJT19QQ0lgICphbG9uZSogZ2V0IG1lIHdoYXQgSSBuZWVkPwoKTG9va3MgbGlrZSB0aGF04oCZcyBzdWZmaWNpZW50LiBgVkZJT19QQ0lgIHNlbGVjdHMgYFZGSU9fUENJX0NPUkVgLCBzbyB0aGF0IGRlcGVuZGVuY3kgaXMgYWxyZWFkeSBoYW5kbGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3M/IEkga25vdyBJJiMzOTtsbCBuZWVkIGBQQ0lgLCBidXQgdGhhdCYjMzk7cyBhIGJhc2UgY29uZmlnIGFuZCBsaWtlbHkgYWxyZWFkeSBlbmFibGVkLiBJIGFsc28gbmVlZCBgUENJX0lPVmAsIHdoaWNoIGlzIGFscmVhZHkgb24gdGhlIGxpc3QuIEJ1dCBJICphbHNvKiBuZWVkIGBWRklPX1BDSWAgZm9yIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGRyaXZlci4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBgVkZJT2AuIFNlZW1zIGxpa2UgYFZGSU9fUENJYCBkZXBlbmRzIG9uIGBWRklPYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBgZHJpdmVycy92ZmlvL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRklPXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gICA1Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcbiAgIDY6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gICA3Olx0XHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXG4gICA4Olx0XHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxuICAgOTpcdFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxuICAxMjpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxuICAxNTpcdFxuICAxNjpcdGlmIFZGSU9cbiAgMTc6XHRjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuICAxODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgXHUwMDI2XHUwMDI2ICFTUEFQUl9UQ0VfSU9NTVVcbiAgMjA6XHRcdGRlZmF1bHQgIVZGSU9fR1JPVVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc2V0dGluZyB1cCBgVkZJT2AsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgY29uZmlncyB0byBlbmFibGUgYXJlIGBWRklPYCwgYFZGSU9fUENJYCwgYW5kIGBQQ0lfSU9WYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBteSBzZXR1cC4gSSB3b25kZXJlZCBhYm91dCBgVkZJT19QQ0lfQ09SRWAsIGJ1dCBhZnRlciBjaGVja2luZyB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCwgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IHZpc2libGUuIEl0JiMzOTtzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBWRklPX1BDSWAsIHNvIEkmIzM5O2xsIGJlIGVuYWJsaW5nIHRoYXQgaW5zdGVhZC4KCk5vdywgbXkgbWluZCBzaGlmdHMgdG8gZnVuY3Rpb24gY2FsbHMuIEkmIzM5O20gZm9jdXNpbmcgb24gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBhbmQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBzcGVjaWZpY2FsbHkuIEhtbSwgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyBiZWluZyBjYWxsZWQgd2l0aCBgbnJfdmlydGZuID0gMGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuIFRpbWUgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCB0byBzZWUgaWYgaXQgbWlnaHQgYmUgYSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCBjb3VsZCBwcmVzZW50IGFuIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjM1Nj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Flcl9lcnJfZGV0ZWN0ZWQpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1Ny1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzNTg6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzNTktXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTcxPWV4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTcyOmludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzMtXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU0MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDoKCioqRGVsdmluZyBpbnRvIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZS4gRmlyc3QsIEkgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZDsgd2hhdCBzZXRzIHRoZSBzdGFnZSBmb3IgdGhpcyBmdW5jdGlvbj8gQXJlIHdlIGNvbWluZyBpbiB0aHJvdWdoIGRldmljZSBwcm9iZSwgc29tZSB1c2VyLXNwYWNlIHJlcXVlc3QsIG9yIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgdmZpby9QQ0kgaW5pdGlhbGl6YXRpb24gbGlmZWN5Y2xlPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IGRlY2lzaW9uIHBvaW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgY29uZmlndXJpbmcgU1ItSU9WLiBEb2VzIGl0IGludm9sdmUgc2V0dGluZyB1cCB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpPyBBcmUgdGhlcmUgY2hlY2tzIGZvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBwZXJtaXNzaW9uaW5nPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGVzcGVjaWFsbHkgdGhlIFZGIEJBUnMgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMpLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWRiBkcml2ZXJzLgoKQSBkZWVwZXIgdW5kZXJzdGFuZGluZyB3aWxsIGludm9sdmUgaG93IGl0IGhhbmRsZXMgYW55IGVycm9ycy4gSSBuZWVkIHRvIGtub3cgdGhlIGVycm9yIGNvZGVzIGl0IHJldHVybnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIHJldHJpZXMgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcz8gRG9lcyBpdCBjbGVhbiB1cCBwYXJ0aWFsbHkgY29uZmlndXJlZCBzdGF0ZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gUHJvcGVyIGVycm9yIGhhbmRsaW5nIGlzIGVzc2VudGlhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBmcm9tIHRoZSBob3N0IGFuZCBwb3RlbnRpYWxseSB0aGUgZ3Vlc3QsIHRoZSBsb2NraW5nIGFyb3VuZCBjb25maWd1cmF0aW9uIGNoYW5nZXMgaXMgY3J1Y2lhbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbXV0ZXhlcywgc3BpbmxvY2tzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgcHJldmVudCBjb25mbGljdHMuIEFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBlbm91Z2gsIG9yIGNvdWxkIHRoZXkgbGVhZCB0byBjb250ZW50aW9uPwoKVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBTUi1JT1YsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgVkYgZHJpdmVycywgYW5kIHdoYXQgaXQgZG9lcyB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHNlY3VyZSBzZXR1cC4gVWx0aW1hdGVseSwgdGhpcyB1bmRlcnN0YW5kaW5nIHNob3VsZCBhbGxvdyBtZSB0byBpZGVudGlmeSBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNTg6XHRpbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuMjM1OTpcdFx0XHRcdFx0ICBpbnQgbnJfdmlydGZuKVxuMjM2MDpcdHtcbjIzNjE6XHRcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuMjM2MjpcdFx0aW50IHJldCA9IDA7XG4yMzYzOlx0XG4yMzY0Olx0XHRkZXZpY2VfbG9ja19hc3NlcnQoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjM2NTpcdFxuMjM2NjpcdFx0aWYgKG5yX3ZpcnRmbikge1xuMjM2NzpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XG4yMzY4Olx0XHRcdC8qXG4yMzY5Olx0XHRcdCAqIFRoZSB0aHJlYWQgdGhhdCBhZGRzIHRoZSB2ZGV2IHRvIHRoZSBsaXN0IGlzIHRoZSBvbmx5IHRocmVhZFxuMjM3MDpcdFx0XHQgKiB0aGF0IGdldHMgdG8gY2FsbCBwY2lfZW5hYmxlX3NyaW92KCkgYW5kIHdlIHdpbGwgb25seSBhbGxvd1xuMjM3MTpcdFx0XHQgKiBpdCB0byBiZSBjYWxsZWQgb25jZSB3aXRob3V0IGdvaW5nIHRocm91Z2hcbjIzNzI6XHRcdFx0ICogcGNpX2Rpc2FibGVfc3Jpb3YoKVxuMjM3MzpcdFx0XHQgKi9cbjIzNzQ6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnZkZXYtXHUwMDNlc3Jpb3ZfcGZzX2l0ZW0pKSB7XG4yMzc1Olx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjIzNzY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzc3Olx0XHRcdH1cbjIzNzg6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ2ZGV2LVx1MDAzZXNyaW92X3Bmc19pdGVtLCBcdTAwMjZ2ZmlvX3BjaV9zcmlvdl9wZnMpO1xuMjM3OTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcbjIzODA6XHRcbjIzODE6XHRcdFx0LypcbjIzODI6XHRcdFx0ICogVGhlIFBGIHBvd2VyIHN0YXRlIHNob3VsZCBhbHdheXMgYmUgaGlnaGVyIHRoYW4gdGhlIFZGIHBvd2VyXG4yMzgzOlx0XHRcdCAqIHN0YXRlLiBUaGUgUEYgY2FuIGJlIGluIGxvdyBwb3dlciBzdGF0ZSBlaXRoZXIgd2l0aCBydW50aW1lXG4yMzg0Olx0XHRcdCAqIHBvd2VyIG1hbmFnZW1lbnQgKHdoZW4gdGhlcmUgaXMgbm8gdXNlcikgb3IgUENJX1BNX0NUUkxcbjIzODU6XHRcdFx0ICogcmVnaXN0ZXIgd3JpdGUgYnkgdGhlIHVzZXIuIElmIFBGIGlzIGluIHRoZSBsb3cgcG93ZXIgc3RhdGUsXG4yMzg2Olx0XHRcdCAqIHRoZW4gY2hhbmdlIHRoZSBwb3dlciBzdGF0ZSB0byBEMCBmaXJzdCBiZWZvcmUgZW5hYmxpbmdcbjIzODc6XHRcdFx0ICogU1ItSU9WLiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGFuZFxuMjM4ODpcdFx0XHQgKiB1c2Vyc3BhY2UgUENJX1BNX0NUUkwgd3JpdGUgY2FuIHJhY2UgYWdhaW5zdCB0aGlzIGNvZGUgcGF0aCxcbjIzODk6XHRcdFx0ICogc28gcHJvdGVjdCB0aGUgc2FtZSB3aXRoICYjMzk7bWVtb3J5X2xvY2smIzM5Oy5cbjIzOTA6XHRcdFx0ICovXG4yMzkxOlx0XHRcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjM5MjpcdFx0XHRpZiAocmV0KVxuMjM5MzpcdFx0XHRcdGdvdG8gb3V0X2RlbDtcbjIzOTQ6XHRcbjIzOTU6XHRcdFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbjIzOTY6XHRcdFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4yMzk3Olx0XHRcdHZkZXYtXHUwMDNlc3Jpb3ZfYWN0aXZlID0gdHJ1ZTtcbjIzOTg6XHRcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4yMzk5Olx0XHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnJfdmlydGZuKTtcbjI0MDA6XHRcdFx0aWYgKHJldCkge1xuMjQwMTpcdFx0XHRcdHBtX3J1bnRpbWVfcHV0KFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjI0MDI6XHRcdFx0XHRnb3RvIG91dF9kZWw7XG4yNDAzOlx0XHRcdH1cbjI0MDQ6XHRcdFx0cmV0dXJuIG5yX3ZpcnRmbjtcbjI0MDU6XHRcdH1cbjI0MDY6XHRcbjI0MDc6XHRcdGlmIChwY2lfbnVtX3ZmKHBkZXYpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTA3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipBbmFseXppbmcgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljIGFuZCBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBhY2hpZXZlcyBpdHMgcHVycG9zZS4gVGhlIGJpZyBwaWN0dXJlIGlzIHNldCwgc28gbGV0JiMzOTtzIHBhcnNlIHRocm91Z2ggdGhlIGxpbmVzIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDA3Olx0XHRpZiAocGNpX251bV92ZihwZGV2KSkge1xuMjQwODpcdFx0XHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcbjI0MDk6XHRcdFx0cG1fcnVudGltZV9wdXQoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjQxMDpcdFx0fVxuMjQxMTpcdFxuMjQxMjpcdG91dF9kZWw6XG4yNDEzOlx0XHQvKlxuMjQxNDpcdFx0ICogQXZvaWQgdGFraW5nIHRoZSBtZW1vcnlfbG9jayBpbnRlbnRpb25hbGx5LiBBIHJhY2Ugd2l0aCBhIHBvd2VyXG4yNDE1Olx0XHQgKiBzdGF0ZSB0cmFuc2l0aW9uIHdvdWxkIGF0IG1vc3QgcmVzdWx0IGluIGFuIC1FQlVTWSwgbGVhdmluZyB0aGVcbjI0MTY6XHRcdCAqIGRldmljZSBpbiBQQ0lfRDAuXG4yNDE3Olx0XHQgKi9cbjI0MTg6XHRcdHZkZXYtXHUwMDNlc3Jpb3ZfYWN0aXZlID0gZmFsc2U7XG4yNDE5Olx0XG4yNDIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XG4yNDIxOlx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnZkZXYtXHUwMDNlc3Jpb3ZfcGZzX2l0ZW0pO1xuMjQyMjpcdG91dF91bmxvY2s6XG4yNDIzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcbjI0MjQ6XHRcdHJldHVybiByZXQ7XG4yNDI1Olx0fVxuMjQyNjpcdEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKTtcbjI0Mjc6XHRcbjI0Mjg6XHRjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzID0ge1xuMjQyOTpcdFx0LmVycm9yX2RldGVjdGVkID0gdmZpb19wY2lfY29yZV9hZXJfZXJyX2RldGVjdGVkLFxuMjQzMDpcdH07XG4yNDMxOlx0RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9lcnJfaGFuZGxlcnMpO1xuMjQzMjpcdFxuMjQzMzpcdHN0YXRpYyBib29sIHZmaW9fZGV2X2luX2dyb3VwcyhzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsXG4yNDM0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9ncm91cF9pbmZvICpncm91cHMpXG4yNDM1Olx0e1xuMjQzNjpcdFx0dW5zaWduZWQgaW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTg5CgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkZJTyBQQ0kgRGV2aWNlIENsb3N1cmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCB3aXRoIGBucl92aXJ0Zm4gPSAwYCBlZmZlY3RpdmVseSBkaXNhYmxlcyBTUklPViwgcmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBgdmZpb19wY2lfc3Jpb3ZfcGZzYCBsaXN0LiBUaGlzIHNlZW1zIGNvcnJlY3QgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIFZGcyBhcmUgYWxyZWFkeSBlbmFibGVkLiBUaGUga2V5IHBhcnQgaXMsIG9mIGNvdXJzZSwgdGhlIGNvbmRpdGlvbjogYGlmIChwY2lfbnVtX3ZmKHZkZXYtJmd0O3BkZXYpKWAuIFRoaXMgY2hlY2tzIGlmIGFueSBWRnMgYXJlIHByZXNlbnQuICBJZiBzbywgdGhlIHBhdGNoIGNhbGxzIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKWAgd2l0aGluIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIGVuc3VyaW5nIFZGcyBhcmUgZGlzYWJsZWQgKmJlZm9yZSogdGhlIGRldmljZSBpcyBjbG9zZWQuICBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gZGV2aWNlcyBhcmUgcmVtb3ZlZC4KClNvLCB0byBzdW1tYXJpemUgc3VjY2luY3RseTogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCB0byBleHBsaWNpdGx5IGRpc2FibGUgU1ItSU9WIFZGcy4gVGhpcyBlbnN1cmVzIFZGcyBhcmUgZGlzYWJsZWQgb24gZGV2aWNlIGNsb3N1cmUsIHdoaWNoIGlzIGVzc2VudGlhbCB0byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmZpby1wY2kuIEkmIzM5O2QgYXNzZXNzIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAgYW5kIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAgYXMgdGhlIHN5bWJvbHMgb2YgZm9jdXMuIFRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSW5pdGlhbGx5LCBJIHN1c3BlY3RlZCB3ZSBtaWdodCBuZWVkIG1vcmUgdGhhbiBqdXN0IGBWRklPYCwgYW5kIHRoYXQgYFZGSU9fVklSUUZEYCB3b3VsZCBiZSBuZWNlc3NhcnkuICBIb3dldmVyLCBgVkZJT19QQ0lfQ09SRWAgc2VsZWN0cyBgVkZJT19WSVJRRkRgIGFuZCBgSVJRX0JZUEFTU19NQU5BR0VSYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYFZGSU9fUENJYCBpcyBzdWZmaWNpZW50LiBCdXQsIHdlIGFsc28gbmVlZCBgUENJX0lPVmAgc2luY2UgYHBjaV9udW1fdmZgIGlzIHRoZSB0cmlnZ2VyLiBJdCBpcyBhIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGUgdG8gb2J0YWluIGEgbm9uLXplcm8gdmFsdWUuIFRodXMsIGBWRklPX1BDSWAgYW5kIGBQQ0lfSU9WYCBhcmUgcmVxdWlyZWQsIGFsb25nIHdpdGggYFZGSU9gIG9mIGNvdXJzZS4gSSBjYW4mIzM5O3Qgc2VlIGFueSBvdGhlciBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLCBzbyBsZXQmIzM5O3MgbG9jayB0aGlzIGRvd24gYW5kIGdlbmVyYXRlIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjMyLjUxNTQ3NjM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5OTQyNzEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZGlzYWJsZSBTUi1JT1YgVkZzIHdoZW4gYSBWRklPIFBDSSBkZXZpY2UgaXMgY2xvc2VkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgYmluZGluZyBhIHZpcnR1YWwgUENJIGRldmljZSB0byB2ZmlvLXBjaSwgZW5hYmxpbmcgVkZzLCBhbmQgY2xvc2luZyB0aGUgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTozMi41MTU0ODMxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExMjUwOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTAzOGI1YzI5NTg0NjYzOThhMDEzNDg4Y2U0NTFhNTFiMDhkYjJkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDAwOjM5OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5pbmRleCBhMTEzYzU1ODQ1ZTEwLi5iMzZjNzdlYjNjNDA3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5AQCAtODI2LDYgKzgyNiwxMyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxcbiBcXHRlZWhfZGV2X3JlbGVhc2UodmRldi1cXHUwMDNlcGRldik7XFxuICNlbmRpZlxcbitcXG4rXFx0aWYgKHBjaV9udW1fdmYodmRldi1cXHUwMDNlcGRldikpIHtcXG4rXFx0XFx0ZGV2aWNlX2xvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdFxcdHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApO1xcbitcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHR9XFxuK1xcbiBcXHR2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAodmRldik7XFxuIFxcbiBcXHR2ZmlvX3BjaV9jb3JlX2Rpc2FibGUodmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjMyLjkyNzUyMTA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0NTgyMjEyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTAzOGI1YzI5NTg0NjYzOThhMDEzNDg4Y2U0NTFhNTFiMDhkYjJkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDA6Mzk6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMTEzYzU1ODQ1ZTEwLi5iMzZjNzdlYjNjNDA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtODI2LDYgKzgyNiwxMyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXG4gXHRlZWhfZGV2X3JlbGVhc2UodmRldi1cdTAwM2VwZGV2KTtcbiAjZW5kaWZcbitcbitcdGlmIChwY2lfbnVtX3ZmKHZkZXYtXHUwMDNlcGRldikpIHtcbitcdFx0ZGV2aWNlX2xvY2soXHUwMDI2dmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRcdHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApO1xuK1x0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuK1x0fVxuK1xuIFx0dmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHZkZXYpO1xuIFxuIFx0dmZpb19wY2lfY29yZV9kaXNhYmxlKHZkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MzIuOTI3NTIyMjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNTM1MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWRklPLVBDSSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AuIEl0IHNlZW1zIHRoZXkncmUgYWRkaW5nIGEgY2FsbCB0byBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMClgIHdpdGhpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgLCBidXQgb25seSBpZiB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgUENJIGRldmljZSAoYHZkZXYtXHUwMDNlcGRldmApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGlzIGlzIGNvcmUgVkZJTy1QQ0kgZHJpdmVyIHRlcnJpdG9yeSwgd2hpY2gsIGFzIHdlIGtub3csIHByb3ZpZGVzIHRoZSBjcnVjaWFsIGludGVyZmFjZSBmb3IgdXNlcnNwYWNlIGFjY2VzcyB0byBkZXZpY2VzLlxuXG5UaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIGlzIGludm9rZWQgd2hlbiBhIFZGSU8gZGV2aWNlIGlzIGJlaW5nIGNsb3NlZC4gVGhlIGtleSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgcHJhY3RpY2FsIHNjZW5hcmlvLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBXZSBrbm93IFZGSU8tUENJIHR5cGljYWxseSBleHBlY3RzIGFuIElPTU1VIGFuZCBwaHlzaWNhbCBkZXZpY2VzLCBidXQgdGhlcmUgYXJlIGRlZmluaXRlbHkgZXhjZXB0aW9ucyBsaWtlIGB2ZmlvLW1kZXZgIG9yIGB2ZmlvLXBjaWAgY29uZmlndXJhdGlvbnMgdGhhdCBjYW4gd29yayB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlIG9yIG1vY2sgSU9NTVVzLiBTbywgeWVzLCBpdOKAmXMgcGxhdXNpYmxlLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIOKAkyBpcyB0aGlzICpmdXp6YWJsZSo/IENhbiB3ZSB0cmlnZ2VyIHRoaXMgcGF0aCB3aXRoIGZ1enppbmc/IEkgbmVlZCB0byBjaGVjay4gTGV0J3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgU3l6a2FsbGVyIGhhdmluZyBzb21lIFZGSU8gZGVzY3JpcHRpb25zLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gV2Uga25vdyB0aGF0IGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAgaXMgYmVpbmcgdHJpZ2dlcmVkIG9uIGEgY2xvc2UgZXZlbnQsIHNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYnkgY2hlY2tpbmcgdGhlIHRlc3QgY2FzZXMgaW4gU3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MzcuODYyODc3NDgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc1NDc4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTU0Mj1zdGF0aWMgdm9pZCBoaXNpX2FjY192ZmlvX3BjaV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1NTItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoaXNpX2FjY192ZGV2LVxcdTAwM2VvcGVuX211dGV4KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE1NTM6XFx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1NTQtfVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYwNi1cXHQub3Blbl9kZXZpY2UgPSBoaXNpX2FjY192ZmlvX3BjaV9vcGVuX2RldmljZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE2MDc6XFx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYwOC1cXHQuaW9jdGwgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zMzktXFx0Lm9wZW5fZGV2aWNlID0gaXNtX3ZmaW9fcGNpX29wZW5fZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYzozNDA6XFx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDEtXFx0LmlvY3RsID0gdmZpb19wY2lfY29yZV9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9MTM0MD1zdGF0aWMgdm9pZCBtbHg1dmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM0NS1cXHRtbHg1dmZfY21kX2Nsb3NlX21pZ3JhdGFibGUobXZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6MTM0NjpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM0Ny19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0yMjc9c3RhdGljIHZvaWQgbnZncmFjZV9ncHVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMjUzLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjI1NDpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTI1NS19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9jb3JlX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwOTQtXFx0Lm9wZW5fZGV2aWNlXFx0PSBudmdyYWNlX2dwdV9vcGVuX2RldmljZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMDk1OlxcdC5jbG9zZV9kZXZpY2VcXHQ9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwOTYtXFx0LmlvY3RsXFx0XFx0PSB2ZmlvX3BjaV9jb3JlX2lvY3RsLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYz0xNzc9c3RhdGljIHZvaWQgcGRzX3ZmaW9fY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTg3LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGRzX3ZmaW8tXFx1MDAzZXN0YXRlX211dGV4KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jOjE4ODpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSh2ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE4OS19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmM9MTA2PXN0YXRpYyB2b2lkIHFhdF92Zl9wY2lfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jLTExMi1cXHRxYXRfdmZfZGlzYWJsZV9mZHMocWF0X3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYzoxMTM6XFx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmMtMTE0LX1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYz0xNDk9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1My1cXHQub3Blbl9kZXZpY2VcXHQ9IHZmaW9fcGNpX29wZW5fZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYzoxNTQ6XFx0LmNsb3NlX2RldmljZVxcdD0gdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1NS1cXHQuaW9jdGxcXHRcXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz04MTM9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9kaXNhYmxlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTQtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6ODE1OnZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODE2LXtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTg0NC19XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6ODQ1OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04NDYtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9NDU9c3RhdGljIHZvaWQgdmlydGlvdmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy01MC1cXHR2aXJ0aW92Zl9jbG9zZV9taWdyYXRpb24odmlydHZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo1MTpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy01Mi19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZpcnRpb3ZmX3ZmaW9fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzItXFx0Lm9wZW5fZGV2aWNlID0gdmlydGlvdmZfcGNpX29wZW5fZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxMzM6XFx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzQtXFx0LmlvY3RsID0gdmZpb19wY2lfY29yZV9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTE2ND1zdGF0aWMgdm9pZCB4ZV92ZmlvX3BjaV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy0xNzEtXFx0eGVfdmZpb19wY2lfc3RhdGVfbXV0ZXhfdW5sb2NrKHhlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjE3MjpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jLTE3My19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD0xNjI9aW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNjUtXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IHNpemUsIHUzMiBmbGFncywgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTY2OnZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE2Ny1pbnQgdmZpb19wY2lfY29yZV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjM5LjU5MDQzMDIxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTM5MjU5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkZJTyBQQ0kgYW5kIFN5emthbGxlcjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBpcyBhIGtleSBmdW5jdGlvbiwgZXhwb3J0ZWQgYW5kIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGJ5IHRoZXNlIFZGSU8gUENJIGRyaXZlcnMsIGV2ZW4gd2l0aGluIGB2ZmlvX3BjaS5jYCBpdHNlbGYuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuICpyZWFjaCogYHZmaW9fcGNpYCB0aHJvdWdoIFN5emthbGxlcj9cblxuU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3lzL2xpbnV4L3ZmaW8udHh0YCwgc28gYXQgbGVhc3QgaXQgKmtub3dzKiBhYm91dCB0aGUgVkZJTyBpb2N0bHMuIEJ1dCBob2xkIG9uLCBmb3IgVkZJTyBQQ0ksIEkgbmVlZCBhIFBDSSBkZXZpY2UsIHJpZ2h0PyBTeXprYWxsZXIgdXNlcyBgdmhjaWAsIGB2a21zYCwgYW5kIGB2bmV0YOKApiBEb2VzIGl0IGhhdmUgc29tZSBraW5kIG9mIHZpcnR1YWwgUENJIGRldmljZSB0aGF0IGNhbiBhY3R1YWxseSBiZSBib3VuZCB0byBWRklPPyBOb3csIEkgZG8gcmVtZW1iZXIgc2VlaW5nIHRoZSBgdmZpby1wY2lgIGRyaXZlci4gU28sIGNhbiBTeXprYWxsZXIgYmluZCBhIGRldmljZSB0byB0aGF0P1xuXG5MZXQgbWUgc2Vl4oCmIFllYWgsIGl0IGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgIGFuZCBvdGhlciByZWxhdGVkIHNldHVwIHJvdXRpbmVzLiBCdXQgZm9yIFZGSU8gc3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGl0IGNhbiBvcGVuIGAvZGV2L3ZmaW8vdmZpb2AgYW5kIGAvZGV2L3ZmaW8vWGAuIFRoYXQncyBhIGdvb2Qgc2lnbiEgTmV4dCBzdGVwLCBJIG5lZWQgdG8gY2hlY2sgaWYgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyByZWFjaGFibGUsIGFuZCB0aGVuIEknbGwgc2VlIGlmIEkgY2FuIGdldCB0aGlzIGFsbCB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjQ0LjA4NDM1OTM5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4NzM5NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MjA5PXN0YXRpYyBpbnQgdmZpb19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnJfdmlydGZuKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTIxNS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MjE2OlxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCBucl92aXJ0Zm4pO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0yMTctfVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NTM9aW50IHZmaW9fcGNpX2V2ZW50ZmRfcmVwbGFjZV9sb2NrZWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNzctXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Nzg6LyogTGlzdCBvZiBQRidzIHRoYXQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUoKSBoYXMgYmVlbiBjYWxsZWQgb24gKi9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03OS1zdGF0aWMgREVGSU5FX01VVEVYKHZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz04MTU9dm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTgzMS1cXHRcXHRkZXZpY2VfbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo4MzI6XFx0XFx0dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODMzLVxcdFxcdGRldmljZV91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yMDk5PXN0YXRpYyBpbnQgdmZpb19wY2lfdmZfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMTA3LVxcdFxcdC8qXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MjEwODpcXHRcXHQgKiBJZiB0aGlzIFZGIHdhcyBjcmVhdGVkIGJ5IG91ciB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSgpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjEwOS1cXHRcXHQgKiB0aGVuIHdlIGNhbiBmaW5kIHRoZSBQRiB2ZmlvX3BjaV9jb3JlX2RldmljZSBub3csIGFuZCBkdWUgdG9cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTIzMjY9dm9pZCB2ZmlvX3BjaV9jb3JlX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzI3LXtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMzI4OlxcdHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzMjktXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yMzU2PUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfYWVyX2Vycl9kZXRlY3RlZCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMzU4OmludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1OS1cXHRcXHRcXHRcXHQgIGludCBucl92aXJ0Zm4pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNDI1LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyNDI2OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNDI3LVxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTcxPWV4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjE3MjppbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3My1cXHRcXHRcXHRcXHQgIGludCBucl92aXJ0Zm4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTo0NS44NDMxMDUwODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE3NjUxNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gUENJIFNSSU9WIERpc2FibGVtZW50IG9uIENsb3NlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIFNSSU9WIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBWRklPIFBDSSBjb3JlLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgY2FsbCB0byBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMClgIGluIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAuIFRoZSBsb2dpYyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSWYgdGhlIHBoeXNpY2FsIGRldmljZSAoYHBkZXZgKSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgZGV2aWNlIChgdmRldmApIGhhcyBhbnkgdmlydHVhbCBmdW5jdGlvbnMgKFZGcykgZW5hYmxlZCAoY2hlY2tlZCB2aWEgYHBjaV9udW1fdmYodmRldi1cdTAwM2VwZGV2KWApLCB0aGVuIFNSSU9WIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgZHVyaW5nIHRoZSBkZXZpY2UgY2xvc2UgcHJvY2VkdXJlLiBUaGlzIGNsZWFybHkgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBkcml2ZXIncyBiZWhhdmlvci5cblxuTm93LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGZ1enppbmcuIEknbSBhbHdheXMgdGhpbmtpbmcgYWJvdXQgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4gSXMgdGhpcyBWRklPIFBDSSBjb2RlIHBhdGggZnV6emFibGUgd2l0aCBzeXprYWxsZXI/IFdlIGtub3cgdGhlcmUgYXJlIGBzeXpfa3ZtX3NldHVwX2NwdWAgYW5kIGBzeXpfa3ZtX3NldHVwX3ZtYCBjYWxscyBpbiBzeXprYWxsZXIsIHdoaWNoIGRlYWwgd2l0aCBLVk0uIEJ1dCwgd2hhdCBhYm91dCBWRklPPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBkZWRpY2F0ZWQgZGVzY3JpcHRpb25zIG9yIHN1cHBvcnQgZm9yIFZGSU8gc3lzdGVtIGNhbGxzLiBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgaWYgdGhlcmUgYXJlLCBhcyB0aGUgcGF0Y2ggZm9jdXNlcyBvbiB0aGlzIFNSSU9WIGNvbmZpZ3VyYXRpb24gYW5kIGNsb3NpbmcgdGhlIGRldmljZSwgYm90aCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODA2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjQ5Ljg2MDc1OTA2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2OTQzMTk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfLip2ZmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6NTIuMTU3NzEwOTA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMzQwNTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkZJTyBSZWFjaGFiaWxpdHkgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIGlzIHJlYWNoYWJsZSB0aHJvdWdoIFZGSU8sIHBhcnRpY3VsYXJseSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEkndmUgZ290IGEgYml0IG9mIGEgcm9hZGJsb2NrOiBJIGNhbid0IHVzZSBgc3l6X2Agd2l0aCBncmVwcGVyIGJlY2F1c2UgdGhvc2UgYXJlIFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMgYW5kIG5vdCBhY3R1YWwga2VybmVsIGNhbGxzLiBCdXQgdGhhdCdzIGZpbmU7IEknbSBub3QgbG9va2luZyBhdCBTeXprYWxsZXIgZGVzY3JpcHRpb25zIHJpZ2h0IG5vdy4gSSBqdXN0IG5lZWQgdG8gZmlndXJlIG91dCBWRklPIHJlYWNoYWJpbGl0eS5cblxuVGhlIHByb21wdCBub3RlcyBgdmZpb2AgdXNlIHdpdGggdmlydHVhbCBkZXZpY2VzLiBJIGtub3cgdGhhdCBgdmZpby1tZGV2YCBvciBgdmZpby1wY2lgIHdpdGggYSB2aXJ0dWFsIFBDSSBkZXZpY2UgYXJlIHBvc3NpYmlsaXRpZXMuIEhvd2V2ZXIsIGB2ZmlvLXBjaWAgdHlwaWNhbGx5IGJpbmRzIHRvIGEgKnBoeXNpY2FsKiBQQ0kgZGV2aWNlLCByaWdodD8gQnV0IHRoZW4sIGluIFFFTVUsIHdlICpkbyogaGF2ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIGxpa2UgYGUxMDAwYCBhbmQgYHZpcnRpby1uZXQtcGNpYC4gSG1tLi4uIGNhbiB5b3UgYmluZCBhICp2aXJ0dWFsKiBQQ0kgZGV2aWNlIHRvIGB2ZmlvLXBjaWA/XG5cbkFoLCB5ZXMsIG9mIGNvdXJzZSEgWW91IGNhbiBpZiB0aGUga2VybmVsIGJvb3RzIHdpdGggYGlvbW11PXB0YCBvciBgaW50ZWxfaW9tbXU9b25gIGFuZCB0aGUgUUVNVSBtYWNoaW5lIGhhcyBhIHZJT01NVSwgb3IgaWYgYHZmaW9gIGlzIHVzZWQgd2l0aCBgbm9pb21tdWAgbW9kZS4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5XYWl0IGEgc2Vjb25kLi4uIFN5emthbGxlciBhY3R1YWxseSAqZG9lcyogdGVzdCBWRklPISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgZm9yIGV4YW1wbGVzLiBTdGlsbCwgSSBtaWdodCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfVkZJT19QQ0lgIGFzIGEgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTo1Ny42NzExMTkzMTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzkyOTUxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTo1OS40MTA0MjQ1MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MTYzNjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgdGhlIFZGSU8gUENJIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZSBmb3IgdGhpcyBWRklPIFBDSSBkcml2ZXIgc3R1ZmYuIFRoZSBzbWFydCBtb3ZlIGhlcmUgaXMgdG8gY29uc3VsdCB0aGUgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J2xsIGxheSBvdXQgcHJlY2lzZWx5IHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBkcml2ZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZGSU8gc3Vic3lzdGVtIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcHJlcmVxdWlzaXRlcy4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgUm9zZXR0YSBTdG9uZSBmb3IgZmlndXJpbmcgb3V0IHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDowMi42NzIwNjM4NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFZGSU9fUENJX0NPUkVcXG4gICA2OlxcdFxcdHRyaXN0YXRlXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19WSVJRRkRcXG4gICA4OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFZGSU9fUENJX0lOVFhcXG4gIDExOlxcdFxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVkZJT19QQ0lcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuICAxNjpcXHRcXHRzZWxlY3QgVkZJT19QQ0lfQ09SRVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgZ2VuZXJpYyBQQ0kgVkZJTyBidXMgZHJpdmVyIHdoaWNoIGNhbiBjb25uZWN0IGFueVxcbiAgMTk6XFx0XFx0ICBQQ0kgZGV2aWNlIHRvIHRoZSBWRklPIGZyYW1ld29yay5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRpZiBWRklPX1BDSVxcbiAgMjQ6XFx0Y29uZmlnIFZGSU9fUENJX1ZHQVxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1xcXCJcXG4gIDI2OlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2IFZHQV9BUkJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXFxuICAyOTpcXHRcXHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcXG4gIDMwOlxcdFxcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDowMi42NzIxNjA4MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYyODcyOTUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWRklPIFBDSSBEZXZpY2UgQ2xvc3VyZSBhbmQgU1ItSU9WIENvbmZpZ3VyYXRpb24gLSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIHdoaWNoIGlzIHdpdGhpbiB0aGUgYFZGSU9fUENJX0NPUkVgIG1vZHVsZS4gVGhlIGFkZGVkIGNvZGUgYmxvY2suLi4gbGV0IG1lIHNlZS4uLlxuXG5gYGBjXG5cdGlmIChwY2lfbnVtX3ZmKHZkZXYtXHUwMDNlcGRldikpIHtcblx0XHRkZXZpY2VfbG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcblx0XHR2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKTtcblx0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuXHR9XG5gYGBcblxuLi4uaXMgb25seSByZWFjaGFibGUgaWYgYSBWRklPIFBDSSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkIGFuZCAqaXQqIGhhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gYHBjaV9udW1fdmZgLi4uIHJpZ2h0LCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBWRnMuIFRoaXMgaW1wbGllcyBhbiBTUi1JT1YgY2FwYWJsZSBQQ0kgZGV2aWNlLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICp0cmlnZ2VyKiB0aGlzP1xuXG5RRU1VIGNhbiBlbXVsYXRlIFNSLUlPViBmb3IgY2VydGFpbiBkZXZpY2VzLCBsaWtlIGBpZ2JgIG9yIGBudm1lYCwgc28gdGhhdCBzaG91bGRuJ3QgYmUgYSBibG9ja2VyLiBTbywgaWYgc3l6a2FsbGVyIGNhbiBiaW5kIGFuIFNSLUlPVi1jYXBhYmxlIGRldmljZSB0byBgdmZpby1wY2lgLCBlbmFibGUgdGhlIFZGcywgYW5kIHRoZW4gY2xvc2UgdGhlIGRldmljZSwgd2UgY291bGQgYmUgbG9va2luZyBhdCBhIHZpYWJsZSBmdXp6IHRhcmdldC4gSSBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnVuY3Rpb24gYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyBjYWxsZWQgd2hlbiBWRnMgYXJlIGVuYWJsZWQgdGhyb3VnaCB0aGUgc3lzZnMuIElmIHRoaXMgY29uZmlndXJhdGlvbiBoYXBwZW5zLCB0aGVuIGNsb3NlcyB0aGUgZGV2aWNlLCB0aGlzIGNvZGUgd2lsbCBiZSBleGVjdXRlZC5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRklPIFBDSSBsb2dpYy4gSXQncyBmaXhpbmcgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIFZGcyBtaWdodCBiZSBsZWZ0IGVuYWJsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCwgc28gd2UgY291bGQgYmUgbG9va2luZyBhdCBhIGNyaXRpY2FsIHBhdGguXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBhbmQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYC4gVGhlIG5lY2Vzc2FyeSBjb25maWdzIHNlZW0gdG8gYmUgYFZGSU9fUENJYCBhbmQgYFBDSWAuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiBgUENJYCBpcyBlbm91Z2gsIG9yIGlmIHdlIG5lZWQgYFBDSV9JT1ZgIHRvIGVuYWJsZSB0aGUgYHBjaV9udW1fdmZgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTAuMzAwODkyNDgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYyNTI4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfSU9WXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE1ND1jb25maWcgUENJX0JSSURHRV9FTVVMXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE1Nzpjb25maWcgUENJX0lPVlxcbmRyaXZlcnMvcGNpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIlBDSSBJT1Ygc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTEuNzYzNDI3OTE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjg3OTA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUENJIElPViBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBQQ0lfSU9WYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIFBDSSBkcml2ZXJzIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5hdmlnYXRlIHRvIGBkcml2ZXJzL3BjaS9LY29uZmlnYC4gVGhpcyBmaWxlIHNob3VsZCBjb250YWluIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIGhvdyBgUENJX0lPVmAgaXMgZXhwb3NlZCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudCwgYW55IGFzc29jaWF0ZWQgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBtYXliZSBldmVuIGEgYnJpZWYgZGVzY3JpcHRpb24gZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gS25vd2luZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCdzIHZpcnR1YWwgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTUuNzkyMjIyMDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcGNpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0Y29uZmlnIFBDSV9MT0NLTEVTU19DT05GSUdcXG4gMTUyOlxcdFxcdGJvb2xcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0Y29uZmlnIFBDSV9CUklER0VfRU1VTFxcbiAxNTU6XFx0XFx0Ym9vbFxcbiAxNTY6XFx0XFxuIDE1NzpcXHRjb25maWcgUENJX0lPVlxcbiAxNTg6XFx0XFx0Ym9vbCBcXFwiUENJIElPViBzdXBwb3J0XFxcIlxcbiAxNTk6XFx0XFx0c2VsZWN0IFBDSV9BVFNcXG4gMTYwOlxcdFxcdGhlbHBcXG4gMTYxOlxcdFxcdCAgSS9PIFZpcnR1YWxpemF0aW9uIGlzIGEgUENJIGZlYXR1cmUgc3VwcG9ydGVkIGJ5IHNvbWUgZGV2aWNlc1xcbiAxNjI6XFx0XFx0ICB3aGljaCBhbGxvd3MgdGhlbSB0byBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIHdoaWNoIHNoYXJlIHRoZWlyXFxuIDE2MzpcXHRcXHQgIHBoeXNpY2FsIHJlc291cmNlcy5cXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNjY6XFx0XFxuIDE2NzpcXHRjb25maWcgUENJX05QRU1cXG4gMTY4OlxcdFxcdGJvb2wgXFxcIk5hdGl2ZSBQQ0llIEVuY2xvc3VyZSBNYW5hZ2VtZW50XFxcIlxcbiAxNjk6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTUuNzkyMjg4MDU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDQ0MDc0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqU1ItSU9WIGFuZCBJdHMgUmVxdWlyZW1lbnRzKipcblxuQWxyaWdodCwgdGhlIGNvcmUgaXNzdWUgaXMgU1ItSU9WIHN1cHBvcnQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgdXAgYW5kIHJ1bm5pbmcsIGBQQ0lfSU9WYCBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwuIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBoYXBwZW5zIGlmIGBwY2lfbnVtX3ZmYCBpcyBkZWZpbmVkIHdpdGhvdXQgYFBDSV9JT1ZgLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjE5LjE5NjY5ODU1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMjM0NTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfbnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY0MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmM9NzI0PXN0YXRpYyBpbnQgcHNlcmllc19jYWxsX2FsbG93X3VuZnJlZXplKHN0cnVjdCBlZWhfZGV2ICplZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmMtNzMyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jOjczMzpcXHRpZiAocGNpX251bV92ZihlZGV2LVxcdTAwM2VwaHlzZm4gPyBlZGV2LVxcdTAwM2VwaHlzZm4gOiBlZGV2LVxcdTAwM2VwZGV2KSkge1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jLTczNC1cXHRcXHRpZiAoZWRldi1cXHUwMDNlcGRldi1cXHUwMDNlaXNfcGh5c2ZuKSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmM6NzM1OlxcdFxcdFxcdGN1cl92ZnMgPSBwY2lfbnVtX3ZmKGVkZXYtXFx1MDAzZXBkZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jLTczNi1cXHRcXHRcXHRwZG4gPSBlZWhfZGV2X3RvX3BkbihlZGV2KTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWU0X3NyaW92LmM9NDI9aW50IGFpZTRfc3Jpb3Zfc3RvcChzdHJ1Y3QgYW1keGRuYV9kZXZfaGRsICpuZGV2KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTRfc3Jpb3YuYy00Ny1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jOjQ4OlxcdGlmICghcGNpX251bV92ZihwZGV2KSlcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jLTQ5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2F2aXVtL25pdHJveC9uaXRyb3hfc3Jpb3YuYz0xNTM9c3RhdGljIGludCBuaXRyb3hfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2Nhdml1bS9uaXRyb3gvbml0cm94X3NyaW92LmMtMTYyLVxcbmRyaXZlcnMvY3J5cHRvL2Nhdml1bS9uaXRyb3gvbml0cm94X3NyaW92LmM6MTYzOlxcdGlmIChwY2lfbnVtX3ZmKHBkZXYpID09IG51bV92ZnMpXFxuZHJpdmVycy9jcnlwdG8vY2F2aXVtL25pdHJveC9uaXRyb3hfc3Jpb3YuYy0xNjQtXFx0XFx0cmV0dXJuIG51bV92ZnM7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vcW0uYz00Mjg2PWludCBoaXNpX3FtX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1heF92ZnMpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vcW0uYy00Mjk1LVxcdHRvdGFsX3ZmcyA9IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMocGRldik7XFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmM6NDI5NjpcXHRwcmVfZXhpc3RpbmdfdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vcW0uYy00Mjk3LVxcdGlmIChwcmVfZXhpc3RpbmdfdmZzKSB7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz0xMz12b2lkIGFkZl9wZjJ2Zl9ub3RpZnlfcmVzdGFydGluZyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtMTYtXFx0c3RydWN0IHBmdmZfbWVzc2FnZSBtc2cgPSB7IC50eXBlID0gQURGX1BGMlZGX01TR1RZUEVfUkVTVEFSVElORyB9O1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjE3OlxcdGludCBpLCBudW1fdmZzID0gcGNpX251bV92ZihhY2NlbF90b19wY2lfZGV2KGFjY2VsX2RldikpO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTE4LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM9MzU9dm9pZCBhZGZfcGYydmZfd2FpdF9mb3JfcmVzdGFydGluZ19jb21wbGV0ZShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTM2LXtcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYzozNzpcXHRpbnQgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYWNjZWxfdG9fcGNpX2RldihhY2NlbF9kZXYpKTtcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0zOC1cXHRpbnQgaSwgcmV0cmllcyA9IEFERl9WRl9TSFVURE9XTl9SRVRSWTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jPTU3PXZvaWQgYWRmX3BmMnZmX25vdGlmeV9yZXN0YXJ0ZWQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTU5LVxcdHN0cnVjdCBwZnZmX21lc3NhZ2UgbXNnID0geyAudHlwZSA9IEFERl9QRjJWRl9NU0dUWVBFX1JFU1RBUlRFRCB9O1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjYwOlxcdGludCBpLCBudW1fdmZzID0gcGNpX251bV92ZihhY2NlbF90b19wY2lfZGV2KGFjY2VsX2RldikpO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTYxLVxcdHN0cnVjdCBhZGZfYWNjZWxfdmZfaW5mbyAqdmY7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz03Mj12b2lkIGFkZl9wZjJ2Zl9ub3RpZnlfZmF0YWxfZXJyb3Ioc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTc0LVxcdHN0cnVjdCBwZnZmX21lc3NhZ2UgbXNnID0geyAudHlwZSA9IEFERl9QRjJWRl9NU0dUWVBFX0ZBVEFMX0VSUk9SIH07XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM6NzU6XFx0aW50IGksIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGFjY2VsX3RvX3BjaV9kZXYoYWNjZWxfZGV2KSk7XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtNzYtXFx0c3RydWN0IGFkZl9hY2NlbF92Zl9pbmZvICp2ZjtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zcmlvdi5jPTY2PXN0YXRpYyBpbnQgYWRmX2VuYWJsZV9zcmlvdihzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmMtOTQtXFx0LyogRG8gbm90IGVuYWJsZSBTUi1JT1YgaWYgYWxyZWFkeSBlbmFibGVkICovXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmM6OTU6XFx0aWYgKHBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmMtOTYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYz02NDg9c3RhdGljIGludCBjcHRwZl9zcmlvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl9tYWluLmMtNjUwLVxcdHN0cnVjdCBvdHgyX2NwdHBmX2RldiAqY3B0cGYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl9tYWluLmM6NjUxOlxcdGludCBudW1fdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYy02NTItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTM2Mz1zdGF0aWMgaW50IHhlX3BjaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEzNzUtXFx0eGVfYXNzZXJ0KHhlLCAhSVNfU1JJT1ZfVkYoeGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTM3NjpcXHR4ZV9hc3NlcnQoeGUsICFwY2lfbnVtX3ZmKHBkZXYpKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM3Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0xNzY9c3RhdGljIGludCBwZl9kaXNhYmxlX3ZmcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0xNzktXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jOjE4MDpcXHR1MTYgbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTE4MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0yMjE9aW50IHhlX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTIzMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM6MjM0OlxcdGlmIChudW1fdmZzIFxcdTAwMjZcXHUwMDI2IHBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTIzNS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmLmM9Mjc0PXZvaWQgeGVfc3Jpb3ZfcGZfcHJpbnRfdmZzX3N1bW1hcnkoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCBkcm1fcHJpbnRlciAqcClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jLTI4MS1cXHRkcm1fcHJpbnRmKHAsIFxcXCJzdXBwb3J0ZWQ6ICV1XFxcXG5cXFwiLCB4ZS1cXHUwMDNlc3Jpb3YucGYuZHJpdmVyX21heF92ZnMpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jOjI4MjpcXHRkcm1fcHJpbnRmKHAsIFxcXCJlbmFibGVkOiAldVxcXFxuXFxcIiwgcGNpX251bV92ZihwZGV2KSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmLmMtMjgzLX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZl9oZWxwZXJzLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGVfc3Jpb3ZfcGZfbnVtX3Zmcyhjb25zdCBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oLTQ4LXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oOjQ5OlxcdHJldHVybiBwY2lfbnVtX3ZmKHRvX3BjaV9kZXYoeGUtXFx1MDAzZWRybS5kZXYpKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oLTUwLX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfYm9uZC5jPTQ4ND1zdGF0aWMgYm9vbCBpc19kZXZfYm9uZF9zdXBwb3J0ZWQoc3RydWN0IGhuc19yb2NlX2JvbmRfZ3JvdXAgKmJvbmRfZ3JwLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9ib25kLmMtNTAyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfYm9uZC5jOjUwMzpcXHRpZiAoaHJfZGV2LVxcdTAwM2Vpc192ZiB8fCBwY2lfbnVtX3ZmKGhyX2Rldi1cXHUwMDNlcGNpX2RldikgXFx1MDAzZSAwKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9ib25kLmMtNTA0LVxcdFxcdHJldCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmM9MjY1PXN0YXRpYyBpcnFyZXR1cm5fdCBkcGlfbWJveF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTI3Mi1cXHRpZiAocmVnKSB7XFxuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmM6MjczOlxcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIHBjaV9udW1fdmYoZHBpLVxcdTAwM2VwZGV2KTsgdmYrKykge1xcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTI3NC1cXHRcXHRcXHRpZiAocmVnIFxcdTAwMjYgQklUX1VMTCh2ZikpXFxuLS1cXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYz0zMTU9c3RhdGljIHZvaWQgZHBpX3BmdmZfbWJveF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTMzMS1cXHR2ZmlkID0gRFBJX01CT1hfVkZJRChtc2cud29yZF9sKTtcXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYzozMzI6XFx0aWYgKHZmaWQgXFx1MDAzZT0gcGNpX251bV92ZihkcGktXFx1MDAzZXBkZXYpKVxcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTMzMy1cXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00ODgxPWludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDg4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0ODg1OlxcdGlmIChwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ4ODYtXFx0XFx0RFAoQk5YMlhfTVNHX0lPViwgXFxcIlZGcyBhcmUgZW5hYmxlZCwgY2FuIG5vdCBjaGFuZ2UgTVRVXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jPTQ5MTA9bmV0ZGV2X2ZlYXR1cmVzX3QgYm54MnhfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYy00OTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jOjQ5MTU6XFx0aWYgKHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDkxNi1cXHRcXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gZGV2LVxcdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmM9NDk0ND1pbnQgYm54Mnhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDk1MS1cXHQvKiBWRnMgb3Igbm9uIFNSSU9WIFBGcyBzaG91bGQgYmUgYWJsZSB0byBjaGFuZ2UgbG9vcGJhY2sgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jOjQ5NTI6XFx0aWYgKCFwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ5NTMtXFx0XFx0aWYgKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9MT09QQkFDSykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTE5NDI9c3RhdGljIGludCBibngyeF9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMTk1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmM6MTk1MzpcXHRpZiAocGNpX251bV92ZihicC1cXHUwMDNlcGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMTk1NC1cXHRcXHREUChCTlgyWF9NU0dfSU9WLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTMwMDc9c3RhdGljIHZvaWQgYm54Mnhfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMzAxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmM6MzAxNDpcXHRpZiAocGNpX251bV92ZihicC1cXHUwMDNlcGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMzAxNS1cXHRcXHREUChCTlgyWF9NU0dfSU9WLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTM1Njk9c3RhdGljIGludCBibngyeF9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzozNTc5OlxcdGlmIChwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNTgwLVxcdFxcdERQKEJOWDJYX01TR19JT1YsIFxcXCJWRnMgYXJlIGVuYWJsZWQsIGNhbiBub3Qgc2V0IGNoYW5uZWxzXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTEyNjE1PXN0YXRpYyBpbnQgYm54dF9od3JtX3NodXRkb3duX2xpbmsoc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTI2MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTI2MjM6XFx0aWYgKHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTI2MjQtXFx0ICAgICEoYnAtXFx1MDAzZXBoeV9mbGFncyBcXHUwMDI2IEJOWFRfUEhZX0ZMX0ZXX01BTkFHRURfTEtETikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYz05NzQ9dm9pZCBfX2JueHRfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMtOTc1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYzo5NzY6XFx0dTE2IG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYy05NzctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYz0xMDAwPXN0YXRpYyB2b2lkIGJueHRfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMtMTAwMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmM6MTAwMjpcXHRpZiAoIXBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jLTEwMDMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTI2Mj12b2lkIGJueHRfdmZfcmVwc19jbG9zZShzdHJ1Y3QgYm54dCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzoyNzA6XFx0bnVtX3ZmcyA9IHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0yNzEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV92ZnM7IGkrKykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTI4Mj12b2lkIGJueHRfdmZfcmVwc19vcGVuKHN0cnVjdCBibnh0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0yODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjI4OTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0yOTAtXFx0XFx0LyogT3BlbiB0aGUgVkYtUmVwIG9ubHkgaWYgaXQgaXMgYWxsb2NhdGVkIGluIHRoZSBGVyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTMxMT1zdGF0aWMgdm9pZCBfX2JueHRfdmZfcmVwc19kZXN0cm95KHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMzEyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM6MzEzOlxcdHUxNiBudW1fdmZzID0gcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTMxNC1cXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz0zNzk9dm9pZCBibnh0X3ZmX3JlcHNfZnJlZShzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTM4MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjM4MTpcXHR1MTYgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0zODItXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM9NDE2PWludCBibnh0X3ZmX3JlcHNfYWxsb2Moc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy00MTcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0MTg6XFx0dTE2ICpjZmFfY29kZV9tYXAgPSBicC1cXHUwMDNlY2ZhX2NvZGVfbWFwLCBudW1fdmZzID0gcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTQxOS1cXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz00ODk9aW50IGJueHRfdmZfcmVwc19jcmVhdGUoc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy00OTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0OTE6XFx0dTE2ICpjZmFfY29kZV9tYXAgPSBOVUxMLCBudW1fdmZzID0gcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTQ5Mi1cXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz01NjE9aW50IGJueHRfZGxfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTE2IG1vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNTg1LVxcdFxcdC8qIENyZWF0ZSByZXByZXNlbnRvcnMgZm9yIGV4aXN0aW5nIFZGcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo1ODY6XFx0XFx0aWYgKHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpIFxcdTAwM2UgMClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNTg3LVxcdFxcdFxcdHJldCA9IGJueHRfdmZfcmVwc19jcmVhdGUoYnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmM9NjIzNT1zdGF0aWMgaW50IGN4Z2I0X2lvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNjIzOC1cXHRpbnQgZXJyID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYzo2MjM5OlxcdGludCBjdXJyZW50X3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNjI0MC1cXHR1MzIgcGNpZV9mdztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDIyMT1zdGF0aWMgaW50IGJlX3ZmX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00MjI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDIyODpcXHRvbGRfdmZzID0gcGNpX251bV92ZihhZGFwdGVyLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQyMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTQ0NDE9c3RhdGljIGludCBiZV9nZXRfc3Jpb3ZfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00NDYwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDQ2MTpcXHRvbGRfdmZzID0gcGNpX251bV92ZihhZGFwdGVyLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0NjItXFx0aWYgKG9sZF92ZnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDQ4MD1zdGF0aWMgdm9pZCBiZV9hbGxvY19zcmlvdl9yZXMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00NDgxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjQ0ODI6XFx0aW50IG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNDQ4My1cXHRzdHJ1Y3QgIGJlX3Jlc291cmNlcyB2ZnRfcmVzID0gezB9O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz00Nzc5PXN0YXRpYyBib29sIGJlX3Jlc2V0X3JlcXVpcmVkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00NzgzLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjQ3ODQ6XFx0XFx0cmV0dXJuIHBjaV9udW1fdmYoYWRhcHRlci1cXHUwMDNlcGRldikgPT0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ3ODUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz02MDIyPXN0YXRpYyBpbnQgYmVfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTYwNDYtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo2MDQ3OlxcdGlmIChza3loYXdrX2NoaXAoYWRhcHRlcikgXFx1MDAyNlxcdTAwMjYgIXBjaV9udW1fdmYocGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTYwNDgtXFx0XFx0YmVfY2FsY3VsYXRlX3ZmX3JlcyhhZGFwdGVyLCBhZGFwdGVyLVxcdTAwM2VudW1fdmZzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzIxMj1zdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMjI3LVxcdH0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjI4OlxcdFxcdGludCBudW1fdmZzX3ByZSA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzIyOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM9MjA5MD1zdGF0aWMgaW50IGhjbGdlX2RiZ19kdW1wX2ZkX2NvdW50ZXIoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yMDkyLVxcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBoY2xnZV9zZXFfZmlsZV90b19oZGV2KHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjA5MzpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTIwOTQtXFx0c3RydWN0IGhjbGdlX2ZkX2FkX2NudF9yZWFkX2NtZCAqcmVxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYz0yNjE3PXN0YXRpYyBpbnQgaGNsZ2VfZGJnX2R1bXBfdW12X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yNjE5LVxcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBoY2xnZV9zZXFfZmlsZV90b19oZGV2KHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjYyMDpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmMtMjYyMS1cXHRzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYz0yNzgwPXN0YXRpYyBpbnQgaGNsZ2VfZGJnX2R1bXBfdmxhbl9maWx0ZXJfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6Mjc4MzpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODQtXFx0dTggaSwgdmxhbl9mZSwgYnlwYXNzLCBpbmdyZXNzLCBlZ3Jlc3M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI4MjU9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF92bGFuX29mZmxvYWRfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI4Mjcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjgyODpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI4MjktXFx0c3RydWN0IGhjbGdlX2RiZ192bGFuX2NmZyB2bGFuX2NmZztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9Mjk5ND1zdGF0aWMgdm9pZCBoY2xnZV9wdXNoX2xpbmtfc3RhdHVzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTI5OTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMDAwOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwY2lfbnVtX3ZmKGhkZXYtXFx1MDAzZXBkZXYpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMwMDEtXFx0XFx0dnBvcnQgPSBcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbaSArIEhDTEdFX1ZGX1ZQT1JUX1NUQVJUX05VTV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTM0NTI9c3RydWN0IGhjbGdlX3Zwb3J0ICpoY2xnZV9nZXRfdmZfdnBvcnQoc3RydWN0IGhjbGdlX2RldiAqaGRldiwgaW50IHZmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ1My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozNDU0OlxcdGlmICghcGNpX251bV92ZihoZGV2LVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ1NS1cXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTM0NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozNDYwOlxcdGlmICh2ZiBcXHUwMDNjIDAgfHwgdmYgXFx1MDAzZT0gcGNpX251bV92ZihoZGV2LVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2MS1cXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zNDYyLVxcdFxcdFxcdFxcXCJ2ZiBpZCglZCkgaXMgb3V0IG9mIHJhbmdlKDAgXFx1MDAzYz0gdmZpZCBcXHUwMDNjICVkKVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjM0NjM6XFx0XFx0XFx0dmYsIHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9OTkyMz1zdGF0aWMgaW50IGhjbGdlX3Jlc3VtZV92Zl9yYXRlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk5MzAtXFx0LyogcmVzdW1lIHRoZSB2ZiBtYXhfdHhfcmF0ZSBhZnRlciByZXNldCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTkzMTpcXHRmb3IgKHZmID0gMDsgdmYgXFx1MDAzYyBwY2lfbnVtX3ZmKGhkZXYtXFx1MDAzZXBkZXYpOyB2ZisrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05OTMyLVxcdFxcdHZwb3J0ID0gaGNsZ2VfZ2V0X3ZmX3Zwb3J0KGhkZXYsIHZmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV90bS5jPTE3MjM9aW50IGhjbGdlX3RtX2dldF9xc2V0X251bShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LCB1MTYgKnFzZXRfbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3RtLmMtMTczMC1cXHRcXHQvKiBFYWNoIFBGIGhhcyA4IHFzZXRzIGFuZCBlYWNoIFZGIGhhcyAxIHFzZXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYzoxNzMxOlxcdFxcdCpxc2V0X251bSA9IEhDTEdFX1RNX1BGX01BWF9RU0VUX05VTSArIHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3RtLmMtMTczMi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jPTQ4MD12b2lkIGZtMTBrX2lvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jLTQ4MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmM6NDgyOlxcdGlmIChwY2lfbnVtX3ZmKHBkZXYpIFxcdTAwMjZcXHUwMDI2IHBjaV92ZnNfYXNzaWduZWQocGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmMtNDgzLVxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jPTQ5MT1pbnQgZm0xMGtfaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmMtNDkyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYzo0OTM6XFx0aW50IGN1cnJlbnRfdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYy00OTQtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYz0yNDYzPXN0YXRpYyB2b2lkIGZtMTBrX2lvX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDY1LVxcdC8qIHdhcm4gaW5jYXNlIHdlIGhhdmUgYW55IGFjdGl2ZSBWRiBkZXZpY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmM6MjQ2NjpcXHRpZiAocGNpX251bV92ZihwZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDY3LVxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTE1NTI4PXN0YXRpYyBpbnQgaTQwZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTU4NzktXFx0ICAgICF0ZXN0X2JpdChfX0k0MEVfQkFEX0VFUFJPTSwgcGYtXFx1MDAzZXN0YXRlKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTU4ODA6XFx0XFx0aWYgKHBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTg4MS1cXHRcXHRcXHRzZXRfYml0KEk0MEVfRkxBR19WRUJfTU9ERV9FTkEsIHBmLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTU5NjQ6XFx0XFx0aWYgKHBjaV9udW1fdmYocGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTY1LVxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2Ni1cXHRcXHRcXHRcXHQgXFxcIkFjdGl2ZSBWRnMgZm91bmQsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxNTk2NzpcXHRcXHRcXHRlcnIgPSBpNDBlX2FsbG9jX3ZmcyhwZiwgcGNpX251bV92ZihwZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2OC1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM9MTU4PXZvaWQgaTQwZV9yZXN0b3JlX2FsbF92ZnNfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE2NzpcXHRpZiAoIXBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTY4LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jPTE4Mjk9aW50IGk0MGVfYWxsb2NfdmZzKHN0cnVjdCBpNDBlX3BmICpwZiwgdTE2IG51bV9hbGxvY192ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYy0xODM3LVxcdC8qIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSBqdXN0IGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciBleHRhbnQgVkZzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM6MTgzODpcXHRpZiAocGNpX251bV92ZihwZi1cXHUwMDNlcGRldikgIT0gbnVtX2FsbG9jX3Zmcykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4MzktXFx0XFx0cmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZi1cXHUwMDNlcGRldiwgbnVtX2FsbG9jX3Zmcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYz0xODkxPXN0YXRpYyBpbnQgaTQwZV9wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4OTQtXFx0c3RydWN0IGk0MGVfcGYgKnBmID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE4OTU6XFx0aW50IHByZV9leGlzdGluZ192ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4OTYtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYz0zNzU0PXN0YXRpYyBpbnQgaWdiX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMsIGJvb2wgcmVpbml0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMtMzc1Ny1cXHRzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjM3NTg6XFx0aW50IG9sZF92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jLTM3NTktXFx0c3RydWN0IHZmX21hY19maWx0ZXIgKm1hY19saXN0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYz0xNTQ9dm9pZCBpeGdiZV9lbmFibGVfc3Jpb3Yoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBtYXhfdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0xNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzoxNTk6XFx0cHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoYWRhcHRlci1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0xNjAtXFx0aWYgKCFwcmVfZXhpc3RpbmdfdmZzIFxcdTAwMjZcXHUwMDI2ICFtYXhfdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYz0yNzQ9c3RhdGljIGludCBpeGdiZV9wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0yNzctXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jOjI3ODpcXHRpbnQgcHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTI3OS1cXHRpbnQgZXJyID0gMCwgbnVtX3J4X3Bvb2xzLCBpLCBsaW1pdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmM9MzM3PXN0YXRpYyBpbnQgaXhnYmVfcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMzQyLVxcdHUzMiBjdXJyZW50X2ZsYWdzID0gYWRhcHRlci1cXHUwMDNlZmxhZ3M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzozNDM6XFx0aW50IHByZXZfbnVtX3ZmID0gcGNpX251bV92ZihkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMzQ0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0zNTAtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgKGN1cnJlbnRfZmxhZ3MgIT0gYWRhcHRlci1cXHUwMDNlZmxhZ3MgfHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jOjM1MTpcXHRcXHQgICAgIHByZXZfbnVtX3ZmICE9IHBjaV9udW1fdmYoZGV2KSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0zNTItXFx0XFx0aXhnYmVfc3Jpb3ZfcmVpbml0KGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYz0xMTg4PXN0YXRpYyBpbnQgb3R4Ml9hZGRfZmxvd19tc2coc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgb3R4Ml9mbG93ICpmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYy0xMjc0LVxcdFxcdHZmID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmdfdmYocmluZ19jb29raWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmM6MTI3NTpcXHRcXHRpZiAodmYgXFx1MDAzZSBwY2lfbnVtX3ZmKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYy0xMjc2LVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveC5sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9OTM1PWludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9jZ3hfbGlua19ldmVudChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy05NDQtXFx0Lyogbm90aWZ5IFZGcyBhYm91dCBsaW5rIGV2ZW50ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzo5NDU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBjaV9udW1fdmYocGYtXFx1MDAzZXBkZXYpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTk0Ni1cXHRcXHRzdHJ1Y3Qgb3R4Ml92Zl9jb25maWcgKmNvbmZpZyA9IFxcdTAwMjZwZi1cXHUwMDNldmZfY29uZmlnc1tpXTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTAwNT1zdGF0aWMgdm9pZCBvdHgyX3BmYWZfbWJveF91cF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTAzMy1cXHQvKiBGb3J3YXJkIHRvIFZGIGlmZiBWRnMgYXJlIHJlYWxseSBwcmVzZW50ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxMDM0OlxcdGlmIChkZXZpZCBcXHUwMDI2XFx1MDAyNiBwY2lfbnVtX3ZmKHBmLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTAzNS1cXHRcXHRvdHgyX2ZvcndhcmRfdmZfbWJveF9tc2dzKHBmLCBcXHUwMDI2cGYtXFx1MDAzZW1ib3gubWJveF91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTgyNz1zdGF0aWMgYm9vbCBvdHgyX3Byb21pc2NfdXNlX21jZV9saXN0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTgzNS1cXHQvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHRydXN0ZWQgVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYgbmV0ZGV2ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxODM2OlxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIHBjaV9udW1fdmYocGZ2Zi1cXHUwMDNlcGRldik7IHZmKyspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xODM3LVxcdFxcdGlmIChwZnZmLVxcdTAwM2V2Zl9jb25maWdzW3ZmXS50cnVzdGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yNzQyPXN0YXRpYyBpbnQgb3R4Ml9zZXRfdmZfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHUxNiB2bGFuLCB1OCBxb3MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI3NTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyNzUxOlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc1Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9Mjc2Nz1zdGF0aWMgaW50IG90eDJfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI3NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyNzc3OlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc3OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MjkyND1zdGF0aWMgaW50IG90eDJfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI5MzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyOTMxOlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjkzMi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzQ1OT1zdGF0aWMgaW50IG90eDJfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzQ2Mi1cXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM0NjM6XFx0aW50IG51bXZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNDY0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmM9MzM4MD1zdGF0aWMgaW50IG1seDRfbG9hZF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBwY2lfZGV2X2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDQ5LVxcdFxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgPSBNTFg0X0ZMQUdfTUFTVEVSO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jOjM0NTA6XFx0XFx0XFx0ZXhpc3RpbmdfdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDUxLVxcdFxcdFxcdGlmIChleGlzdGluZ192ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jPTE4OT1zdGF0aWMgaW50IG1seDVfZGV2bGlua19yZWxvYWRfZG93bihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgYm9vbCBuZXRuc19jaGFuZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTIyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jOjIyMTpcXHRpZiAobWx4NV9jb3JlX2lzX3BmKGRldikgXFx1MDAyNlxcdTAwMjYgcGNpX251bV92ZihwZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTIyMi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwicmVsb2FkIHdoaWxlIFZGcyBhcmUgcHJlc2VudCBpcyB1bmZhdm9yYWJsZVxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYz0xMTUzPW1seDVfZXN3X2hvc3RfcGZfZnJvbV9uZXRfZnVuY19wYXJhbXMoY29uc3QgdTggKmVudHJ5LCBpbnQgbnVtX2VudHJpZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5jLTExNzAtXFx0XFx0XFx0Lm51bV9vZl92ZnMgPSBNTFg1X0dFVChuZXR3b3JrX2Z1bmN0aW9uX3BhcmFtcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5jOjExNzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudHJ5LCBwY2lfbnVtX3ZmcyksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYy0xMTcyLVxcdFxcdFxcdC50b3RhbF92ZnMgPSBNTFg1X0dFVChuZXR3b3JrX2Z1bmN0aW9uX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaD00MDc9c3RhdGljIGlubGluZSBib29sIG1seDVfc3Jpb3ZfaXNfZW5hYmxlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaDo0MDk6XFx0cmV0dXJuIHBjaV9udW1fdmYoZGV2LVxcdTAwM2VwZGV2KSA/IHRydWUgOiBmYWxzZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmgtNDEwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIwMz12b2lkIG1seDVfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBudW1fdmZfY2hhbmdlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjA2LVxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjA3OlxcdGludCBudW1fdmZzID0gcGNpX251bV92ZihkZXYtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTIwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIzMz1pbnQgbWx4NV9jb3JlX3NyaW92X3NldF9tc2l4X3ZlY19jb3VudChzdHJ1Y3QgcGNpX2RldiAqdmYsIGludCBtc2l4X3ZlY19jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI0Ni1cXHRcXHRtc2l4X3ZlY19jb3VudCA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjQ3OlxcdFxcdFxcdG1seDVfZ2V0X2RlZmF1bHRfbXNpeF92ZWNfY291bnQoZGV2LCBwY2lfbnVtX3ZmKHBmKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM9MjU3PWludCBtbHg1X3NyaW92X2F0dGFjaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI1OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjU5OlxcdGlmICghbWx4NV9jb3JlX2lzX3BmKGRldikgfHwgIXBjaV9udW1fdmYoZGV2LVxcdTAwM2VwZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0yNjAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0yNjItXFx0LyogSWYgc3Jpb3YgVkZzIGV4aXN0IGluIFBDSSBsZXZlbCwgZW5hYmxlIHRoZW0gaW4gZGV2aWNlIGxldmVsICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjYzOlxcdHJldHVybiBtbHg1X2RldmljZV9lbmFibGVfc3Jpb3YoZGV2LCBwY2lfbnVtX3ZmKGRldi1cXHUwMDNlcGRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI2NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYz0yNjY9dm9pZCBtbHg1X3NyaW92X2RldGFjaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjcwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjI3MTpcXHRtbHg1X2RldmljZV9kaXNhYmxlX3NyaW92KGRldiwgcGNpX251bV92ZihkZXYtXFx1MDAzZXBkZXYpLCBmYWxzZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI3Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYz0yOTg9aW50IG1seDVfc3Jpb3ZfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMzA4LVxcdHNyaW92LVxcdTAwM2VtYXhfdmZzID0gbWx4NV9nZXRfbWF4X3ZmcyhkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjMwOTpcXHRzcmlvdi1cXHUwMDNlbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMzEwLVxcdHNyaW92LVxcdTAwM2VtYXhfZWNfdmZzID0gbWx4NV9jb3JlX2VjX3NyaW92X2VuYWJsZWQoZGV2KSA/IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMoZGV2LVxcdTAwM2VwZGV2KSA6IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9tYWluLmM9NzU3PXN0YXRpYyBpbnQgbmZwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX21haW4uYy04NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jOjg0ODpcXHRwZi1cXHUwMDNlbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jLTg0OS1cXHRpZiAocGYtXFx1MDAzZW51bV92ZnMgXFx1MDAzZSBwZi1cXHUwMDNlbGltaXRfdmZzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9MzA4PXN0YXRpYyBpbnQgaW9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtMzYwLVxcdGluaXRfcndzZW0oXFx1MDAyNmlvbmljLVxcdTAwM2V2Zl9vcF9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6MzYxOlxcdG51bV92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYy0zNjItXFx0aWYgKG51bV92ZnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jPTIzNDg9c3RhdGljIGludCBpb25pY19nZXRfdmZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jOjIzNjA6XFx0aWYgKHZmIFxcdTAwM2U9IHBjaV9udW1fdmYoaW9uaWMtXFx1MDAzZXBkZXYpIHx8ICFpb25pYy1cXHUwMDNldmZzKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmMtMjM2MS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmM9MjM3OT1zdGF0aWMgaW50IGlvbmljX2dldF92Zl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jOjIzOTI6XFx0aWYgKHZmIFxcdTAwM2U9IHBjaV9udW1fdmYoaW9uaWMtXFx1MDAzZXBkZXYpIHx8ICFpb25pYy1cXHUwMDNldmZzKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmMtMjM5My1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmM9MjQxNj1zdGF0aWMgaW50IGlvbmljX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1OCAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmMtMjQzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYzoyNDMxOlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKGlvbmljLVxcdTAwM2VwZGV2KSB8fCAhaW9uaWMtXFx1MDAzZXZmcykge1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDoyMC42OTkwNTA0MTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwOTQwNDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBEZWZpbml0aW9uIG9mIGBwY2lfbnVtX3ZmYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgcGNpX251bV92ZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcywgYW5kIHNpbmNlIHRoaXMgc291bmRzIGxpa2UgYSBQQ0ktc3BlY2lmaWMgdmFsdWUsIGBpbmNsdWRlL2xpbnV4L3BjaS5oYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0J3MgZ2V0IHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscyBhYm91dCBgcGNpX251bV92ZmAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIG1hY3JvLCBhIHN0cnVjdHVyZSBtZW1iZXIsIG9yIHNvbWV0aGluZyB0aGF0IGNsYXJpZmllcyBpdHMgbWVhbmluZyBhbmQgdXNhZ2UgaW4gdGhlIGtlcm5lbCdzIFBDSSBzdWJzeXN0ZW0uIExldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzc1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MjQuNTA4NDU3MzQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE3NjUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfbnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGNpLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wY2kuaD0yNTY5PXZvaWQgcGNpX2lvdl9yZW1vdmVfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCk7XFxuaW5jbHVkZS9saW51eC9wY2kuaDoyNTcwOmludCBwY2lfbnVtX3ZmKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbmluY2x1ZGUvbGludXgvcGNpLmgtMjU3MS1pbnQgcGNpX3Zmc19hc3NpZ25lZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLmg9MjYyMD1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9XFxuaW5jbHVkZS9saW51eC9wY2kuaDoyNjIxOnN0YXRpYyBpbmxpbmUgaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvcGNpLmgtMjYyMi1zdGF0aWMgaW5saW5lIGludCBwY2lfdmZzX2Fzc2lnbmVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjI0LjU1MjYzODU5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUzMzk5MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHBjaV9udW1fdmZgIHNpdHVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcgY29kZS4gSXQgbG9va3MgbGlrZSBgcGNpX251bV92ZmAgaXMgcHJlc2VudCByZWdhcmRsZXNzLCBidXQgaXQnbGwgcmV0dXJuIHplcm8gaWYgYFBDSV9JT1ZgIGlzbid0IGVuYWJsZWQuIFRoYXQncyBubyBnb29kIGZvciBtZTsgSSBuZWVkIHRvIGFjdHVhbGx5ICpydW4qIHRoZSBjb2RlLCBub3QganVzdCBjaGVjayBpZiBpdCdzIHRoZXJlLiBTbywgYFBDSV9JT1ZgICpkZWZpbml0ZWx5KiBuZWVkcyB0byBiZSBpbiBteSBgRW5hYmxlQ29uZmlnc2AuXG5cblRoZW4gdGhlcmUncyBgVkZJT19QQ0lgLiBJIGtub3cgdGhhdCBJIG5lZWQgdGhlIFZGSU8gUENJIGRyaXZlciBmb3IgZXhwb3NpbmcgUENJIGRldmljZXMgdG8gVkZJTywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGlzIGluY2x1ZGVkLiBUaGVuIEkgcmVjYWxsZWQgdGhhdCBgVkZJT19QQ0lgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFZGSU9fUENJX0NPUkVgLiBHb29kIHRoaW5nIEkgY2hlY2tlZCEgQnV0LCBkb2VzIGBWRklPX1BDSWAgKmFsb25lKiBnZXQgbWUgd2hhdCBJIG5lZWQ/XG5cbkxvb2tzIGxpa2UgdGhhdOKAmXMgc3VmZmljaWVudC4gYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYCwgc28gdGhhdCBkZXBlbmRlbmN5IGlzIGFscmVhZHkgaGFuZGxlZC4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWdzPyBJIGtub3cgSSdsbCBuZWVkIGBQQ0lgLCBidXQgdGhhdCdzIGEgYmFzZSBjb25maWcgYW5kIGxpa2VseSBhbHJlYWR5IGVuYWJsZWQuIEkgYWxzbyBuZWVkIGBQQ0lfSU9WYCwgd2hpY2ggaXMgYWxyZWFkeSBvbiB0aGUgbGlzdC4gQnV0IEkgKmFsc28qIG5lZWQgYFZGSU9fUENJYCBmb3IgdGhlIHZpcnR1YWwgZnVuY3Rpb24gZHJpdmVyLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgYFZGSU9gLiBTZWVtcyBsaWtlIGBWRklPX1BDSWAgZGVwZW5kcyBvbiBgVkZJT2AuIExldCdzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBgZHJpdmVycy92ZmlvL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgxMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMC43MDYwNDA5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgVkZJT1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcXG4gICA2OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXFxuICAgODpcXHRcXHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxcbiAgIDk6XFx0XFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxcbiAgMTI6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgVkZJT1xcbiAgMTc6XFx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgXFx1MDAyNlxcdTAwMjYgIVNQQVBSX1RDRV9JT01NVVxcbiAgMjA6XFx0XFx0ZGVmYXVsdCAhVkZJT19HUk9VUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMC43MDYxNDYyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA1Mjk5ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzZXR0aW5nIHVwIGBWRklPYCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYFZGSU9gLCBgVkZJT19QQ0lgLCBhbmQgYFBDSV9JT1ZgLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG15IHNldHVwLiBJIHdvbmRlcmVkIGFib3V0IGBWRklPX1BDSV9DT1JFYCwgYnV0IGFmdGVyIGNoZWNraW5nIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLCBpdCdzIG5vdCBkaXJlY3RseSB2aXNpYmxlLiBJdCdzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBWRklPX1BDSWAsIHNvIEknbGwgYmUgZW5hYmxpbmcgdGhhdCBpbnN0ZWFkLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGZ1bmN0aW9uIGNhbGxzLiBJJ20gZm9jdXNpbmcgb24gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBhbmQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBzcGVjaWZpY2FsbHkuIEhtbSwgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyBiZWluZyBjYWxsZWQgd2l0aCBgbnJfdmlydGZuID0gMGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuIFRpbWUgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCB0byBzZWUgaWYgaXQgbWlnaHQgYmUgYSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCBjb3VsZCBwcmVzZW50IGFuIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjM2LjMxMTQ1MDQ5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjgzODM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTIzNTY9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9hZXJfZXJyX2RldGVjdGVkKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzU3LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzNTg6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzU5LVxcdFxcdFxcdFxcdCAgaW50IG5yX3ZpcnRmbilcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTE3MT1leHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB2ZmlvX3BjaV9jb3JlX2Vycl9oYW5kbGVycztcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaDoxNzI6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzMtXFx0XFx0XFx0XFx0ICBpbnQgbnJfdmlydGZuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MzguNTU0Mjk1NjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MTE2NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDpcblxuKipEZWx2aW5nIGludG8gYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBob3cgaXQncyBjYWxsZWQ7IHdoYXQgc2V0cyB0aGUgc3RhZ2UgZm9yIHRoaXMgZnVuY3Rpb24/IEFyZSB3ZSBjb21pbmcgaW4gdGhyb3VnaCBkZXZpY2UgcHJvYmUsIHNvbWUgdXNlci1zcGFjZSByZXF1ZXN0LCBvciBzb21lIG90aGVyIHBhcnQgb2YgdGhlIHZmaW8vUENJIGluaXRpYWxpemF0aW9uIGxpZmVjeWNsZT8gSXQncyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzIGFuZCBjb25kaXRpb25hbCBicmFuY2hlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBhc3BlY3RzIG9mIGNvbmZpZ3VyaW5nIFNSLUlPVi4gRG9lcyBpdCBpbnZvbHZlIHNldHRpbmcgdXAgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKT8gQXJlIHRoZXJlIGNoZWNrcyBmb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgcGVybWlzc2lvbmluZz8gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGVzcGVjaWFsbHkgdGhlIFZGIEJBUnMgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMpLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWRiBkcml2ZXJzLlxuXG5BIGRlZXBlciB1bmRlcnN0YW5kaW5nIHdpbGwgaW52b2x2ZSBob3cgaXQgaGFuZGxlcyBhbnkgZXJyb3JzLiBJIG5lZWQgdG8ga25vdyB0aGUgZXJyb3IgY29kZXMgaXQgcmV0dXJucyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgcmV0cmllcyBvciBmYWxsYmFjayBtZWNoYW5pc21zPyBEb2VzIGl0IGNsZWFuIHVwIHBhcnRpYWxseSBjb25maWd1cmVkIHN0YXRlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBQcm9wZXIgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsIGZvciByZWxpYWJsZSBvcGVyYXRpb24uXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMuIEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gdGhlIGhvc3QgYW5kIHBvdGVudGlhbGx5IHRoZSBndWVzdCwgdGhlIGxvY2tpbmcgYXJvdW5kIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBpcyBjcnVjaWFsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHByZXZlbnQgY29uZmxpY3RzLiBBcmUgdGhleSBmaW5lLWdyYWluZWQgZW5vdWdoLCBvciBjb3VsZCB0aGV5IGxlYWQgdG8gY29udGVudGlvbj9cblxuVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBTUi1JT1YsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgVkYgZHJpdmVycywgYW5kIHdoYXQgaXQgZG9lcyB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHNlY3VyZSBzZXR1cC4gVWx0aW1hdGVseSwgdGhpcyB1bmRlcnN0YW5kaW5nIHNob3VsZCBhbGxvdyBtZSB0byBpZGVudGlmeSBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTQwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6NDMuOTI1NDY3MjU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzU4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzU4OlxcdGludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuMjM1OTpcXHRcXHRcXHRcXHRcXHQgIGludCBucl92aXJ0Zm4pXFxuMjM2MDpcXHR7XFxuMjM2MTpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuMjM2MjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yMzYzOlxcdFxcbjIzNjQ6XFx0XFx0ZGV2aWNlX2xvY2tfYXNzZXJ0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHRpZiAobnJfdmlydGZuKSB7XFxuMjM2NzpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2ZmlvX3BjaV9zcmlvdl9wZnNfbXV0ZXgpO1xcbjIzNjg6XFx0XFx0XFx0LypcXG4yMzY5OlxcdFxcdFxcdCAqIFRoZSB0aHJlYWQgdGhhdCBhZGRzIHRoZSB2ZGV2IHRvIHRoZSBsaXN0IGlzIHRoZSBvbmx5IHRocmVhZFxcbjIzNzA6XFx0XFx0XFx0ICogdGhhdCBnZXRzIHRvIGNhbGwgcGNpX2VuYWJsZV9zcmlvdigpIGFuZCB3ZSB3aWxsIG9ubHkgYWxsb3dcXG4yMzcxOlxcdFxcdFxcdCAqIGl0IHRvIGJlIGNhbGxlZCBvbmNlIHdpdGhvdXQgZ29pbmcgdGhyb3VnaFxcbjIzNzI6XFx0XFx0XFx0ICogcGNpX2Rpc2FibGVfc3Jpb3YoKVxcbjIzNzM6XFx0XFx0XFx0ICovXFxuMjM3NDpcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnZkZXYtXFx1MDAzZXNyaW92X3Bmc19pdGVtKSkge1xcbjIzNzU6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4yMzc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yMzc3OlxcdFxcdFxcdH1cXG4yMzc4OlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnZkZXYtXFx1MDAzZXNyaW92X3Bmc19pdGVtLCBcXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzKTtcXG4yMzc5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcXG4yMzgwOlxcdFxcbjIzODE6XFx0XFx0XFx0LypcXG4yMzgyOlxcdFxcdFxcdCAqIFRoZSBQRiBwb3dlciBzdGF0ZSBzaG91bGQgYWx3YXlzIGJlIGhpZ2hlciB0aGFuIHRoZSBWRiBwb3dlclxcbjIzODM6XFx0XFx0XFx0ICogc3RhdGUuIFRoZSBQRiBjYW4gYmUgaW4gbG93IHBvd2VyIHN0YXRlIGVpdGhlciB3aXRoIHJ1bnRpbWVcXG4yMzg0OlxcdFxcdFxcdCAqIHBvd2VyIG1hbmFnZW1lbnQgKHdoZW4gdGhlcmUgaXMgbm8gdXNlcikgb3IgUENJX1BNX0NUUkxcXG4yMzg1OlxcdFxcdFxcdCAqIHJlZ2lzdGVyIHdyaXRlIGJ5IHRoZSB1c2VyLiBJZiBQRiBpcyBpbiB0aGUgbG93IHBvd2VyIHN0YXRlLFxcbjIzODY6XFx0XFx0XFx0ICogdGhlbiBjaGFuZ2UgdGhlIHBvd2VyIHN0YXRlIHRvIEQwIGZpcnN0IGJlZm9yZSBlbmFibGluZ1xcbjIzODc6XFx0XFx0XFx0ICogU1ItSU9WLiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGFuZFxcbjIzODg6XFx0XFx0XFx0ICogdXNlcnNwYWNlIFBDSV9QTV9DVFJMIHdyaXRlIGNhbiByYWNlIGFnYWluc3QgdGhpcyBjb2RlIHBhdGgsXFxuMjM4OTpcXHRcXHRcXHQgKiBzbyBwcm90ZWN0IHRoZSBzYW1lIHdpdGggJ21lbW9yeV9sb2NrJy5cXG4yMzkwOlxcdFxcdFxcdCAqL1xcbjIzOTE6XFx0XFx0XFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yMzkyOlxcdFxcdFxcdGlmIChyZXQpXFxuMjM5MzpcXHRcXHRcXHRcXHRnb3RvIG91dF9kZWw7XFxuMjM5NDpcXHRcXG4yMzk1OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4yMzk2OlxcdFxcdFxcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xcbjIzOTc6XFx0XFx0XFx0dmRldi1cXHUwMDNlc3Jpb3ZfYWN0aXZlID0gdHJ1ZTtcXG4yMzk4OlxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuMjM5OTpcXHRcXHRcXHRyZXQgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG5yX3ZpcnRmbik7XFxuMjQwMDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjQwMTpcXHRcXHRcXHRcXHRwbV9ydW50aW1lX3B1dChcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yNDAyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2RlbDtcXG4yNDAzOlxcdFxcdFxcdH1cXG4yNDA0OlxcdFxcdFxcdHJldHVybiBucl92aXJ0Zm47XFxuMjQwNTpcXHRcXHR9XFxuMjQwNjpcXHRcXG4yNDA3OlxcdFxcdGlmIChwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjQzLjkyNTY2MTUyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMyNjE0NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMgYW5kIGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uIGFjaGlldmVzIGl0cyBwdXJwb3NlLiBUaGUgYmlnIHBpY3R1cmUgaXMgc2V0LCBzbyBsZXQncyBwYXJzZSB0aHJvdWdoIHRoZSBsaW5lcyBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkwNywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6NDcuNjU4Mjc4NzFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MDcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MDc6XFx0XFx0aWYgKHBjaV9udW1fdmYocGRldikpIHtcXG4yNDA4OlxcdFxcdFxcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xcbjI0MDk6XFx0XFx0XFx0cG1fcnVudGltZV9wdXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMjQxMDpcXHRcXHR9XFxuMjQxMTpcXHRcXG4yNDEyOlxcdG91dF9kZWw6XFxuMjQxMzpcXHRcXHQvKlxcbjI0MTQ6XFx0XFx0ICogQXZvaWQgdGFraW5nIHRoZSBtZW1vcnlfbG9jayBpbnRlbnRpb25hbGx5LiBBIHJhY2Ugd2l0aCBhIHBvd2VyXFxuMjQxNTpcXHRcXHQgKiBzdGF0ZSB0cmFuc2l0aW9uIHdvdWxkIGF0IG1vc3QgcmVzdWx0IGluIGFuIC1FQlVTWSwgbGVhdmluZyB0aGVcXG4yNDE2OlxcdFxcdCAqIGRldmljZSBpbiBQQ0lfRDAuXFxuMjQxNzpcXHRcXHQgKi9cXG4yNDE4OlxcdFxcdHZkZXYtXFx1MDAzZXNyaW92X2FjdGl2ZSA9IGZhbHNlO1xcbjI0MTk6XFx0XFxuMjQyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2ZmlvX3BjaV9zcmlvdl9wZnNfbXV0ZXgpO1xcbjI0MjE6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dmRldi1cXHUwMDNlc3Jpb3ZfcGZzX2l0ZW0pO1xcbjI0MjI6XFx0b3V0X3VubG9jazpcXG4yNDIzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcXG4yNDI0OlxcdFxcdHJldHVybiByZXQ7XFxuMjQyNTpcXHR9XFxuMjQyNjpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSk7XFxuMjQyNzpcXHRcXG4yNDI4OlxcdGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgdmZpb19wY2lfY29yZV9lcnJfaGFuZGxlcnMgPSB7XFxuMjQyOTpcXHRcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB2ZmlvX3BjaV9jb3JlX2Flcl9lcnJfZGV0ZWN0ZWQsXFxuMjQzMDpcXHR9O1xcbjI0MzE6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9lcnJfaGFuZGxlcnMpO1xcbjI0MzI6XFx0XFxuMjQzMzpcXHRzdGF0aWMgYm9vbCB2ZmlvX2Rldl9pbl9ncm91cHMoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LFxcbjI0MzQ6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9ncm91cF9pbmZvICpncm91cHMpXFxuMjQzNTpcXHR7XFxuMjQzNjpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6NDcuNjU4NDYwNzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcxNjEzMTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVkZJTyBQQ0kgRGV2aWNlIENsb3N1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAgd2l0aCBgbnJfdmlydGZuID0gMGAgZWZmZWN0aXZlbHkgZGlzYWJsZXMgU1JJT1YsIHJlbW92aW5nIHRoZSBkZXZpY2UgZnJvbSB0aGUgYHZmaW9fcGNpX3NyaW92X3Bmc2AgbGlzdC4gVGhpcyBzZWVtcyBjb3JyZWN0IGFuZCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBWRnMgYXJlIGFscmVhZHkgZW5hYmxlZC4gVGhlIGtleSBwYXJ0IGlzLCBvZiBjb3Vyc2UsIHRoZSBjb25kaXRpb246IGBpZiAocGNpX251bV92Zih2ZGV2LVx1MDAzZXBkZXYpKWAuIFRoaXMgY2hlY2tzIGlmIGFueSBWRnMgYXJlIHByZXNlbnQuICBJZiBzbywgdGhlIHBhdGNoIGNhbGxzIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKWAgd2l0aGluIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIGVuc3VyaW5nIFZGcyBhcmUgZGlzYWJsZWQgKmJlZm9yZSogdGhlIGRldmljZSBpcyBjbG9zZWQuICBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gZGV2aWNlcyBhcmUgcmVtb3ZlZC5cblxuU28sIHRvIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBTUi1JT1YgVkZzLiBUaGlzIGVuc3VyZXMgVkZzIGFyZSBkaXNhYmxlZCBvbiBkZXZpY2UgY2xvc3VyZSwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB2ZmlvLXBjaS4gSSdkIGFzc2VzcyBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIGFuZCBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgIGFzIHRoZSBzeW1ib2xzIG9mIGZvY3VzLiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJbml0aWFsbHksIEkgc3VzcGVjdGVkIHdlIG1pZ2h0IG5lZWQgbW9yZSB0aGFuIGp1c3QgYFZGSU9gLCBhbmQgdGhhdCBgVkZJT19WSVJRRkRgIHdvdWxkIGJlIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIGBWRklPX1BDSV9DT1JFYCBzZWxlY3RzIGBWRklPX1ZJUlFGRGAgYW5kIGBJUlFfQllQQVNTX01BTkFHRVJgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBgVkZJT19QQ0lgIGlzIHN1ZmZpY2llbnQuIEJ1dCwgd2UgYWxzbyBuZWVkIGBQQ0lfSU9WYCBzaW5jZSBgcGNpX251bV92ZmAgaXMgdGhlIHRyaWdnZXIuIEl0IGlzIGEgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZSB0byBvYnRhaW4gYSBub24temVybyB2YWx1ZS4gVGh1cywgYFZGSU9fUENJYCBhbmQgYFBDSV9JT1ZgIGFyZSByZXF1aXJlZCwgYWxvbmcgd2l0aCBgVkZJT2Agb2YgY291cnNlLiBJIGNhbid0IHNlZSBhbnkgb3RoZXIgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcywgc28gbGV0J3MgbG9jayB0aGlzIGRvd24gYW5kIGdlbmVyYXRlIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU4OSwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDo1Ny4zNzQ1OTUwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTEzMzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZGlzYWJsZSBTUi1JT1YgVkZzIHdoZW4gYSBWRklPIFBDSSBkZXZpY2UgaXMgY2xvc2VkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgYmluZGluZyBhIHZpcnR1YWwgUENJIGRldmljZSB0byB2ZmlvLXBjaSwgZW5hYmxpbmcgVkZzLCBhbmQgY2xvc2luZyB0aGUgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7n5fz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 00:37:39 +0000 UTC FinishedAt: 2026-08-05 00:40:58 +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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "VFIO_PCI", "PCI_IOV" ], "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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "VFIO_PCI", "PCI_IOV" ], "series_id": "1b3d4ef8-781c-41bb-9e1e-e6c432d57791" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_close_device", "vfio_pci_core_sriov_configure" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBkaXNhYmxlIFNSLUlPViBWRnMgd2hlbiBhIFZGSU8gUENJIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBiaW5kaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRvIHZmaW8tcGNpLCBlbmFibGluZyBWRnMsIGFuZCBjbG9zaW5nIHRoZSBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMDM4YjVjMjk1ODQ2NjM5OGEwMTM0ODhjZTQ1MWE1MWIwOGRiMmQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMDozOTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMTEzYzU1ODQ1ZTEwLi5iMzZjNzdlYjNjNDA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtODI2LDYgJiM0Mzs4MjYsMTMgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxuIFx0ZWVoX2Rldl9yZWxlYXNlKHZkZXYtXHUwMDNlcGRldik7XG4gI2VuZGlmXG4mIzQzO1xuJiM0MztcdGlmIChwY2lfbnVtX3ZmKHZkZXYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdGRldmljZV9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7XG4mIzQzO1x0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAodmRldik7XG4gXG4gXHR2ZmlvX3BjaV9jb3JlX2Rpc2FibGUodmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBkaXNhYmxlIFNSLUlPViBWRnMgd2hlbiBhIFZGSU8gUENJIGRldmljZSBpcyBjbG9zZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBiaW5kaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRvIHZmaW8tcGNpLCBlbmFibGluZyBWRnMsIGFuZCBjbG9zaW5nIHRoZSBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMDM4YjVjMjk1ODQ2NjM5OGEwMTM0ODhjZTQ1MWE1MWIwOGRiMmQ3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwMDozOTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggYTExM2M1NTg0NWUxMC4uYjM2Yzc3ZWIzYzQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTgyNiw2ICYjNDM7ODI2LDEzIEBAIHZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKQogCWVlaF9kZXZfcmVsZWFzZSh2ZGV2LSZndDtwZGV2KTsKICNlbmRpZgomIzQzOwomIzQzOwlpZiAocGNpX251bV92Zih2ZGV2LSZndDtwZGV2KSkgewomIzQzOwkJZGV2aWNlX2xvY2soJmFtcDt2ZGV2LSZndDtwZGV2LSZndDtkZXYpOwomIzQzOwkJdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7CiYjNDM7CQlkZXZpY2VfdW5sb2NrKCZhbXA7dmRldi0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJfQomIzQzOwogCXZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCh2ZGV2KTsKIAogCXZmaW9fcGNpX2NvcmVfZGlzYWJsZSh2ZGV2KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRklPLVBDSSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIGEgY2FsbCB0byBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMClgIHdpdGhpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgLCBidXQgb25seSBpZiB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgUENJIGRldmljZSAoYHZkZXYtJmd0O3BkZXZgKSBpcyBncmVhdGVyIHRoYW4gemVyby4gVGhpcyBpcyBjb3JlIFZGSU8tUENJIGRyaXZlciB0ZXJyaXRvcnksIHdoaWNoLCBhcyB3ZSBrbm93LCBwcm92aWRlcyB0aGUgY3J1Y2lhbCBpbnRlcmZhY2UgZm9yIHVzZXJzcGFjZSBhY2Nlc3MgdG8gZGV2aWNlcy4KClRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCwgYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCwgaXMgaW52b2tlZCB3aGVuIGEgVkZJTyBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkLiBUaGUga2V5IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSBwcmFjdGljYWwgc2NlbmFyaW8sIHBhcnRpY3VsYXJseSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIFdlIGtub3cgVkZJTy1QQ0kgdHlwaWNhbGx5IGV4cGVjdHMgYW4gSU9NTVUgYW5kIHBoeXNpY2FsIGRldmljZXMsIGJ1dCB0aGVyZSBhcmUgZGVmaW5pdGVseSBleGNlcHRpb25zIGxpa2UgYHZmaW8tbWRldmAgb3IgYHZmaW8tcGNpYCBjb25maWd1cmF0aW9ucyB0aGF0IGNhbiB3b3JrIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUgb3IgbW9jayBJT01NVXMuIFNvLCB5ZXMsIGl04oCZcyBwbGF1c2libGUuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIOKAkyBpcyB0aGlzICpmdXp6YWJsZSo/IENhbiB3ZSB0cmlnZ2VyIHRoaXMgcGF0aCB3aXRoIGZ1enppbmc/IEkgbmVlZCB0byBjaGVjay4gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZW0gdG8gcmVjYWxsIFN5emthbGxlciBoYXZpbmcgc29tZSBWRklPIGRlc2NyaXB0aW9ucywgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFdlIGtub3cgdGhhdCBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIGlzIGJlaW5nIHRyaWdnZXJlZCBvbiBhIGNsb3NlIGV2ZW50LCBzbyBub3cgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGJ5IGNoZWNraW5nIHRoZSB0ZXN0IGNhc2VzIGluIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE1NDI9c3RhdGljIHZvaWQgaGlzaV9hY2NfdmZpb19wY2lfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTU1Mi1cdG11dGV4X3VubG9jayhcdTAwMjZoaXNpX2FjY192ZGV2LVx1MDAzZW9wZW5fbXV0ZXgpO1xuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYzoxNTUzOlx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTU1NC19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MDYtXHQub3Blbl9kZXZpY2UgPSBoaXNpX2FjY192ZmlvX3BjaV9vcGVuX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTYwNzpcdC5jbG9zZV9kZXZpY2UgPSB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYwOC1cdC5pb2N0bCA9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzM5LVx0Lm9wZW5fZGV2aWNlID0gaXNtX3ZmaW9fcGNpX29wZW5fZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM0MDpcdC5jbG9zZV9kZXZpY2UgPSB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDEtXHQuaW9jdGwgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9MTM0MD1zdGF0aWMgdm9pZCBtbHg1dmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzNDUtXHRtbHg1dmZfY21kX2Nsb3NlX21pZ3JhdGFibGUobXZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYzoxMzQ2Olx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM0Ny19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MjI3PXN0YXRpYyB2b2lkIG52Z3JhY2VfZ3B1X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0yNTMtXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoyNTQ6XHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMjU1LX1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9jb3JlX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk0LVx0Lm9wZW5fZGV2aWNlXHQ9IG52Z3JhY2VfZ3B1X29wZW5fZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA5NTpcdC5jbG9zZV9kZXZpY2VcdD0gdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UsXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk2LVx0LmlvY3RsXHRcdD0gdmZpb19wY2lfY29yZV9pb2N0bCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jPTE3Nz1zdGF0aWMgdm9pZCBwZHNfdmZpb19jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTg3LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc192ZmlvLVx1MDAzZXN0YXRlX211dGV4KTtcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmM6MTg4Olx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UodmRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE4OS19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jPTEwNj1zdGF0aWMgdm9pZCBxYXRfdmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmMtMTEyLVx0cWF0X3ZmX2Rpc2FibGVfZmRzKHFhdF92ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYzoxMTM6XHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jLTExNC19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE0OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1My1cdC5vcGVuX2RldmljZVx0PSB2ZmlvX3BjaV9vcGVuX2RldmljZSxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYzoxNTQ6XHQuY2xvc2VfZGV2aWNlXHQ9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1NS1cdC5pb2N0bFx0XHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9ODEzPUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfZGlzYWJsZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTQtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo4MTU6dm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTgxNi17XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODQ0LX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjg0NTpFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04NDYtXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTQ1PXN0YXRpYyB2b2lkIHZpcnRpb3ZmX3BjaV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTUwLVx0dmlydGlvdmZfY2xvc2VfbWlncmF0aW9uKHZpcnR2ZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo1MTpcdHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKGNvcmVfdmRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtNTItfVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzItXHQub3Blbl9kZXZpY2UgPSB2aXJ0aW92Zl9wY2lfb3Blbl9kZXZpY2UsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTMzOlx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNC1cdC5pb2N0bCA9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM9MTY0PXN0YXRpYyB2b2lkIHhlX3ZmaW9fcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy0xNzEtXHR4ZV92ZmlvX3BjaV9zdGF0ZV9tdXRleF91bmxvY2soeGVfdmRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYzoxNzI6XHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtMTczLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD0xNjI9aW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTY1LVx0XHRcdFx0ICAgICAgc2l6ZV90IHNpemUsIHUzMiBmbGFncywgdm9pZCAqZGF0YSk7XG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaDoxNjY6dm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNjctaW50IHZmaW9fcGNpX2NvcmVfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBQQ0kgYW5kIFN5emthbGxlcjogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAgaXMgYSBrZXkgZnVuY3Rpb24sIGV4cG9ydGVkIGFuZCB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZSBieSB0aGVzZSBWRklPIFBDSSBkcml2ZXJzLCBldmVuIHdpdGhpbiBgdmZpb19wY2kuY2AgaXRzZWxmLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIGB2ZmlvX3BjaWAgdGhyb3VnaCBTeXprYWxsZXI/CgpTeXprYWxsZXIgZG9lcyBoYXZlIGBzeXMvbGludXgvdmZpby50eHRgLCBzbyBhdCBsZWFzdCBpdCAqa25vd3MqIGFib3V0IHRoZSBWRklPIGlvY3Rscy4gQnV0IGhvbGQgb24sIGZvciBWRklPIFBDSSwgSSBuZWVkIGEgUENJIGRldmljZSwgcmlnaHQ/IFN5emthbGxlciB1c2VzIGB2aGNpYCwgYHZrbXNgLCBhbmQgYHZuZXRg4oCmIERvZXMgaXQgaGF2ZSBzb21lIGtpbmQgb2YgdmlydHVhbCBQQ0kgZGV2aWNlIHRoYXQgY2FuIGFjdHVhbGx5IGJlIGJvdW5kIHRvIFZGSU8/IE5vdywgSSBkbyByZW1lbWJlciBzZWVpbmcgdGhlIGB2ZmlvLXBjaWAgZHJpdmVyLiBTbywgY2FuIFN5emthbGxlciBiaW5kIGEgZGV2aWNlIHRvIHRoYXQ/CgpMZXQgbWUgc2Vl4oCmIFllYWgsIGl0IGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgIGFuZCBvdGhlciByZWxhdGVkIHNldHVwIHJvdXRpbmVzLiBCdXQgZm9yIFZGSU8gc3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGl0IGNhbiBvcGVuIGAvZGV2L3ZmaW8vdmZpb2AgYW5kIGAvZGV2L3ZmaW8vWGAuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24hIE5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIGlmIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAgaXMgcmVhY2hhYmxlLCBhbmQgdGhlbiBJJiMzOTtsbCBzZWUgaWYgSSBjYW4gZ2V0IHRoaXMgYWxsIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTIwOT1zdGF0aWMgaW50IHZmaW9fcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG5yX3ZpcnRmbilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMjE1LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjIxNjpcdHJldHVybiB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCBucl92aXJ0Zm4pO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTIxNy19XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NTM9aW50IHZmaW9fcGNpX2V2ZW50ZmRfcmVwbGFjZV9sb2NrZWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTc3LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Nzg6LyogTGlzdCBvZiBQRiYjMzk7cyB0aGF0IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKCkgaGFzIGJlZW4gY2FsbGVkIG9uICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03OS1zdGF0aWMgREVGSU5FX01VVEVYKHZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9ODE1PXZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODMxLVx0XHRkZXZpY2VfbG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjgzMjpcdFx0dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MzMtXHRcdGRldmljZV91bmxvY2soXHUwMDI2dmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjA5OT1zdGF0aWMgaW50IHZmaW9fcGNpX3ZmX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIxMDctXHRcdC8qXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMTA4Olx0XHQgKiBJZiB0aGlzIFZGIHdhcyBjcmVhdGVkIGJ5IG91ciB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSgpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMTA5LVx0XHQgKiB0aGVuIHdlIGNhbiBmaW5kIHRoZSBQRiB2ZmlvX3BjaV9jb3JlX2RldmljZSBub3csIGFuZCBkdWUgdG9cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yMzI2PXZvaWQgdmZpb19wY2lfY29yZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzI3LXtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzMjg6XHR2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzMjktXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjM1Nj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Flcl9lcnJfZGV0ZWN0ZWQpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1Ny1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzNTg6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzNTktXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjQyNS19XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyNDI2OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI0MjctXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTcxPWV4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTcyOmludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzMtXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBQQ0kgU1JJT1YgRGlzYWJsZW1lbnQgb24gQ2xvc2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIFNSSU9WIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBWRklPIFBDSSBjb3JlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGNhbGwgdG8gYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApYCBpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgLiBUaGUgbG9naWMgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IElmIHRoZSBwaHlzaWNhbCBkZXZpY2UgKGBwZGV2YCkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aXJ0dWFsIGRldmljZSAoYHZkZXZgKSBoYXMgYW55IHZpcnR1YWwgZnVuY3Rpb25zIChWRnMpIGVuYWJsZWQgKGNoZWNrZWQgdmlhIGBwY2lfbnVtX3ZmKHZkZXYtJmd0O3BkZXYpYCksIHRoZW4gU1JJT1YgaXMgZXhwbGljaXRseSBkaXNhYmxlZCBkdXJpbmcgdGhlIGRldmljZSBjbG9zZSBwcm9jZWR1cmUuIFRoaXMgY2xlYXJseSByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvci4KCk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBmdXp6aW5nLiBJJiMzOTttIGFsd2F5cyB0aGlua2luZyBhYm91dCB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBJcyB0aGlzIFZGSU8gUENJIGNvZGUgcGF0aCBmdXp6YWJsZSB3aXRoIHN5emthbGxlcj8gV2Uga25vdyB0aGVyZSBhcmUgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYHN5el9rdm1fc2V0dXBfdm1gIGNhbGxzIGluIHN5emthbGxlciwgd2hpY2ggZGVhbCB3aXRoIEtWTS4gQnV0LCB3aGF0IGFib3V0IFZGSU8/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIHN5emthbGxlciBoYXMgYW55IGRlZGljYXRlZCBkZXNjcmlwdGlvbnMgb3Igc3VwcG9ydCBmb3IgVkZJTyBzeXN0ZW0gY2FsbHMuIFRoaXMgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBpZiB0aGVyZSBhcmUsIGFzIHRoZSBwYXRjaCBmb2N1c2VzIG9uIHRoaXMgU1JJT1YgY29uZmlndXJhdGlvbiBhbmQgY2xvc2luZyB0aGUgZGV2aWNlLCBib3RoIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfLip2ZmlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWRklPIFJlYWNoYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZGV0ZXJtaW5lIGlmIHNvbWV0aGluZyBpcyByZWFjaGFibGUgdGhyb3VnaCBWRklPLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBJJiMzOTt2ZSBnb3QgYSBiaXQgb2YgYSByb2FkYmxvY2s6IEkgY2FuJiMzOTt0IHVzZSBgc3l6X2Agd2l0aCBncmVwcGVyIGJlY2F1c2UgdGhvc2UgYXJlIFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMgYW5kIG5vdCBhY3R1YWwga2VybmVsIGNhbGxzLiBCdXQgdGhhdCYjMzk7cyBmaW5lOyBJJiMzOTttIG5vdCBsb29raW5nIGF0IFN5emthbGxlciBkZXNjcmlwdGlvbnMgcmlnaHQgbm93LiBJIGp1c3QgbmVlZCB0byBmaWd1cmUgb3V0IFZGSU8gcmVhY2hhYmlsaXR5LgoKVGhlIHByb21wdCBub3RlcyBgdmZpb2AgdXNlIHdpdGggdmlydHVhbCBkZXZpY2VzLiBJIGtub3cgdGhhdCBgdmZpby1tZGV2YCBvciBgdmZpby1wY2lgIHdpdGggYSB2aXJ0dWFsIFBDSSBkZXZpY2UgYXJlIHBvc3NpYmlsaXRpZXMuIEhvd2V2ZXIsIGB2ZmlvLXBjaWAgdHlwaWNhbGx5IGJpbmRzIHRvIGEgKnBoeXNpY2FsKiBQQ0kgZGV2aWNlLCByaWdodD8gQnV0IHRoZW4sIGluIFFFTVUsIHdlICpkbyogaGF2ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIGxpa2UgYGUxMDAwYCBhbmQgYHZpcnRpby1uZXQtcGNpYC4gSG1tLi4uIGNhbiB5b3UgYmluZCBhICp2aXJ0dWFsKiBQQ0kgZGV2aWNlIHRvIGB2ZmlvLXBjaWA/CgpBaCwgeWVzLCBvZiBjb3Vyc2UhIFlvdSBjYW4gaWYgdGhlIGtlcm5lbCBib290cyB3aXRoIGBpb21tdT1wdGAgb3IgYGludGVsX2lvbW11PW9uYCBhbmQgdGhlIFFFTVUgbWFjaGluZSBoYXMgYSB2SU9NTVUsIG9yIGlmIGB2ZmlvYCBpcyB1c2VkIHdpdGggYG5vaW9tbXVgIG1vZGUuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuCgpXYWl0IGEgc2Vjb25kLi4uIFN5emthbGxlciBhY3R1YWxseSAqZG9lcyogdGVzdCBWRklPISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgZm9yIGV4YW1wbGVzLiBTdGlsbCwgSSBtaWdodCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfVkZJT19QQ0lgIGFzIGEgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQW5hbHl6aW5nIHRoZSBWRklPIFBDSSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIGZvciB0aGlzIFZGSU8gUENJIGRyaXZlciBzdHVmZi4gVGhlIHNtYXJ0IG1vdmUgaGVyZSBpcyB0byBjb25zdWx0IHRoZSBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtsbCBsYXkgb3V0IHByZWNpc2VseSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgZHJpdmVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVkZJTyBzdWJzeXN0ZW0gYW5kIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBwcmVyZXF1aXNpdGVzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBSb3NldHRhIFN0b25lIGZvciBmaWd1cmluZyBvdXQgd2hhdCBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gUENJXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIFZGSU9fUENJX0NPUkVcbiAgIDY6XHRcdHRyaXN0YXRlXG4gICA3Olx0XHRzZWxlY3QgVkZJT19WSVJRRkRcbiAgIDg6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgVkZJT19QQ0lfSU5UWFxuICAxMTpcdFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuICAxMjpcdFx0ZGVwZW5kcyBvbiBWRklPX1BDSV9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFZGSU9fUENJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcJiMzNDtcbiAgMTY6XHRcdHNlbGVjdCBWRklPX1BDSV9DT1JFXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIHRoZSBnZW5lcmljIFBDSSBWRklPIGJ1cyBkcml2ZXIgd2hpY2ggY2FuIGNvbm5lY3QgYW55XG4gIDE5Olx0XHQgIFBDSSBkZXZpY2UgdG8gdGhlIFZGSU8gZnJhbWV3b3JrLlxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMjI6XHRcbiAgMjM6XHRpZiBWRklPX1BDSVxuICAyNDpcdGNvbmZpZyBWRklPX1BDSV9WR0FcbiAgMjU6XHRcdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBYODYgXHUwMDI2XHUwMDI2IFZHQV9BUkJcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXG4gIDI5Olx0XHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcbiAgMzA6XHRcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTA1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU8gUENJIERldmljZSBDbG9zdXJlIGFuZCBTUi1JT1YgQ29uZmlndXJhdGlvbiAtIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIHdoaWNoIGlzIHdpdGhpbiB0aGUgYFZGSU9fUENJX0NPUkVgIG1vZHVsZS4gVGhlIGFkZGVkIGNvZGUgYmxvY2suLi4gbGV0IG1lIHNlZS4uLgoKYGBgYwoJaWYgKHBjaV9udW1fdmYodmRldi0mZ3Q7cGRldikpIHsKCQlkZXZpY2VfbG9jaygmYW1wO3ZkZXYtJmd0O3BkZXYtJmd0O2Rldik7CgkJdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7CgkJZGV2aWNlX3VubG9jaygmYW1wO3ZkZXYtJmd0O3BkZXYtJmd0O2Rldik7Cgl9CmBgYAoKLi4uaXMgb25seSByZWFjaGFibGUgaWYgYSBWRklPIFBDSSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkIGFuZCAqaXQqIGhhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gYHBjaV9udW1fdmZgLi4uIHJpZ2h0LCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBWRnMuIFRoaXMgaW1wbGllcyBhbiBTUi1JT1YgY2FwYWJsZSBQQ0kgZGV2aWNlLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICp0cmlnZ2VyKiB0aGlzPwoKUUVNVSBjYW4gZW11bGF0ZSBTUi1JT1YgZm9yIGNlcnRhaW4gZGV2aWNlcywgbGlrZSBgaWdiYCBvciBgbnZtZWAsIHNvIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIGJsb2NrZXIuIFNvLCBpZiBzeXprYWxsZXIgY2FuIGJpbmQgYW4gU1ItSU9WLWNhcGFibGUgZGV2aWNlIHRvIGB2ZmlvLXBjaWAsIGVuYWJsZSB0aGUgVkZzLCBhbmQgdGhlbiBjbG9zZSB0aGUgZGV2aWNlLCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgdmlhYmxlIGZ1enogdGFyZ2V0LiBJIGFsc28gbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgIGlzIGNhbGxlZCB3aGVuIFZGcyBhcmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBzeXNmcy4gSWYgdGhpcyBjb25maWd1cmF0aW9uIGhhcHBlbnMsIHRoZW4gY2xvc2VzIHRoZSBkZXZpY2UsIHRoaXMgY29kZSB3aWxsIGJlIGV4ZWN1dGVkLgoKSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRklPIFBDSSBsb2dpYy4gSXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSBWRnMgbWlnaHQgYmUgbGVmdCBlbmFibGVkIHdoZW4gdGhlIGRldmljZSBpcyBjbG9zZWQsIHNvIHdlIGNvdWxkIGJlIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBwYXRoLgoKU28sIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIGFuZCBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3Mgc2VlbSB0byBiZSBgVkZJT19QQ0lgIGFuZCBgUENJYC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGBQQ0lgIGlzIGVub3VnaCwgb3IgaWYgd2UgbmVlZCBgUENJX0lPVmAgdG8gZW5hYmxlIHRoZSBgcGNpX251bV92ZmAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lfSU9WJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTU0PWNvbmZpZyBQQ0lfQlJJREdFX0VNVUxcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTU3OmNvbmZpZyBQQ0lfSU9WXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7UENJIElPViBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipQQ0kgSU9WIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBQQ0lfSU9WYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIFBDSSBkcml2ZXJzIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuYXZpZ2F0ZSB0byBgZHJpdmVycy9wY2kvS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSBob3cgYFBDSV9JT1ZgIGlzIGV4cG9zZWQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50LCBhbnkgYXNzb2NpYXRlZCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBkZXNjcmlwdGlvbiBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBLbm93aW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUga2VybmVsJiMzOTtzIHZpcnR1YWwgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0Y29uZmlnIFBDSV9MT0NLTEVTU19DT05GSUdcbiAxNTI6XHRcdGJvb2xcbiAxNTM6XHRcbiAxNTQ6XHRjb25maWcgUENJX0JSSURHRV9FTVVMXG4gMTU1Olx0XHRib29sXG4gMTU2Olx0XG4gMTU3Olx0Y29uZmlnIFBDSV9JT1ZcbiAxNTg6XHRcdGJvb2wgXCYjMzQ7UENJIElPViBzdXBwb3J0XCYjMzQ7XG4gMTU5Olx0XHRzZWxlY3QgUENJX0FUU1xuIDE2MDpcdFx0aGVscFxuIDE2MTpcdFx0ICBJL08gVmlydHVhbGl6YXRpb24gaXMgYSBQQ0kgZmVhdHVyZSBzdXBwb3J0ZWQgYnkgc29tZSBkZXZpY2VzXG4gMTYyOlx0XHQgIHdoaWNoIGFsbG93cyB0aGVtIHRvIGNyZWF0ZSB2aXJ0dWFsIGRldmljZXMgd2hpY2ggc2hhcmUgdGhlaXJcbiAxNjM6XHRcdCAgcGh5c2ljYWwgcmVzb3VyY2VzLlxuIDE2NDpcdFxuIDE2NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE2NjpcdFxuIDE2NzpcdGNvbmZpZyBQQ0lfTlBFTVxuIDE2ODpcdFx0Ym9vbCBcJiMzNDtOYXRpdmUgUENJZSBFbmNsb3N1cmUgTWFuYWdlbWVudFwmIzM0O1xuIDE2OTpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlNSLUlPViBhbmQgSXRzIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCB0aGUgY29yZSBpc3N1ZSBpcyBTUi1JT1Ygc3VwcG9ydC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZywgYFBDSV9JT1ZgIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbC4gTm8gcmVhbCBzdXJwcmlzZXMgdGhlcmUuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBoYXBwZW5zIGlmIGBwY2lfbnVtX3ZmYCBpcyBkZWZpbmVkIHdpdGhvdXQgYFBDSV9JT1ZgLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQwIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX3BzZXJpZXMuYz03MjQ9c3RhdGljIGludCBwc2VyaWVzX2NhbGxfYWxsb3dfdW5mcmVlemUoc3RydWN0IGVlaF9kZXYgKmVkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmMtNzMyLVx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jOjczMzpcdGlmIChwY2lfbnVtX3ZmKGVkZXYtXHUwMDNlcGh5c2ZuID8gZWRldi1cdTAwM2VwaHlzZm4gOiBlZGV2LVx1MDAzZXBkZXYpKSB7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX3BzZXJpZXMuYy03MzQtXHRcdGlmIChlZGV2LVx1MDAzZXBkZXYtXHUwMDNlaXNfcGh5c2ZuKSB7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX3BzZXJpZXMuYzo3MzU6XHRcdFx0Y3VyX3ZmcyA9IHBjaV9udW1fdmYoZWRldi1cdTAwM2VwZGV2KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jLTczNi1cdFx0XHRwZG4gPSBlZWhfZGV2X3RvX3BkbihlZGV2KTtcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jPTQyPWludCBhaWU0X3NyaW92X3N0b3Aoc3RydWN0IGFtZHhkbmFfZGV2X2hkbCAqbmRldilcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jLTQ3LVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTRfc3Jpb3YuYzo0ODpcdGlmICghcGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWU0X3NyaW92LmMtNDktXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2Nhdml1bS9uaXRyb3gvbml0cm94X3NyaW92LmM9MTUzPXN0YXRpYyBpbnQgbml0cm94X3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2F2aXVtL25pdHJveC9uaXRyb3hfc3Jpb3YuYy0xNjItXG5kcml2ZXJzL2NyeXB0by9jYXZpdW0vbml0cm94L25pdHJveF9zcmlvdi5jOjE2MzpcdGlmIChwY2lfbnVtX3ZmKHBkZXYpID09IG51bV92ZnMpXG5kcml2ZXJzL2NyeXB0by9jYXZpdW0vbml0cm94L25pdHJveF9zcmlvdi5jLTE2NC1cdFx0cmV0dXJuIG51bV92ZnM7XG4tLVxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmM9NDI4Nj1pbnQgaGlzaV9xbV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtYXhfdmZzKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2hpc2lsaWNvbi9xbS5jLTQyOTUtXHR0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmM6NDI5NjpcdHByZV9leGlzdGluZ192ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmMtNDI5Ny1cdGlmIChwcmVfZXhpc3RpbmdfdmZzKSB7XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM9MTM9dm9pZCBhZGZfcGYydmZfbm90aWZ5X3Jlc3RhcnRpbmcoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldilcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0xNi1cdHN0cnVjdCBwZnZmX21lc3NhZ2UgbXNnID0geyAudHlwZSA9IEFERl9QRjJWRl9NU0dUWVBFX1JFU1RBUlRJTkcgfTtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjE3Olx0aW50IGksIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGFjY2VsX3RvX3BjaV9kZXYoYWNjZWxfZGV2KSk7XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0xOC1cbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz0zNT12b2lkIGFkZl9wZjJ2Zl93YWl0X2Zvcl9yZXN0YXJ0aW5nX2NvbXBsZXRlKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0zNi17XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYzozNzpcdGludCBudW1fdmZzID0gcGNpX251bV92ZihhY2NlbF90b19wY2lfZGV2KGFjY2VsX2RldikpO1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtMzgtXHRpbnQgaSwgcmV0cmllcyA9IEFERl9WRl9TSFVURE9XTl9SRVRSWTtcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz01Nz12b2lkIGFkZl9wZjJ2Zl9ub3RpZnlfcmVzdGFydGVkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtNTktXHRzdHJ1Y3QgcGZ2Zl9tZXNzYWdlIG1zZyA9IHsgLnR5cGUgPSBBREZfUEYyVkZfTVNHVFlQRV9SRVNUQVJURUQgfTtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjYwOlx0aW50IGksIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGFjY2VsX3RvX3BjaV9kZXYoYWNjZWxfZGV2KSk7XG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy02MS1cdHN0cnVjdCBhZGZfYWNjZWxfdmZfaW5mbyAqdmY7XG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM9NzI9dm9pZCBhZGZfcGYydmZfbm90aWZ5X2ZhdGFsX2Vycm9yKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtNzQtXHRzdHJ1Y3QgcGZ2Zl9tZXNzYWdlIG1zZyA9IHsgLnR5cGUgPSBBREZfUEYyVkZfTVNHVFlQRV9GQVRBTF9FUlJPUiB9O1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM6NzU6XHRpbnQgaSwgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYWNjZWxfdG9fcGNpX2RldihhY2NlbF9kZXYpKTtcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTc2LVx0c3RydWN0IGFkZl9hY2NlbF92Zl9pbmZvICp2Zjtcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3Jpb3YuYz02Nj1zdGF0aWMgaW50IGFkZl9lbmFibGVfc3Jpb3Yoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldilcbi0tXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfc3Jpb3YuYy05NC1cdC8qIERvIG5vdCBlbmFibGUgU1ItSU9WIGlmIGFscmVhZHkgZW5hYmxlZCAqL1xuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmM6OTU6XHRpZiAocGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zcmlvdi5jLTk2LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYz02NDg9c3RhdGljIGludCBjcHRwZl9zcmlvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfbWFpbi5jLTY1MC1cdHN0cnVjdCBvdHgyX2NwdHBmX2RldiAqY3B0cGYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYzo2NTE6XHRpbnQgbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYy02NTItXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTEzNjM9c3RhdGljIGludCB4ZV9wY2lfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM3NS1cdHhlX2Fzc2VydCh4ZSwgIUlTX1NSSU9WX1ZGKHhlKSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTM3NjpcdHhlX2Fzc2VydCh4ZSwgIXBjaV9udW1fdmYocGRldikpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEzNzctXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jPTE3Nj1zdGF0aWMgaW50IHBmX2Rpc2FibGVfdmZzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0xNzktXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYzoxODA6XHR1MTYgbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMTgxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0yMjE9aW50IHhlX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0yMzMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM6MjM0Olx0aWYgKG51bV92ZnMgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMjM1LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jPTI3ND12b2lkIHhlX3NyaW92X3BmX3ByaW50X3Zmc19zdW1tYXJ5KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmLmMtMjgxLVx0ZHJtX3ByaW50ZihwLCBcJiMzNDtzdXBwb3J0ZWQ6ICV1XFxuXCYjMzQ7LCB4ZS1cdTAwM2Vzcmlvdi5wZi5kcml2ZXJfbWF4X3Zmcyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGYuYzoyODI6XHRkcm1fcHJpbnRmKHAsIFwmIzM0O2VuYWJsZWQ6ICV1XFxuXCYjMzQ7LCBwY2lfbnVtX3ZmKHBkZXYpKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jLTI4My19XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmX2hlbHBlcnMuaD00Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZV9zcmlvdl9wZl9udW1fdmZzKGNvbnN0IHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmX2hlbHBlcnMuaC00OC17XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oOjQ5Olx0cmV0dXJuIHBjaV9udW1fdmYodG9fcGNpX2Rldih4ZS1cdTAwM2Vkcm0uZGV2KSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oLTUwLX1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYz00ODQ9c3RhdGljIGJvb2wgaXNfZGV2X2JvbmRfc3VwcG9ydGVkKHN0cnVjdCBobnNfcm9jZV9ib25kX2dyb3VwICpib25kX2dycCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYy01MDItXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYzo1MDM6XHRpZiAoaHJfZGV2LVx1MDAzZWlzX3ZmIHx8IHBjaV9udW1fdmYoaHJfZGV2LVx1MDAzZXBjaV9kZXYpIFx1MDAzZSAwKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2JvbmQuYy01MDQtXHRcdHJldCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jPTI2NT1zdGF0aWMgaXJxcmV0dXJuX3QgZHBpX21ib3hfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmMtMjcyLVx0aWYgKHJlZykge1xuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmM6MjczOlx0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIHBjaV9udW1fdmYoZHBpLVx1MDAzZXBkZXYpOyB2ZiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTI3NC1cdFx0XHRpZiAocmVnIFx1MDAyNiBCSVRfVUxMKHZmKSlcbi0tXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYz0zMTU9c3RhdGljIHZvaWQgZHBpX3BmdmZfbWJveF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYy0zMzEtXHR2ZmlkID0gRFBJX01CT1hfVkZJRChtc2cud29yZF9sKTtcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jOjMzMjpcdGlmICh2ZmlkIFx1MDAzZT0gcGNpX251bV92ZihkcGktXHUwMDNlcGRldikpXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYy0zMzMtXHRcdGdvdG8gZXhpdDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00ODgxPWludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ4ODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0ODg1Olx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ4ODYtXHRcdERQKEJOWDJYX01TR19JT1YsIFwmIzM0O1ZGcyBhcmUgZW5hYmxlZCwgY2FuIG5vdCBjaGFuZ2UgTVRVXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00OTEwPW5ldGRldl9mZWF0dXJlc190IGJueDJ4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ5MTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0OTE1Olx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ5MTYtXHRcdG5ldGRldl9mZWF0dXJlc190IGNoYW5nZWQgPSBkZXYtXHUwMDNlZmVhdHVyZXMgXiBmZWF0dXJlcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00OTQ0PWludCBibngyeF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDk1MS1cdC8qIFZGcyBvciBub24gU1JJT1YgUEZzIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSBsb29wYmFjayBmZWF0dXJlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0OTUyOlx0aWYgKCFwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYy00OTUzLVx0XHRpZiAoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTE9PUEJBQ0spIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmM9MTk0Mj1zdGF0aWMgaW50IGJueDJ4X3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzoxOTUzOlx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0xOTU0LVx0XHREUChCTlgyWF9NU0dfSU9WLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYz0zMDA3PXN0YXRpYyB2b2lkIGJueDJ4X3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zMDEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jOjMwMTQ6XHRpZiAocGNpX251bV92ZihicC1cdTAwM2VwZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jLTMwMTUtXHRcdERQKEJOWDJYX01TR19JT1YsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTM1Njk9c3RhdGljIGludCBibngyeF9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMzU3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzozNTc5Olx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNTgwLVx0XHREUChCTlgyWF9NU0dfSU9WLCBcJiMzNDtWRnMgYXJlIGVuYWJsZWQsIGNhbiBub3Qgc2V0IGNoYW5uZWxzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xMjYxNT1zdGF0aWMgaW50IGJueHRfaHdybV9zaHV0ZG93bl9saW5rKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xMjYyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjEyNjIzOlx0aWYgKHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xMjYyNC1cdCAgICAhKGJwLVx1MDAzZXBoeV9mbGFncyBcdTAwMjYgQk5YVF9QSFlfRkxfRldfTUFOQUdFRF9MS0ROKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYz05NzQ9dm9pZCBfX2JueHRfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYy05NzUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmM6OTc2Olx0dTE2IG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMtOTc3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jPTEwMDA9c3RhdGljIHZvaWQgYm54dF9zcmlvdl9kaXNhYmxlKHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jLTEwMDEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmM6MTAwMjpcdGlmICghcGNpX251bV92ZihicC1cdTAwM2VwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jLTEwMDMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM9MjYyPXZvaWQgYm54dF92Zl9yZXBzX2Nsb3NlKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjI3MDpcdG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTI3MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTI4Mj12b2lkIGJueHRfdmZfcmVwc19vcGVuKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjg4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjI4OTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjkwLVx0XHQvKiBPcGVuIHRoZSBWRi1SZXAgb25seSBpZiBpdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIEZXICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTMxMT1zdGF0aWMgdm9pZCBfX2JueHRfdmZfcmVwc19kZXN0cm95KHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0zMTIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjMxMzpcdHUxNiBudW1fdmZzID0gcGNpX251bV92ZihicC1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0zMTQtXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM9Mzc5PXZvaWQgYm54dF92Zl9yZXBzX2ZyZWUoc3RydWN0IGJueHQgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTM4MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM6MzgxOlx0dTE2IG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTM4Mi1cdGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz00MTY9aW50IGJueHRfdmZfcmVwc19hbGxvYyhzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNDE3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0MTg6XHR1MTYgKmNmYV9jb2RlX21hcCA9IGJwLVx1MDAzZWNmYV9jb2RlX21hcCwgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYnAtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNDE5LVx0c3RydWN0IGJueHRfdmZfcmVwICp2Zl9yZXA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTQ4OT1pbnQgYm54dF92Zl9yZXBzX2NyZWF0ZShzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNDkwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0OTE6XHR1MTYgKmNmYV9jb2RlX21hcCA9IE5VTEwsIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTQ5Mi1cdHN0cnVjdCBibnh0X3ZmX3JlcCAqdmZfcmVwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz01NjE9aW50IGJueHRfZGxfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTE2IG1vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTU4NS1cdFx0LyogQ3JlYXRlIHJlcHJlc2VudG9ycyBmb3IgZXhpc3RpbmcgVkZzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM6NTg2Olx0XHRpZiAocGNpX251bV92ZihicC1cdTAwM2VwZGV2KSBcdTAwM2UgMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy01ODctXHRcdFx0cmV0ID0gYm54dF92Zl9yZXBzX2NyZWF0ZShicCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmM9NjIzNT1zdGF0aWMgaW50IGN4Z2I0X2lvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jLTYyMzgtXHRpbnQgZXJyID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jOjYyMzk6XHRpbnQgY3VycmVudF92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNjI0MC1cdHUzMiBwY2llX2Z3O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDIyMT1zdGF0aWMgaW50IGJlX3ZmX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNDIyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDIyODpcdG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQyMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz00NDQxPXN0YXRpYyBpbnQgYmVfZ2V0X3NyaW92X2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0NjAtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDQ2MTpcdG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0NjItXHRpZiAob2xkX3Zmcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDQ4MD1zdGF0aWMgdm9pZCBiZV9hbGxvY19zcmlvdl9yZXMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0ODEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo0NDgyOlx0aW50IG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0ODMtXHRzdHJ1Y3QgIGJlX3Jlc291cmNlcyB2ZnRfcmVzID0gezB9O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDc3OT1zdGF0aWMgYm9vbCBiZV9yZXNldF9yZXF1aXJlZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ3ODMtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjQ3ODQ6XHRcdHJldHVybiBwY2lfbnVtX3ZmKGFkYXB0ZXItXHUwMDNlcGRldikgPT0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNDc4NS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz02MDIyPXN0YXRpYyBpbnQgYmVfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy02MDQ2LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjYwNDc6XHRpZiAoc2t5aGF3a19jaGlwKGFkYXB0ZXIpIFx1MDAyNlx1MDAyNiAhcGNpX251bV92ZihwZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy02MDQ4LVx0XHRiZV9jYWxjdWxhdGVfdmZfcmVzKGFkYXB0ZXIsIGFkYXB0ZXItXHUwMDNlbnVtX3Zmcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMjEyPXN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3Zmcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMjI3LVx0fSBlbHNlIGlmICghcGNpX3Zmc19hc3NpZ25lZChwZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzIyODpcdFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMyMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYz0yMDkwPXN0YXRpYyBpbnQgaGNsZ2VfZGJnX2R1bXBfZmRfY291bnRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yMDkyLVx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGhjbGdlX3NlcV9maWxlX3RvX2hkZXYocyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jOjIwOTM6XHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KSAmIzQzOyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmMtMjA5NC1cdHN0cnVjdCBoY2xnZV9mZF9hZF9jbnRfcmVhZF9jbWQgKnJlcTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI2MTc9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF91bXZfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yNjE5LVx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IGhjbGdlX3NlcV9maWxlX3RvX2hkZXYocyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jOjI2MjA6XHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KSAmIzQzOyAxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yNjIxLVx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI3ODA9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF92bGFuX2ZpbHRlcl9jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYzoyNzgzOlx0dTggZnVuY19udW0gPSBwY2lfbnVtX3ZmKGhkZXYtXHUwMDNlcGRldikgJiM0MzsgMTsgLyogcGYgYW5kIGVuYWJsZWQgdmYgbnVtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODQtXHR1OCBpLCB2bGFuX2ZlLCBieXBhc3MsIGluZ3Jlc3MsIGVncmVzcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI4MjU9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF92bGFuX29mZmxvYWRfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yODI3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjgyODpcdHU4IGZ1bmNfbnVtID0gcGNpX251bV92ZihoZGV2LVx1MDAzZXBkZXYpICYjNDM7IDE7IC8qIHBmIGFuZCBlbmFibGVkIHZmIG51bSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yODI5LVx0c3RydWN0IGhjbGdlX2RiZ192bGFuX2NmZyB2bGFuX2NmZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTI5OTQ9c3RhdGljIHZvaWQgaGNsZ2VfcHVzaF9saW5rX3N0YXR1cyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjk5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzAwMDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzAwMS1cdFx0dnBvcnQgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0W2kgJiM0MzsgSENMR0VfVkZfVlBPUlRfU1RBUlRfTlVNXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTM0NTI9c3RydWN0IGhjbGdlX3Zwb3J0ICpoY2xnZV9nZXRfdmZfdnBvcnQoc3RydWN0IGhjbGdlX2RldiAqaGRldiwgaW50IHZmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zNDUzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzQ1NDpcdGlmICghcGNpX251bV92ZihoZGV2LVx1MDAzZXBkZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTM0NTUtXHRcdGRldl9lcnIoXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTM0NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjM0NjA6XHRpZiAodmYgXHUwMDNjIDAgfHwgdmYgXHUwMDNlPSBwY2lfbnVtX3ZmKGhkZXYtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2MS1cdFx0ZGV2X2VycihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zNDYyLVx0XHRcdFwmIzM0O3ZmIGlkKCVkKSBpcyBvdXQgb2YgcmFuZ2UoMCBcdTAwM2M9IHZmaWQgXHUwMDNjICVkKVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzQ2MzpcdFx0XHR2ZiwgcGNpX251bV92ZihoZGV2LVx1MDAzZXBkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz05OTIzPXN0YXRpYyBpbnQgaGNsZ2VfcmVzdW1lX3ZmX3JhdGUoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk5MzAtXHQvKiByZXN1bWUgdGhlIHZmIG1heF90eF9yYXRlIGFmdGVyIHJlc2V0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjk5MzE6XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIHBjaV9udW1fdmYoaGRldi1cdTAwM2VwZGV2KTsgdmYmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk5MzItXHRcdHZwb3J0ID0gaGNsZ2VfZ2V0X3ZmX3Zwb3J0KGhkZXYsIHZmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYz0xNzIzPWludCBoY2xnZV90bV9nZXRfcXNldF9udW0oc3RydWN0IGhjbGdlX2RldiAqaGRldiwgdTE2ICpxc2V0X251bSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYy0xNzMwLVx0XHQvKiBFYWNoIFBGIGhhcyA4IHFzZXRzIGFuZCBlYWNoIFZGIGhhcyAxIHFzZXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV90bS5jOjE3MzE6XHRcdCpxc2V0X251bSA9IEhDTEdFX1RNX1BGX01BWF9RU0VUX05VTSAmIzQzOyBwY2lfbnVtX3ZmKGhkZXYtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYy0xNzMyLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYz00ODA9dm9pZCBmbTEwa19pb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jLTQ4MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYzo0ODI6XHRpZiAocGNpX251bV92ZihwZGV2KSBcdTAwMjZcdTAwMjYgcGNpX3Zmc19hc3NpZ25lZChwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jLTQ4My1cdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYz00OTE9aW50IGZtMTBrX2lvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmMtNDkyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jOjQ5MzpcdGludCBjdXJyZW50X3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYy00OTQtXHRpbnQgZXJyID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYz0yNDYzPXN0YXRpYyB2b2lkIGZtMTBrX2lvX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmMtMjQ2NS1cdC8qIHdhcm4gaW5jYXNlIHdlIGhhdmUgYW55IGFjdGl2ZSBWRiBkZXZpY2VzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYzoyNDY2Olx0aWYgKHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDY3LVx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTE1NTI4PXN0YXRpYyBpbnQgaTQwZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1ODc5LVx0ICAgICF0ZXN0X2JpdChfX0k0MEVfQkFEX0VFUFJPTSwgcGYtXHUwMDNlc3RhdGUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjE1ODgwOlx0XHRpZiAocGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTU4ODEtXHRcdFx0c2V0X2JpdChJNDBFX0ZMQUdfVkVCX01PREVfRU5BLCBwZi1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTU5NjQ6XHRcdGlmIChwY2lfbnVtX3ZmKHBkZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTY1LVx0XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2Ni1cdFx0XHRcdCBcJiMzNDtBY3RpdmUgVkZzIGZvdW5kLCBhbGxvY2F0aW5nIHJlc291cmNlcy5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxNTk2NzpcdFx0XHRlcnIgPSBpNDBlX2FsbG9jX3ZmcyhwZiwgcGNpX251bV92ZihwZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTY4LVx0XHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM9MTU4PXZvaWQgaTQwZV9yZXN0b3JlX2FsbF92ZnNfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE2NzpcdGlmICghcGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE2OC1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jPTE4Mjk9aW50IGk0MGVfYWxsb2NfdmZzKHN0cnVjdCBpNDBlX3BmICpwZiwgdTE2IG51bV9hbGxvY192ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTgzNy1cdC8qIENoZWNrIHRvIHNlZSBpZiB3ZSYjMzk7cmUganVzdCBhbGxvY2F0aW5nIHJlc291cmNlcyBmb3IgZXh0YW50IFZGcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM6MTgzODpcdGlmIChwY2lfbnVtX3ZmKHBmLVx1MDAzZXBkZXYpICE9IG51bV9hbGxvY192ZnMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4MzktXHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGYtXHUwMDNlcGRldiwgbnVtX2FsbG9jX3Zmcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM9MTg5MT1zdGF0aWMgaW50IGk0MGVfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTg5NC1cdHN0cnVjdCBpNDBlX3BmICpwZiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE4OTU6XHRpbnQgcHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYy0xODk2LVx0aW50IGVyciA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmM9Mzc1ND1zdGF0aWMgaW50IGlnYl9lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzLCBib29sIHJlaW5pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0zNzU3LVx0c3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjM3NTg6XHRpbnQgb2xkX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0zNzU5LVx0c3RydWN0IHZmX21hY19maWx0ZXIgKm1hY19saXN0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmM9MTU0PXZvaWQgaXhnYmVfZW5hYmxlX3NyaW92KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgbWF4X3Zmcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTE1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmM6MTU5Olx0cHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoYWRhcHRlci1cdTAwM2VwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMTYwLVx0aWYgKCFwcmVfZXhpc3RpbmdfdmZzIFx1MDAyNlx1MDAyNiAhbWF4X3Zmcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jPTI3ND1zdGF0aWMgaW50IGl4Z2JlX3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0yNzctXHRzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzoyNzg6XHRpbnQgcHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMjc5LVx0aW50IGVyciA9IDAsIG51bV9yeF9wb29scywgaSwgbGltaXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYz0zMzc9c3RhdGljIGludCBpeGdiZV9wY2lfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMzQyLVx0dTMyIGN1cnJlbnRfZmxhZ3MgPSBhZGFwdGVyLVx1MDAzZWZsYWdzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzozNDM6XHRpbnQgcHJldl9udW1fdmYgPSBwY2lfbnVtX3ZmKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTM0NC0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTM1MC1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiAoY3VycmVudF9mbGFncyAhPSBhZGFwdGVyLVx1MDAzZWZsYWdzIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jOjM1MTpcdFx0ICAgICBwcmV2X251bV92ZiAhPSBwY2lfbnVtX3ZmKGRldikpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0zNTItXHRcdGl4Z2JlX3NyaW92X3JlaW5pdChhZGFwdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jPTExODg9c3RhdGljIGludCBvdHgyX2FkZF9mbG93X21zZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBvdHgyX2Zsb3cgKmZsb3cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYy0xMjc0LVx0XHR2ZiA9IGV0aHRvb2xfZ2V0X2Zsb3dfc3BlY19yaW5nX3ZmKHJpbmdfY29va2llKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmM6MTI3NTpcdFx0aWYgKHZmIFx1MDAzZSBwY2lfbnVtX3ZmKHBmdmYtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMtMTI3Ni1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9OTM1PWludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9jZ3hfbGlua19ldmVudChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtOTQ0LVx0Lyogbm90aWZ5IFZGcyBhYm91dCBsaW5rIGV2ZW50ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjk0NTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBjaV9udW1fdmYocGYtXHUwMDNlcGRldik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTk0Ni1cdFx0c3RydWN0IG90eDJfdmZfY29uZmlnICpjb25maWcgPSBcdTAwMjZwZi1cdTAwM2V2Zl9jb25maWdzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTAwNT1zdGF0aWMgdm9pZCBvdHgyX3BmYWZfbWJveF91cF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTEwMzMtXHQvKiBGb3J3YXJkIHRvIFZGIGlmZiBWRnMgYXJlIHJlYWxseSBwcmVzZW50ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjEwMzQ6XHRpZiAoZGV2aWQgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGYtXHUwMDNlcGRldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTAzNS1cdFx0b3R4Ml9mb3J3YXJkX3ZmX21ib3hfbXNncyhwZiwgXHUwMDI2cGYtXHUwMDNlbWJveC5tYm94X3VwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTgyNz1zdGF0aWMgYm9vbCBvdHgyX3Byb21pc2NfdXNlX21jZV9saXN0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE4MzUtXHQvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHRydXN0ZWQgVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYgbmV0ZGV2ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE4MzY6XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIHBjaV9udW1fdmYocGZ2Zi1cdTAwM2VwZGV2KTsgdmYmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xODM3LVx0XHRpZiAocGZ2Zi1cdTAwM2V2Zl9jb25maWdzW3ZmXS50cnVzdGVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9Mjc0Mj1zdGF0aWMgaW50IG90eDJfc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6Mjc1MTpcdGlmICh2ZiBcdTAwM2U9IHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI3NTItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9Mjc2Nz1zdGF0aWMgaW50IG90eDJfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0yNzc2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyNzc3Olx0aWYgKHZmIFx1MDAzZT0gcGNpX251bV92ZihwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc3OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yOTI0PXN0YXRpYyBpbnQgb3R4Ml9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI5MzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjI5MzE6XHRpZiAodmYgXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0yOTMyLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM0NTk9c3RhdGljIGludCBvdHgyX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNDYyLVx0c3RydWN0IG90eDJfbmljICpwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM0NjM6XHRpbnQgbnVtdmZzID0gcGNpX251bV92ZihwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzQ2NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYz0zMzgwPXN0YXRpYyBpbnQgbWx4NF9sb2FkX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBjaV9kZXZfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDQ5LVx0XHRcdGRldi1cdTAwM2VmbGFncyA9IE1MWDRfRkxBR19NQVNURVI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYzozNDUwOlx0XHRcdGV4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDUxLVx0XHRcdGlmIChleGlzdGluZ192ZnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYz0xODk9c3RhdGljIGludCBtbHg1X2RldmxpbmtfcmVsb2FkX2Rvd24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGJvb2wgbmV0bnNfY2hhbmdlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZXZsaW5rLmMtMjIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RldmxpbmsuYzoyMjE6XHRpZiAobWx4NV9jb3JlX2lzX3BmKGRldikgXHUwMDI2XHUwMDI2IHBjaV9udW1fdmYocGRldikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTIyMi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7cmVsb2FkIHdoaWxlIFZGcyBhcmUgcHJlc2VudCBpcyB1bmZhdm9yYWJsZVwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYz0xMTUzPW1seDVfZXN3X2hvc3RfcGZfZnJvbV9uZXRfZnVuY19wYXJhbXMoY29uc3QgdTggKmVudHJ5LCBpbnQgbnVtX2VudHJpZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYy0xMTcwLVx0XHRcdC5udW1fb2ZfdmZzID0gTUxYNV9HRVQobmV0d29ya19mdW5jdGlvbl9wYXJhbXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5jOjExNzE6XHRcdFx0XHRcdCAgICAgICBlbnRyeSwgcGNpX251bV92ZnMpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYy0xMTcyLVx0XHRcdC50b3RhbF92ZnMgPSBNTFg1X0dFVChuZXR3b3JrX2Z1bmN0aW9uX3BhcmFtcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmg9NDA3PXN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1X3NyaW92X2lzX2VuYWJsZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21seDVfY29yZS5oOjQwOTpcdHJldHVybiBwY2lfbnVtX3ZmKGRldi1cdTAwM2VwZGV2KSA/IHRydWUgOiBmYWxzZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIwMz12b2lkIG1seDVfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBudW1fdmZfY2hhbmdlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTIwNi1cdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYzoyMDc6XHRpbnQgbnVtX3ZmcyA9IHBjaV9udW1fdmYoZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjA4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIzMz1pbnQgbWx4NV9jb3JlX3NyaW92X3NldF9tc2l4X3ZlY19jb3VudChzdHJ1Y3QgcGNpX2RldiAqdmYsIGludCBtc2l4X3ZlY19jb3VudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0yNDYtXHRcdG1zaXhfdmVjX2NvdW50ID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjI0NzpcdFx0XHRtbHg1X2dldF9kZWZhdWx0X21zaXhfdmVjX2NvdW50KGRldiwgcGNpX251bV92ZihwZikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjQ4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTI1Nz1pbnQgbWx4NV9zcmlvdl9hdHRhY2goc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI1OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYzoyNTk6XHRpZiAoIW1seDVfY29yZV9pc19wZihkZXYpIHx8ICFwY2lfbnVtX3ZmKGRldi1cdTAwM2VwZGV2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI2MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjYyLVx0LyogSWYgc3Jpb3YgVkZzIGV4aXN0IGluIFBDSSBsZXZlbCwgZW5hYmxlIHRoZW0gaW4gZGV2aWNlIGxldmVsICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYzoyNjM6XHRyZXR1cm4gbWx4NV9kZXZpY2VfZW5hYmxlX3NyaW92KGRldiwgcGNpX251bV92ZihkZXYtXHUwMDNlcGRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjY0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYz0yNjY9dm9pZCBtbHg1X3NyaW92X2RldGFjaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjI3MTpcdG1seDVfZGV2aWNlX2Rpc2FibGVfc3Jpb3YoZGV2LCBwY2lfbnVtX3ZmKGRldi1cdTAwM2VwZGV2KSwgZmFsc2UsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI3Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM9Mjk4PWludCBtbHg1X3NyaW92X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0zMDgtXHRzcmlvdi1cdTAwM2VtYXhfdmZzID0gbWx4NV9nZXRfbWF4X3ZmcyhkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MzA5Olx0c3Jpb3YtXHUwMDNlbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0zMTAtXHRzcmlvdi1cdTAwM2VtYXhfZWNfdmZzID0gbWx4NV9jb3JlX2VjX3NyaW92X2VuYWJsZWQoZGV2KSA/IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMoZGV2LVx1MDAzZXBkZXYpIDogMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9tYWluLmM9NzU3PXN0YXRpYyBpbnQgbmZwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9tYWluLmMtODQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jOjg0ODpcdHBmLVx1MDAzZW51bV92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jLTg0OS1cdGlmIChwZi1cdTAwM2VudW1fdmZzIFx1MDAzZSBwZi1cdTAwM2VsaW1pdF92ZnMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9MzA4PXN0YXRpYyBpbnQgaW9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfYnVzX3BjaS5jLTM2MC1cdGluaXRfcndzZW0oXHUwMDI2aW9uaWMtXHUwMDNldmZfb3BfbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6MzYxOlx0bnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtMzYyLVx0aWYgKG51bV92ZnMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYz0yMzQ4PXN0YXRpYyBpbnQgaW9uaWNfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jLTIzNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYzoyMzYwOlx0aWYgKHZmIFx1MDAzZT0gcGNpX251bV92Zihpb25pYy1cdTAwM2VwZGV2KSB8fCAhaW9uaWMtXHUwMDNldmZzKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzYxLVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jPTIzNzk9c3RhdGljIGludCBpb25pY19nZXRfdmZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jLTIzOTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYzoyMzkyOlx0aWYgKHZmIFx1MDAzZT0gcGNpX251bV92Zihpb25pYy1cdTAwM2VwZGV2KSB8fCAhaW9uaWMtXHUwMDNldmZzKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzkzLVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jPTI0MTY9c3RhdGljIGludCBpb25pY19zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTggKm1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yNDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmM6MjQzMTpcdGlmICh2ZiBcdTAwM2U9IHBjaV9udW1fdmYoaW9uaWMtXHUwMDNlcGRldikgfHwgIWlvbmljLVx1MDAzZXZmcykge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgcGNpX251bV92ZmAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgcGNpX251bV92ZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcywgYW5kIHNpbmNlIHRoaXMgc291bmRzIGxpa2UgYSBQQ0ktc3BlY2lmaWMgdmFsdWUsIGBpbmNsdWRlL2xpbnV4L3BjaS5oYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIGdldCB0byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMgYWJvdXQgYHBjaV9udW1fdmZgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbWFjcm8sIGEgc3RydWN0dXJlIG1lbWJlciwgb3Igc29tZXRoaW5nIHRoYXQgY2xhcmlmaWVzIGl0cyBtZWFuaW5nIGFuZCB1c2FnZSBpbiB0aGUga2VybmVsJiMzOTtzIFBDSSBzdWJzeXN0ZW0uIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfbnVtX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wY2kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BjaS5oPTI1Njk9dm9pZCBwY2lfaW92X3JlbW92ZV92aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKTtcbmluY2x1ZGUvbGludXgvcGNpLmg6MjU3MDppbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmgtMjU3MS1pbnQgcGNpX3Zmc19hc3NpZ25lZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTI2MjA9c3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfVxuaW5jbHVkZS9saW51eC9wY2kuaDoyNjIxOnN0YXRpYyBpbmxpbmUgaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9wY2kuaC0yNjIyLXN0YXRpYyBpbmxpbmUgaW50IHBjaV92ZnNfYXNzaWduZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBwY2lfbnVtX3ZmYCBzaXR1YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3IGNvZGUuIEl0IGxvb2tzIGxpa2UgYHBjaV9udW1fdmZgIGlzIHByZXNlbnQgcmVnYXJkbGVzcywgYnV0IGl0JiMzOTtsbCByZXR1cm4gemVybyBpZiBgUENJX0lPVmAgaXNuJiMzOTt0IGVuYWJsZWQuIFRoYXQmIzM5O3Mgbm8gZ29vZCBmb3IgbWU7IEkgbmVlZCB0byBhY3R1YWxseSAqcnVuKiB0aGUgY29kZSwgbm90IGp1c3QgY2hlY2sgaWYgaXQmIzM5O3MgdGhlcmUuIFNvLCBgUENJX0lPVmAgKmRlZmluaXRlbHkqIG5lZWRzIHRvIGJlIGluIG15IGBFbmFibGVDb25maWdzYC4KClRoZW4gdGhlcmUmIzM5O3MgYFZGSU9fUENJYC4gSSBrbm93IHRoYXQgSSBuZWVkIHRoZSBWRklPIFBDSSBkcml2ZXIgZm9yIGV4cG9zaW5nIFBDSSBkZXZpY2VzIHRvIFZGSU8sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpcyBpbmNsdWRlZC4gVGhlbiBJIHJlY2FsbGVkIHRoYXQgYFZGSU9fUENJYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBWRklPX1BDSV9DT1JFYC4gR29vZCB0aGluZyBJIGNoZWNrZWQhIEJ1dCwgZG9lcyBgVkZJT19QQ0lgICphbG9uZSogZ2V0IG1lIHdoYXQgSSBuZWVkPwoKTG9va3MgbGlrZSB0aGF04oCZcyBzdWZmaWNpZW50LiBgVkZJT19QQ0lgIHNlbGVjdHMgYFZGSU9fUENJX0NPUkVgLCBzbyB0aGF0IGRlcGVuZGVuY3kgaXMgYWxyZWFkeSBoYW5kbGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3M/IEkga25vdyBJJiMzOTtsbCBuZWVkIGBQQ0lgLCBidXQgdGhhdCYjMzk7cyBhIGJhc2UgY29uZmlnIGFuZCBsaWtlbHkgYWxyZWFkeSBlbmFibGVkLiBJIGFsc28gbmVlZCBgUENJX0lPVmAsIHdoaWNoIGlzIGFscmVhZHkgb24gdGhlIGxpc3QuIEJ1dCBJICphbHNvKiBuZWVkIGBWRklPX1BDSWAgZm9yIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGRyaXZlci4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBgVkZJT2AuIFNlZW1zIGxpa2UgYFZGSU9fUENJYCBkZXBlbmRzIG9uIGBWRklPYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBgZHJpdmVycy92ZmlvL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRklPXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gICA1Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcbiAgIDY6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gICA3Olx0XHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXG4gICA4Olx0XHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxuICAgOTpcdFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxuICAxMjpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxuICAxNTpcdFxuICAxNjpcdGlmIFZGSU9cbiAgMTc6XHRjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuICAxODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgXHUwMDI2XHUwMDI2ICFTUEFQUl9UQ0VfSU9NTVVcbiAgMjA6XHRcdGRlZmF1bHQgIVZGSU9fR1JPVVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc2V0dGluZyB1cCBgVkZJT2AsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgY29uZmlncyB0byBlbmFibGUgYXJlIGBWRklPYCwgYFZGSU9fUENJYCwgYW5kIGBQQ0lfSU9WYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBteSBzZXR1cC4gSSB3b25kZXJlZCBhYm91dCBgVkZJT19QQ0lfQ09SRWAsIGJ1dCBhZnRlciBjaGVja2luZyB0aGUgS2NvbmZpZyBpbiBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYCwgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IHZpc2libGUuIEl0JiMzOTtzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBWRklPX1BDSWAsIHNvIEkmIzM5O2xsIGJlIGVuYWJsaW5nIHRoYXQgaW5zdGVhZC4KCk5vdywgbXkgbWluZCBzaGlmdHMgdG8gZnVuY3Rpb24gY2FsbHMuIEkmIzM5O20gZm9jdXNpbmcgb24gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBhbmQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBzcGVjaWZpY2FsbHkuIEhtbSwgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyBiZWluZyBjYWxsZWQgd2l0aCBgbnJfdmlydGZuID0gMGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuIFRpbWUgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCB0byBzZWUgaWYgaXQgbWlnaHQgYmUgYSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCBjb3VsZCBwcmVzZW50IGFuIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjM1Nj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Flcl9lcnJfZGV0ZWN0ZWQpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1Ny1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzNTg6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzNTktXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTcxPWV4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTcyOmludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzMtXHRcdFx0XHQgIGludCBucl92aXJ0Zm4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU0MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDoKCioqRGVsdmluZyBpbnRvIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZS4gRmlyc3QsIEkgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZDsgd2hhdCBzZXRzIHRoZSBzdGFnZSBmb3IgdGhpcyBmdW5jdGlvbj8gQXJlIHdlIGNvbWluZyBpbiB0aHJvdWdoIGRldmljZSBwcm9iZSwgc29tZSB1c2VyLXNwYWNlIHJlcXVlc3QsIG9yIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgdmZpby9QQ0kgaW5pdGlhbGl6YXRpb24gbGlmZWN5Y2xlPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IGRlY2lzaW9uIHBvaW50cyBhbmQgY29uZGl0aW9uYWwgYnJhbmNoZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgY29uZmlndXJpbmcgU1ItSU9WLiBEb2VzIGl0IGludm9sdmUgc2V0dGluZyB1cCB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpPyBBcmUgdGhlcmUgY2hlY2tzIGZvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBwZXJtaXNzaW9uaW5nPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGVzcGVjaWFsbHkgdGhlIFZGIEJBUnMgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMpLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWRiBkcml2ZXJzLgoKQSBkZWVwZXIgdW5kZXJzdGFuZGluZyB3aWxsIGludm9sdmUgaG93IGl0IGhhbmRsZXMgYW55IGVycm9ycy4gSSBuZWVkIHRvIGtub3cgdGhlIGVycm9yIGNvZGVzIGl0IHJldHVybnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIHJldHJpZXMgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcz8gRG9lcyBpdCBjbGVhbiB1cCBwYXJ0aWFsbHkgY29uZmlndXJlZCBzdGF0ZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gUHJvcGVyIGVycm9yIGhhbmRsaW5nIGlzIGVzc2VudGlhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBmcm9tIHRoZSBob3N0IGFuZCBwb3RlbnRpYWxseSB0aGUgZ3Vlc3QsIHRoZSBsb2NraW5nIGFyb3VuZCBjb25maWd1cmF0aW9uIGNoYW5nZXMgaXMgY3J1Y2lhbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbXV0ZXhlcywgc3BpbmxvY2tzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgcHJldmVudCBjb25mbGljdHMuIEFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBlbm91Z2gsIG9yIGNvdWxkIHRoZXkgbGVhZCB0byBjb250ZW50aW9uPwoKVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBTUi1JT1YsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgVkYgZHJpdmVycywgYW5kIHdoYXQgaXQgZG9lcyB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHNlY3VyZSBzZXR1cC4gVWx0aW1hdGVseSwgdGhpcyB1bmRlcnN0YW5kaW5nIHNob3VsZCBhbGxvdyBtZSB0byBpZGVudGlmeSBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNTg6XHRpbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuMjM1OTpcdFx0XHRcdFx0ICBpbnQgbnJfdmlydGZuKVxuMjM2MDpcdHtcbjIzNjE6XHRcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuMjM2MjpcdFx0aW50IHJldCA9IDA7XG4yMzYzOlx0XG4yMzY0Olx0XHRkZXZpY2VfbG9ja19hc3NlcnQoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjM2NTpcdFxuMjM2NjpcdFx0aWYgKG5yX3ZpcnRmbikge1xuMjM2NzpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XG4yMzY4Olx0XHRcdC8qXG4yMzY5Olx0XHRcdCAqIFRoZSB0aHJlYWQgdGhhdCBhZGRzIHRoZSB2ZGV2IHRvIHRoZSBsaXN0IGlzIHRoZSBvbmx5IHRocmVhZFxuMjM3MDpcdFx0XHQgKiB0aGF0IGdldHMgdG8gY2FsbCBwY2lfZW5hYmxlX3NyaW92KCkgYW5kIHdlIHdpbGwgb25seSBhbGxvd1xuMjM3MTpcdFx0XHQgKiBpdCB0byBiZSBjYWxsZWQgb25jZSB3aXRob3V0IGdvaW5nIHRocm91Z2hcbjIzNzI6XHRcdFx0ICogcGNpX2Rpc2FibGVfc3Jpb3YoKVxuMjM3MzpcdFx0XHQgKi9cbjIzNzQ6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnZkZXYtXHUwMDNlc3Jpb3ZfcGZzX2l0ZW0pKSB7XG4yMzc1Olx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjIzNzY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzc3Olx0XHRcdH1cbjIzNzg6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ2ZGV2LVx1MDAzZXNyaW92X3Bmc19pdGVtLCBcdTAwMjZ2ZmlvX3BjaV9zcmlvdl9wZnMpO1xuMjM3OTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcbjIzODA6XHRcbjIzODE6XHRcdFx0LypcbjIzODI6XHRcdFx0ICogVGhlIFBGIHBvd2VyIHN0YXRlIHNob3VsZCBhbHdheXMgYmUgaGlnaGVyIHRoYW4gdGhlIFZGIHBvd2VyXG4yMzgzOlx0XHRcdCAqIHN0YXRlLiBUaGUgUEYgY2FuIGJlIGluIGxvdyBwb3dlciBzdGF0ZSBlaXRoZXIgd2l0aCBydW50aW1lXG4yMzg0Olx0XHRcdCAqIHBvd2VyIG1hbmFnZW1lbnQgKHdoZW4gdGhlcmUgaXMgbm8gdXNlcikgb3IgUENJX1BNX0NUUkxcbjIzODU6XHRcdFx0ICogcmVnaXN0ZXIgd3JpdGUgYnkgdGhlIHVzZXIuIElmIFBGIGlzIGluIHRoZSBsb3cgcG93ZXIgc3RhdGUsXG4yMzg2Olx0XHRcdCAqIHRoZW4gY2hhbmdlIHRoZSBwb3dlciBzdGF0ZSB0byBEMCBmaXJzdCBiZWZvcmUgZW5hYmxpbmdcbjIzODc6XHRcdFx0ICogU1ItSU9WLiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGFuZFxuMjM4ODpcdFx0XHQgKiB1c2Vyc3BhY2UgUENJX1BNX0NUUkwgd3JpdGUgY2FuIHJhY2UgYWdhaW5zdCB0aGlzIGNvZGUgcGF0aCxcbjIzODk6XHRcdFx0ICogc28gcHJvdGVjdCB0aGUgc2FtZSB3aXRoICYjMzk7bWVtb3J5X2xvY2smIzM5Oy5cbjIzOTA6XHRcdFx0ICovXG4yMzkxOlx0XHRcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjM5MjpcdFx0XHRpZiAocmV0KVxuMjM5MzpcdFx0XHRcdGdvdG8gb3V0X2RlbDtcbjIzOTQ6XHRcbjIzOTU6XHRcdFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbjIzOTY6XHRcdFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4yMzk3Olx0XHRcdHZkZXYtXHUwMDNlc3Jpb3ZfYWN0aXZlID0gdHJ1ZTtcbjIzOTg6XHRcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4yMzk5Olx0XHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnJfdmlydGZuKTtcbjI0MDA6XHRcdFx0aWYgKHJldCkge1xuMjQwMTpcdFx0XHRcdHBtX3J1bnRpbWVfcHV0KFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjI0MDI6XHRcdFx0XHRnb3RvIG91dF9kZWw7XG4yNDAzOlx0XHRcdH1cbjI0MDQ6XHRcdFx0cmV0dXJuIG5yX3ZpcnRmbjtcbjI0MDU6XHRcdH1cbjI0MDY6XHRcbjI0MDc6XHRcdGlmIChwY2lfbnVtX3ZmKHBkZXYpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTA3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipBbmFseXppbmcgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljIGFuZCBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBhY2hpZXZlcyBpdHMgcHVycG9zZS4gVGhlIGJpZyBwaWN0dXJlIGlzIHNldCwgc28gbGV0JiMzOTtzIHBhcnNlIHRocm91Z2ggdGhlIGxpbmVzIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDA3Olx0XHRpZiAocGNpX251bV92ZihwZGV2KSkge1xuMjQwODpcdFx0XHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcbjI0MDk6XHRcdFx0cG1fcnVudGltZV9wdXQoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjQxMDpcdFx0fVxuMjQxMTpcdFxuMjQxMjpcdG91dF9kZWw6XG4yNDEzOlx0XHQvKlxuMjQxNDpcdFx0ICogQXZvaWQgdGFraW5nIHRoZSBtZW1vcnlfbG9jayBpbnRlbnRpb25hbGx5LiBBIHJhY2Ugd2l0aCBhIHBvd2VyXG4yNDE1Olx0XHQgKiBzdGF0ZSB0cmFuc2l0aW9uIHdvdWxkIGF0IG1vc3QgcmVzdWx0IGluIGFuIC1FQlVTWSwgbGVhdmluZyB0aGVcbjI0MTY6XHRcdCAqIGRldmljZSBpbiBQQ0lfRDAuXG4yNDE3Olx0XHQgKi9cbjI0MTg6XHRcdHZkZXYtXHUwMDNlc3Jpb3ZfYWN0aXZlID0gZmFsc2U7XG4yNDE5Olx0XG4yNDIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNnZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XG4yNDIxOlx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnZkZXYtXHUwMDNlc3Jpb3ZfcGZzX2l0ZW0pO1xuMjQyMjpcdG91dF91bmxvY2s6XG4yNDIzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcbjI0MjQ6XHRcdHJldHVybiByZXQ7XG4yNDI1Olx0fVxuMjQyNjpcdEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKTtcbjI0Mjc6XHRcbjI0Mjg6XHRjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzID0ge1xuMjQyOTpcdFx0LmVycm9yX2RldGVjdGVkID0gdmZpb19wY2lfY29yZV9hZXJfZXJyX2RldGVjdGVkLFxuMjQzMDpcdH07XG4yNDMxOlx0RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9lcnJfaGFuZGxlcnMpO1xuMjQzMjpcdFxuMjQzMzpcdHN0YXRpYyBib29sIHZmaW9fZGV2X2luX2dyb3VwcyhzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsXG4yNDM0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9ncm91cF9pbmZvICpncm91cHMpXG4yNDM1Olx0e1xuMjQzNjpcdFx0dW5zaWduZWQgaW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTg5CgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkZJTyBQQ0kgRGV2aWNlIENsb3N1cmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCB3aXRoIGBucl92aXJ0Zm4gPSAwYCBlZmZlY3RpdmVseSBkaXNhYmxlcyBTUklPViwgcmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBgdmZpb19wY2lfc3Jpb3ZfcGZzYCBsaXN0LiBUaGlzIHNlZW1zIGNvcnJlY3QgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIFZGcyBhcmUgYWxyZWFkeSBlbmFibGVkLiBUaGUga2V5IHBhcnQgaXMsIG9mIGNvdXJzZSwgdGhlIGNvbmRpdGlvbjogYGlmIChwY2lfbnVtX3ZmKHZkZXYtJmd0O3BkZXYpKWAuIFRoaXMgY2hlY2tzIGlmIGFueSBWRnMgYXJlIHByZXNlbnQuICBJZiBzbywgdGhlIHBhdGNoIGNhbGxzIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKWAgd2l0aGluIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIGVuc3VyaW5nIFZGcyBhcmUgZGlzYWJsZWQgKmJlZm9yZSogdGhlIGRldmljZSBpcyBjbG9zZWQuICBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gZGV2aWNlcyBhcmUgcmVtb3ZlZC4KClNvLCB0byBzdW1tYXJpemUgc3VjY2luY3RseTogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCB0byBleHBsaWNpdGx5IGRpc2FibGUgU1ItSU9WIFZGcy4gVGhpcyBlbnN1cmVzIFZGcyBhcmUgZGlzYWJsZWQgb24gZGV2aWNlIGNsb3N1cmUsIHdoaWNoIGlzIGVzc2VudGlhbCB0byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmZpby1wY2kuIEkmIzM5O2QgYXNzZXNzIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAgYW5kIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAgYXMgdGhlIHN5bWJvbHMgb2YgZm9jdXMuIFRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSW5pdGlhbGx5LCBJIHN1c3BlY3RlZCB3ZSBtaWdodCBuZWVkIG1vcmUgdGhhbiBqdXN0IGBWRklPYCwgYW5kIHRoYXQgYFZGSU9fVklSUUZEYCB3b3VsZCBiZSBuZWNlc3NhcnkuICBIb3dldmVyLCBgVkZJT19QQ0lfQ09SRWAgc2VsZWN0cyBgVkZJT19WSVJRRkRgIGFuZCBgSVJRX0JZUEFTU19NQU5BR0VSYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYFZGSU9fUENJYCBpcyBzdWZmaWNpZW50LiBCdXQsIHdlIGFsc28gbmVlZCBgUENJX0lPVmAgc2luY2UgYHBjaV9udW1fdmZgIGlzIHRoZSB0cmlnZ2VyLiBJdCBpcyBhIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGUgdG8gb2J0YWluIGEgbm9uLXplcm8gdmFsdWUuIFRodXMsIGBWRklPX1BDSWAgYW5kIGBQQ0lfSU9WYCBhcmUgcmVxdWlyZWQsIGFsb25nIHdpdGggYFZGSU9gIG9mIGNvdXJzZS4gSSBjYW4mIzM5O3Qgc2VlIGFueSBvdGhlciBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLCBzbyBsZXQmIzM5O3MgbG9jayB0aGlzIGRvd24gYW5kIGdlbmVyYXRlIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjMyLjUxNTQ3NjM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5OTQyNzEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZGlzYWJsZSBTUi1JT1YgVkZzIHdoZW4gYSBWRklPIFBDSSBkZXZpY2UgaXMgY2xvc2VkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgYmluZGluZyBhIHZpcnR1YWwgUENJIGRldmljZSB0byB2ZmlvLXBjaSwgZW5hYmxpbmcgVkZzLCBhbmQgY2xvc2luZyB0aGUgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTozMi41MTU0ODMxMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExMjUwOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTAzOGI1YzI5NTg0NjYzOThhMDEzNDg4Y2U0NTFhNTFiMDhkYjJkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDAwOjM5OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5pbmRleCBhMTEzYzU1ODQ1ZTEwLi5iMzZjNzdlYjNjNDA3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5AQCAtODI2LDYgKzgyNiwxMyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxcbiBcXHRlZWhfZGV2X3JlbGVhc2UodmRldi1cXHUwMDNlcGRldik7XFxuICNlbmRpZlxcbitcXG4rXFx0aWYgKHBjaV9udW1fdmYodmRldi1cXHUwMDNlcGRldikpIHtcXG4rXFx0XFx0ZGV2aWNlX2xvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdFxcdHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApO1xcbitcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHR9XFxuK1xcbiBcXHR2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAodmRldik7XFxuIFxcbiBcXHR2ZmlvX3BjaV9jb3JlX2Rpc2FibGUodmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjMyLjkyNzUyMTA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0NTgyMjEyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTAzOGI1YzI5NTg0NjYzOThhMDEzNDg4Y2U0NTFhNTFiMDhkYjJkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDA6Mzk6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCBhMTEzYzU1ODQ1ZTEwLi5iMzZjNzdlYjNjNDA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtODI2LDYgKzgyNiwxMyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXG4gXHRlZWhfZGV2X3JlbGVhc2UodmRldi1cdTAwM2VwZGV2KTtcbiAjZW5kaWZcbitcbitcdGlmIChwY2lfbnVtX3ZmKHZkZXYtXHUwMDNlcGRldikpIHtcbitcdFx0ZGV2aWNlX2xvY2soXHUwMDI2dmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRcdHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApO1xuK1x0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuK1x0fVxuK1xuIFx0dmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHZkZXYpO1xuIFxuIFx0dmZpb19wY2lfY29yZV9kaXNhYmxlKHZkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MzIuOTI3NTIyMjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNTM1MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWRklPLVBDSSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AuIEl0IHNlZW1zIHRoZXkncmUgYWRkaW5nIGEgY2FsbCB0byBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMClgIHdpdGhpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgLCBidXQgb25seSBpZiB0aGUgbnVtYmVyIG9mIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgUENJIGRldmljZSAoYHZkZXYtXHUwMDNlcGRldmApIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGlzIGlzIGNvcmUgVkZJTy1QQ0kgZHJpdmVyIHRlcnJpdG9yeSwgd2hpY2gsIGFzIHdlIGtub3csIHByb3ZpZGVzIHRoZSBjcnVjaWFsIGludGVyZmFjZSBmb3IgdXNlcnNwYWNlIGFjY2VzcyB0byBkZXZpY2VzLlxuXG5UaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIGlzIGludm9rZWQgd2hlbiBhIFZGSU8gZGV2aWNlIGlzIGJlaW5nIGNsb3NlZC4gVGhlIGtleSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgcHJhY3RpY2FsIHNjZW5hcmlvLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBXZSBrbm93IFZGSU8tUENJIHR5cGljYWxseSBleHBlY3RzIGFuIElPTU1VIGFuZCBwaHlzaWNhbCBkZXZpY2VzLCBidXQgdGhlcmUgYXJlIGRlZmluaXRlbHkgZXhjZXB0aW9ucyBsaWtlIGB2ZmlvLW1kZXZgIG9yIGB2ZmlvLXBjaWAgY29uZmlndXJhdGlvbnMgdGhhdCBjYW4gd29yayB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlIG9yIG1vY2sgSU9NTVVzLiBTbywgeWVzLCBpdOKAmXMgcGxhdXNpYmxlLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIOKAkyBpcyB0aGlzICpmdXp6YWJsZSo/IENhbiB3ZSB0cmlnZ2VyIHRoaXMgcGF0aCB3aXRoIGZ1enppbmc/IEkgbmVlZCB0byBjaGVjay4gTGV0J3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgU3l6a2FsbGVyIGhhdmluZyBzb21lIFZGSU8gZGVzY3JpcHRpb25zLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gV2Uga25vdyB0aGF0IGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAgaXMgYmVpbmcgdHJpZ2dlcmVkIG9uIGEgY2xvc2UgZXZlbnQsIHNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYnkgY2hlY2tpbmcgdGhlIHRlc3QgY2FzZXMgaW4gU3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MzcuODYyODc3NDgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc1NDc4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTU0Mj1zdGF0aWMgdm9pZCBoaXNpX2FjY192ZmlvX3BjaV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1NTItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoaXNpX2FjY192ZGV2LVxcdTAwM2VvcGVuX211dGV4KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE1NTM6XFx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1NTQtfVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYwNi1cXHQub3Blbl9kZXZpY2UgPSBoaXNpX2FjY192ZmlvX3BjaV9vcGVuX2RldmljZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE2MDc6XFx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYwOC1cXHQuaW9jdGwgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBpc21fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zMzktXFx0Lm9wZW5fZGV2aWNlID0gaXNtX3ZmaW9fcGNpX29wZW5fZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYzozNDA6XFx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDEtXFx0LmlvY3RsID0gdmZpb19wY2lfY29yZV9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9MTM0MD1zdGF0aWMgdm9pZCBtbHg1dmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM0NS1cXHRtbHg1dmZfY21kX2Nsb3NlX21pZ3JhdGFibGUobXZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6MTM0NjpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM0Ny19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0yMjc9c3RhdGljIHZvaWQgbnZncmFjZV9ncHVfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMjUzLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjI1NDpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTI1NS19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9jb3JlX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwOTQtXFx0Lm9wZW5fZGV2aWNlXFx0PSBudmdyYWNlX2dwdV9vcGVuX2RldmljZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMDk1OlxcdC5jbG9zZV9kZXZpY2VcXHQ9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwOTYtXFx0LmlvY3RsXFx0XFx0PSB2ZmlvX3BjaV9jb3JlX2lvY3RsLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYz0xNzc9c3RhdGljIHZvaWQgcGRzX3ZmaW9fY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTg3LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGRzX3ZmaW8tXFx1MDAzZXN0YXRlX211dGV4KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jOjE4ODpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZSh2ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE4OS19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmM9MTA2PXN0YXRpYyB2b2lkIHFhdF92Zl9wY2lfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jLTExMi1cXHRxYXRfdmZfZGlzYWJsZV9mZHMocWF0X3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYzoxMTM6XFx0dmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UoY29yZV92ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmMtMTE0LX1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYz0xNDk9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1My1cXHQub3Blbl9kZXZpY2VcXHQ9IHZmaW9fcGNpX29wZW5fZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYzoxNTQ6XFx0LmNsb3NlX2RldmljZVxcdD0gdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2UsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1NS1cXHQuaW9jdGxcXHRcXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGwsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz04MTM9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9kaXNhYmxlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTQtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6ODE1OnZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODE2LXtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTg0NC19XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6ODQ1OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04NDYtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9NDU9c3RhdGljIHZvaWQgdmlydGlvdmZfcGNpX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy01MC1cXHR2aXJ0aW92Zl9jbG9zZV9taWdyYXRpb24odmlydHZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo1MTpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy01Mi19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZpcnRpb3ZmX3ZmaW9fcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzItXFx0Lm9wZW5fZGV2aWNlID0gdmlydGlvdmZfcGNpX29wZW5fZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxMzM6XFx0LmNsb3NlX2RldmljZSA9IHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzQtXFx0LmlvY3RsID0gdmZpb19wY2lfY29yZV9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTE2ND1zdGF0aWMgdm9pZCB4ZV92ZmlvX3BjaV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy0xNzEtXFx0eGVfdmZpb19wY2lfc3RhdGVfbXV0ZXhfdW5sb2NrKHhlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjE3MjpcXHR2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShjb3JlX3ZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jLTE3My19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD0xNjI9aW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2X3JlZ2lvbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNjUtXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IHNpemUsIHUzMiBmbGFncywgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTY2OnZvaWQgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE2Ny1pbnQgdmZpb19wY2lfY29yZV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjM5LjU5MDQzMDIxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTM5MjU5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkZJTyBQQ0kgYW5kIFN5emthbGxlcjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBpcyBhIGtleSBmdW5jdGlvbiwgZXhwb3J0ZWQgYW5kIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGJ5IHRoZXNlIFZGSU8gUENJIGRyaXZlcnMsIGV2ZW4gd2l0aGluIGB2ZmlvX3BjaS5jYCBpdHNlbGYuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuICpyZWFjaCogYHZmaW9fcGNpYCB0aHJvdWdoIFN5emthbGxlcj9cblxuU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3lzL2xpbnV4L3ZmaW8udHh0YCwgc28gYXQgbGVhc3QgaXQgKmtub3dzKiBhYm91dCB0aGUgVkZJTyBpb2N0bHMuIEJ1dCBob2xkIG9uLCBmb3IgVkZJTyBQQ0ksIEkgbmVlZCBhIFBDSSBkZXZpY2UsIHJpZ2h0PyBTeXprYWxsZXIgdXNlcyBgdmhjaWAsIGB2a21zYCwgYW5kIGB2bmV0YOKApiBEb2VzIGl0IGhhdmUgc29tZSBraW5kIG9mIHZpcnR1YWwgUENJIGRldmljZSB0aGF0IGNhbiBhY3R1YWxseSBiZSBib3VuZCB0byBWRklPPyBOb3csIEkgZG8gcmVtZW1iZXIgc2VlaW5nIHRoZSBgdmZpby1wY2lgIGRyaXZlci4gU28sIGNhbiBTeXprYWxsZXIgYmluZCBhIGRldmljZSB0byB0aGF0P1xuXG5MZXQgbWUgc2Vl4oCmIFllYWgsIGl0IGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgIGFuZCBvdGhlciByZWxhdGVkIHNldHVwIHJvdXRpbmVzLiBCdXQgZm9yIFZGSU8gc3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGl0IGNhbiBvcGVuIGAvZGV2L3ZmaW8vdmZpb2AgYW5kIGAvZGV2L3ZmaW8vWGAuIFRoYXQncyBhIGdvb2Qgc2lnbiEgTmV4dCBzdGVwLCBJIG5lZWQgdG8gY2hlY2sgaWYgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyByZWFjaGFibGUsIGFuZCB0aGVuIEknbGwgc2VlIGlmIEkgY2FuIGdldCB0aGlzIGFsbCB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjQ0LjA4NDM1OTM5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4NzM5NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MjA5PXN0YXRpYyBpbnQgdmZpb19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnJfdmlydGZuKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTIxNS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MjE2OlxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCBucl92aXJ0Zm4pO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0yMTctfVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NTM9aW50IHZmaW9fcGNpX2V2ZW50ZmRfcmVwbGFjZV9sb2NrZWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNzctXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Nzg6LyogTGlzdCBvZiBQRidzIHRoYXQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUoKSBoYXMgYmVlbiBjYWxsZWQgb24gKi9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy03OS1zdGF0aWMgREVGSU5FX01VVEVYKHZmaW9fcGNpX3NyaW92X3Bmc19tdXRleCk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz04MTU9dm9pZCB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTgzMS1cXHRcXHRkZXZpY2VfbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo4MzI6XFx0XFx0dmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtODMzLVxcdFxcdGRldmljZV91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yMDk5PXN0YXRpYyBpbnQgdmZpb19wY2lfdmZfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMTA3LVxcdFxcdC8qXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MjEwODpcXHRcXHQgKiBJZiB0aGlzIFZGIHdhcyBjcmVhdGVkIGJ5IG91ciB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSgpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjEwOS1cXHRcXHQgKiB0aGVuIHdlIGNhbiBmaW5kIHRoZSBQRiB2ZmlvX3BjaV9jb3JlX2RldmljZSBub3csIGFuZCBkdWUgdG9cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTIzMjY9dm9pZCB2ZmlvX3BjaV9jb3JlX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzI3LXtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMzI4OlxcdHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHZkZXYsIDApO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIzMjktXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yMzU2PUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfYWVyX2Vycl9kZXRlY3RlZCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMzU4OmludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjM1OS1cXHRcXHRcXHRcXHQgIGludCBucl92aXJ0Zm4pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNDI1LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyNDI2OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNDI3LVxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTcxPWV4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fcGNpX2NvcmVfZXJyX2hhbmRsZXJzO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjE3MjppbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3My1cXHRcXHRcXHRcXHQgIGludCBucl92aXJ0Zm4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTo0NS44NDMxMDUwODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE3NjUxNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gUENJIFNSSU9WIERpc2FibGVtZW50IG9uIENsb3NlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIFNSSU9WIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBWRklPIFBDSSBjb3JlLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgY2FsbCB0byBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmUodmRldiwgMClgIGluIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAuIFRoZSBsb2dpYyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSWYgdGhlIHBoeXNpY2FsIGRldmljZSAoYHBkZXZgKSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgZGV2aWNlIChgdmRldmApIGhhcyBhbnkgdmlydHVhbCBmdW5jdGlvbnMgKFZGcykgZW5hYmxlZCAoY2hlY2tlZCB2aWEgYHBjaV9udW1fdmYodmRldi1cdTAwM2VwZGV2KWApLCB0aGVuIFNSSU9WIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgZHVyaW5nIHRoZSBkZXZpY2UgY2xvc2UgcHJvY2VkdXJlLiBUaGlzIGNsZWFybHkgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBkcml2ZXIncyBiZWhhdmlvci5cblxuTm93LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGZ1enppbmcuIEknbSBhbHdheXMgdGhpbmtpbmcgYWJvdXQgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4gSXMgdGhpcyBWRklPIFBDSSBjb2RlIHBhdGggZnV6emFibGUgd2l0aCBzeXprYWxsZXI/IFdlIGtub3cgdGhlcmUgYXJlIGBzeXpfa3ZtX3NldHVwX2NwdWAgYW5kIGBzeXpfa3ZtX3NldHVwX3ZtYCBjYWxscyBpbiBzeXprYWxsZXIsIHdoaWNoIGRlYWwgd2l0aCBLVk0uIEJ1dCwgd2hhdCBhYm91dCBWRklPPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBkZWRpY2F0ZWQgZGVzY3JpcHRpb25zIG9yIHN1cHBvcnQgZm9yIFZGSU8gc3lzdGVtIGNhbGxzLiBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgaWYgdGhlcmUgYXJlLCBhcyB0aGUgcGF0Y2ggZm9jdXNlcyBvbiB0aGlzIFNSSU9WIGNvbmZpZ3VyYXRpb24gYW5kIGNsb3NpbmcgdGhlIGRldmljZSwgYm90aCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODA2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjQ5Ljg2MDc1OTA2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2OTQzMTk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfLip2ZmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6NTIuMTU3NzEwOTA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMzQwNTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkZJTyBSZWFjaGFiaWxpdHkgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIGlzIHJlYWNoYWJsZSB0aHJvdWdoIFZGSU8sIHBhcnRpY3VsYXJseSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEkndmUgZ290IGEgYml0IG9mIGEgcm9hZGJsb2NrOiBJIGNhbid0IHVzZSBgc3l6X2Agd2l0aCBncmVwcGVyIGJlY2F1c2UgdGhvc2UgYXJlIFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMgYW5kIG5vdCBhY3R1YWwga2VybmVsIGNhbGxzLiBCdXQgdGhhdCdzIGZpbmU7IEknbSBub3QgbG9va2luZyBhdCBTeXprYWxsZXIgZGVzY3JpcHRpb25zIHJpZ2h0IG5vdy4gSSBqdXN0IG5lZWQgdG8gZmlndXJlIG91dCBWRklPIHJlYWNoYWJpbGl0eS5cblxuVGhlIHByb21wdCBub3RlcyBgdmZpb2AgdXNlIHdpdGggdmlydHVhbCBkZXZpY2VzLiBJIGtub3cgdGhhdCBgdmZpby1tZGV2YCBvciBgdmZpby1wY2lgIHdpdGggYSB2aXJ0dWFsIFBDSSBkZXZpY2UgYXJlIHBvc3NpYmlsaXRpZXMuIEhvd2V2ZXIsIGB2ZmlvLXBjaWAgdHlwaWNhbGx5IGJpbmRzIHRvIGEgKnBoeXNpY2FsKiBQQ0kgZGV2aWNlLCByaWdodD8gQnV0IHRoZW4sIGluIFFFTVUsIHdlICpkbyogaGF2ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIGxpa2UgYGUxMDAwYCBhbmQgYHZpcnRpby1uZXQtcGNpYC4gSG1tLi4uIGNhbiB5b3UgYmluZCBhICp2aXJ0dWFsKiBQQ0kgZGV2aWNlIHRvIGB2ZmlvLXBjaWA/XG5cbkFoLCB5ZXMsIG9mIGNvdXJzZSEgWW91IGNhbiBpZiB0aGUga2VybmVsIGJvb3RzIHdpdGggYGlvbW11PXB0YCBvciBgaW50ZWxfaW9tbXU9b25gIGFuZCB0aGUgUUVNVSBtYWNoaW5lIGhhcyBhIHZJT01NVSwgb3IgaWYgYHZmaW9gIGlzIHVzZWQgd2l0aCBgbm9pb21tdWAgbW9kZS4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5XYWl0IGEgc2Vjb25kLi4uIFN5emthbGxlciBhY3R1YWxseSAqZG9lcyogdGVzdCBWRklPISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgZm9yIGV4YW1wbGVzLiBTdGlsbCwgSSBtaWdodCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfVkZJT19QQ0lgIGFzIGEgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTo1Ny42NzExMTkzMTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzkyOTUxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTo1OS40MTA0MjQ1MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MTYzNjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgdGhlIFZGSU8gUENJIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZSBmb3IgdGhpcyBWRklPIFBDSSBkcml2ZXIgc3R1ZmYuIFRoZSBzbWFydCBtb3ZlIGhlcmUgaXMgdG8gY29uc3VsdCB0aGUgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J2xsIGxheSBvdXQgcHJlY2lzZWx5IHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBkcml2ZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZGSU8gc3Vic3lzdGVtIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcHJlcmVxdWlzaXRlcy4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgUm9zZXR0YSBTdG9uZSBmb3IgZmlndXJpbmcgb3V0IHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDowMi42NzIwNjM4NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFZGSU9fUENJX0NPUkVcXG4gICA2OlxcdFxcdHRyaXN0YXRlXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19WSVJRRkRcXG4gICA4OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFZGSU9fUENJX0lOVFhcXG4gIDExOlxcdFxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVkZJT19QQ0lcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuICAxNjpcXHRcXHRzZWxlY3QgVkZJT19QQ0lfQ09SRVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgZ2VuZXJpYyBQQ0kgVkZJTyBidXMgZHJpdmVyIHdoaWNoIGNhbiBjb25uZWN0IGFueVxcbiAgMTk6XFx0XFx0ICBQQ0kgZGV2aWNlIHRvIHRoZSBWRklPIGZyYW1ld29yay5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRpZiBWRklPX1BDSVxcbiAgMjQ6XFx0Y29uZmlnIFZGSU9fUENJX1ZHQVxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1xcXCJcXG4gIDI2OlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2IFZHQV9BUkJcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgU3VwcG9ydCBmb3IgVkdBIGV4dGVuc2lvbiB0byBWRklPIFBDSS4gIFRoaXMgZXhwb3NlcyBhbiBhZGRpdGlvbmFsXFxuICAyOTpcXHRcXHQgIHJlZ2lvbiBvbiBWR0EgZGV2aWNlcyBmb3IgYWNjZXNzaW5nIGxlZ2FjeSBWR0EgYWRkcmVzc2VzIHVzZWQgYnlcXG4gIDMwOlxcdFxcdCAgQklPUyBhbmQgZ2VuZXJpYyB2aWRlbyBkcml2ZXJzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDowMi42NzIxNjA4MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYyODcyOTUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWRklPIFBDSSBEZXZpY2UgQ2xvc3VyZSBhbmQgU1ItSU9WIENvbmZpZ3VyYXRpb24gLSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIHdoaWNoIGlzIHdpdGhpbiB0aGUgYFZGSU9fUENJX0NPUkVgIG1vZHVsZS4gVGhlIGFkZGVkIGNvZGUgYmxvY2suLi4gbGV0IG1lIHNlZS4uLlxuXG5gYGBjXG5cdGlmIChwY2lfbnVtX3ZmKHZkZXYtXHUwMDNlcGRldikpIHtcblx0XHRkZXZpY2VfbG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcblx0XHR2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKTtcblx0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuXHR9XG5gYGBcblxuLi4uaXMgb25seSByZWFjaGFibGUgaWYgYSBWRklPIFBDSSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkIGFuZCAqaXQqIGhhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKS4gYHBjaV9udW1fdmZgLi4uIHJpZ2h0LCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBWRnMuIFRoaXMgaW1wbGllcyBhbiBTUi1JT1YgY2FwYWJsZSBQQ0kgZGV2aWNlLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICp0cmlnZ2VyKiB0aGlzP1xuXG5RRU1VIGNhbiBlbXVsYXRlIFNSLUlPViBmb3IgY2VydGFpbiBkZXZpY2VzLCBsaWtlIGBpZ2JgIG9yIGBudm1lYCwgc28gdGhhdCBzaG91bGRuJ3QgYmUgYSBibG9ja2VyLiBTbywgaWYgc3l6a2FsbGVyIGNhbiBiaW5kIGFuIFNSLUlPVi1jYXBhYmxlIGRldmljZSB0byBgdmZpby1wY2lgLCBlbmFibGUgdGhlIFZGcywgYW5kIHRoZW4gY2xvc2UgdGhlIGRldmljZSwgd2UgY291bGQgYmUgbG9va2luZyBhdCBhIHZpYWJsZSBmdXp6IHRhcmdldC4gSSBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnVuY3Rpb24gYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyBjYWxsZWQgd2hlbiBWRnMgYXJlIGVuYWJsZWQgdGhyb3VnaCB0aGUgc3lzZnMuIElmIHRoaXMgY29uZmlndXJhdGlvbiBoYXBwZW5zLCB0aGVuIGNsb3NlcyB0aGUgZGV2aWNlLCB0aGlzIGNvZGUgd2lsbCBiZSBleGVjdXRlZC5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRklPIFBDSSBsb2dpYy4gSXQncyBmaXhpbmcgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIFZGcyBtaWdodCBiZSBsZWZ0IGVuYWJsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCwgc28gd2UgY291bGQgYmUgbG9va2luZyBhdCBhIGNyaXRpY2FsIHBhdGguXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBhbmQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYC4gVGhlIG5lY2Vzc2FyeSBjb25maWdzIHNlZW0gdG8gYmUgYFZGSU9fUENJYCBhbmQgYFBDSWAuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiBgUENJYCBpcyBlbm91Z2gsIG9yIGlmIHdlIG5lZWQgYFBDSV9JT1ZgIHRvIGVuYWJsZSB0aGUgYHBjaV9udW1fdmZgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTAuMzAwODkyNDgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYyNTI4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfSU9WXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE1ND1jb25maWcgUENJX0JSSURHRV9FTVVMXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE1Nzpjb25maWcgUENJX0lPVlxcbmRyaXZlcnMvcGNpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIlBDSSBJT1Ygc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTEuNzYzNDI3OTE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjg3OTA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUENJIElPViBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBQQ0lfSU9WYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIFBDSSBkcml2ZXJzIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5hdmlnYXRlIHRvIGBkcml2ZXJzL3BjaS9LY29uZmlnYC4gVGhpcyBmaWxlIHNob3VsZCBjb250YWluIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIGhvdyBgUENJX0lPVmAgaXMgZXhwb3NlZCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudCwgYW55IGFzc29jaWF0ZWQgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBtYXliZSBldmVuIGEgYnJpZWYgZGVzY3JpcHRpb24gZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gS25vd2luZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCdzIHZpcnR1YWwgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTUuNzkyMjIyMDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcGNpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0Y29uZmlnIFBDSV9MT0NLTEVTU19DT05GSUdcXG4gMTUyOlxcdFxcdGJvb2xcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0Y29uZmlnIFBDSV9CUklER0VfRU1VTFxcbiAxNTU6XFx0XFx0Ym9vbFxcbiAxNTY6XFx0XFxuIDE1NzpcXHRjb25maWcgUENJX0lPVlxcbiAxNTg6XFx0XFx0Ym9vbCBcXFwiUENJIElPViBzdXBwb3J0XFxcIlxcbiAxNTk6XFx0XFx0c2VsZWN0IFBDSV9BVFNcXG4gMTYwOlxcdFxcdGhlbHBcXG4gMTYxOlxcdFxcdCAgSS9PIFZpcnR1YWxpemF0aW9uIGlzIGEgUENJIGZlYXR1cmUgc3VwcG9ydGVkIGJ5IHNvbWUgZGV2aWNlc1xcbiAxNjI6XFx0XFx0ICB3aGljaCBhbGxvd3MgdGhlbSB0byBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIHdoaWNoIHNoYXJlIHRoZWlyXFxuIDE2MzpcXHRcXHQgIHBoeXNpY2FsIHJlc291cmNlcy5cXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNjY6XFx0XFxuIDE2NzpcXHRjb25maWcgUENJX05QRU1cXG4gMTY4OlxcdFxcdGJvb2wgXFxcIk5hdGl2ZSBQQ0llIEVuY2xvc3VyZSBNYW5hZ2VtZW50XFxcIlxcbiAxNjk6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MTUuNzkyMjg4MDU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDQ0MDc0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqU1ItSU9WIGFuZCBJdHMgUmVxdWlyZW1lbnRzKipcblxuQWxyaWdodCwgdGhlIGNvcmUgaXNzdWUgaXMgU1ItSU9WIHN1cHBvcnQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgdXAgYW5kIHJ1bm5pbmcsIGBQQ0lfSU9WYCBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwuIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBoYXBwZW5zIGlmIGBwY2lfbnVtX3ZmYCBpcyBkZWZpbmVkIHdpdGhvdXQgYFBDSV9JT1ZgLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjE5LjE5NjY5ODU1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMjM0NTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfbnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY0MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmM9NzI0PXN0YXRpYyBpbnQgcHNlcmllc19jYWxsX2FsbG93X3VuZnJlZXplKHN0cnVjdCBlZWhfZGV2ICplZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmMtNzMyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jOjczMzpcXHRpZiAocGNpX251bV92ZihlZGV2LVxcdTAwM2VwaHlzZm4gPyBlZGV2LVxcdTAwM2VwaHlzZm4gOiBlZGV2LVxcdTAwM2VwZGV2KSkge1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jLTczNC1cXHRcXHRpZiAoZWRldi1cXHUwMDNlcGRldi1cXHUwMDNlaXNfcGh5c2ZuKSB7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9wc2VyaWVzLmM6NzM1OlxcdFxcdFxcdGN1cl92ZnMgPSBwY2lfbnVtX3ZmKGVkZXYtXFx1MDAzZXBkZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfcHNlcmllcy5jLTczNi1cXHRcXHRcXHRwZG4gPSBlZWhfZGV2X3RvX3BkbihlZGV2KTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWU0X3NyaW92LmM9NDI9aW50IGFpZTRfc3Jpb3Zfc3RvcChzdHJ1Y3QgYW1keGRuYV9kZXZfaGRsICpuZGV2KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTRfc3Jpb3YuYy00Ny1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jOjQ4OlxcdGlmICghcGNpX251bV92ZihwZGV2KSlcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllNF9zcmlvdi5jLTQ5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2F2aXVtL25pdHJveC9uaXRyb3hfc3Jpb3YuYz0xNTM9c3RhdGljIGludCBuaXRyb3hfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2Nhdml1bS9uaXRyb3gvbml0cm94X3NyaW92LmMtMTYyLVxcbmRyaXZlcnMvY3J5cHRvL2Nhdml1bS9uaXRyb3gvbml0cm94X3NyaW92LmM6MTYzOlxcdGlmIChwY2lfbnVtX3ZmKHBkZXYpID09IG51bV92ZnMpXFxuZHJpdmVycy9jcnlwdG8vY2F2aXVtL25pdHJveC9uaXRyb3hfc3Jpb3YuYy0xNjQtXFx0XFx0cmV0dXJuIG51bV92ZnM7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vcW0uYz00Mjg2PWludCBoaXNpX3FtX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1heF92ZnMpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vcW0uYy00Mjk1LVxcdHRvdGFsX3ZmcyA9IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMocGRldik7XFxuZHJpdmVycy9jcnlwdG8vaGlzaWxpY29uL3FtLmM6NDI5NjpcXHRwcmVfZXhpc3RpbmdfdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL2NyeXB0by9oaXNpbGljb24vcW0uYy00Mjk3LVxcdGlmIChwcmVfZXhpc3RpbmdfdmZzKSB7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz0xMz12b2lkIGFkZl9wZjJ2Zl9ub3RpZnlfcmVzdGFydGluZyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtMTYtXFx0c3RydWN0IHBmdmZfbWVzc2FnZSBtc2cgPSB7IC50eXBlID0gQURGX1BGMlZGX01TR1RZUEVfUkVTVEFSVElORyB9O1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjE3OlxcdGludCBpLCBudW1fdmZzID0gcGNpX251bV92ZihhY2NlbF90b19wY2lfZGV2KGFjY2VsX2RldikpO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTE4LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM9MzU9dm9pZCBhZGZfcGYydmZfd2FpdF9mb3JfcmVzdGFydGluZ19jb21wbGV0ZShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTM2LXtcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYzozNzpcXHRpbnQgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYWNjZWxfdG9fcGNpX2RldihhY2NlbF9kZXYpKTtcXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYy0zOC1cXHRpbnQgaSwgcmV0cmllcyA9IEFERl9WRl9TSFVURE9XTl9SRVRSWTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jPTU3PXZvaWQgYWRmX3BmMnZmX25vdGlmeV9yZXN0YXJ0ZWQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTU5LVxcdHN0cnVjdCBwZnZmX21lc3NhZ2UgbXNnID0geyAudHlwZSA9IEFERl9QRjJWRl9NU0dUWVBFX1JFU1RBUlRFRCB9O1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jOjYwOlxcdGludCBpLCBudW1fdmZzID0gcGNpX251bV92ZihhY2NlbF90b19wY2lfZGV2KGFjY2VsX2RldikpO1xcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTYxLVxcdHN0cnVjdCBhZGZfYWNjZWxfdmZfaW5mbyAqdmY7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcGZ2Zl9wZl9tc2cuYz03Mj12b2lkIGFkZl9wZjJ2Zl9ub3RpZnlfZmF0YWxfZXJyb3Ioc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9wZnZmX3BmX21zZy5jLTc0LVxcdHN0cnVjdCBwZnZmX21lc3NhZ2UgbXNnID0geyAudHlwZSA9IEFERl9QRjJWRl9NU0dUWVBFX0ZBVEFMX0VSUk9SIH07XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmM6NzU6XFx0aW50IGksIG51bV92ZnMgPSBwY2lfbnVtX3ZmKGFjY2VsX3RvX3BjaV9kZXYoYWNjZWxfZGV2KSk7XFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3BmdmZfcGZfbXNnLmMtNzYtXFx0c3RydWN0IGFkZl9hY2NlbF92Zl9pbmZvICp2ZjtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9zcmlvdi5jPTY2PXN0YXRpYyBpbnQgYWRmX2VuYWJsZV9zcmlvdihzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmMtOTQtXFx0LyogRG8gbm90IGVuYWJsZSBTUi1JT1YgaWYgYWxyZWFkeSBlbmFibGVkICovXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmM6OTU6XFx0aWYgKHBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3NyaW92LmMtOTYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYz02NDg9c3RhdGljIGludCBjcHRwZl9zcmlvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl9tYWluLmMtNjUwLVxcdHN0cnVjdCBvdHgyX2NwdHBmX2RldiAqY3B0cGYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl9tYWluLmM6NjUxOlxcdGludCBudW1fdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX21haW4uYy02NTItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTM2Mz1zdGF0aWMgaW50IHhlX3BjaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTEzNzUtXFx0eGVfYXNzZXJ0KHhlLCAhSVNfU1JJT1ZfVkYoeGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTM3NjpcXHR4ZV9hc3NlcnQoeGUsICFwY2lfbnVtX3ZmKHBkZXYpKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTM3Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0xNzY9c3RhdGljIGludCBwZl9kaXNhYmxlX3ZmcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0xNzktXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jOjE4MDpcXHR1MTYgbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTE4MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0yMjE9aW50IHhlX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTIzMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM6MjM0OlxcdGlmIChudW1fdmZzIFxcdTAwMjZcXHUwMDI2IHBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTIzNS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmLmM9Mjc0PXZvaWQgeGVfc3Jpb3ZfcGZfcHJpbnRfdmZzX3N1bW1hcnkoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCBkcm1fcHJpbnRlciAqcClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jLTI4MS1cXHRkcm1fcHJpbnRmKHAsIFxcXCJzdXBwb3J0ZWQ6ICV1XFxcXG5cXFwiLCB4ZS1cXHUwMDNlc3Jpb3YucGYuZHJpdmVyX21heF92ZnMpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZi5jOjI4MjpcXHRkcm1fcHJpbnRmKHAsIFxcXCJlbmFibGVkOiAldVxcXFxuXFxcIiwgcGNpX251bV92ZihwZGV2KSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3NyaW92X3BmLmMtMjgzLX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zcmlvdl9wZl9oZWxwZXJzLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGVfc3Jpb3ZfcGZfbnVtX3Zmcyhjb25zdCBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oLTQ4LXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oOjQ5OlxcdHJldHVybiBwY2lfbnVtX3ZmKHRvX3BjaV9kZXYoeGUtXFx1MDAzZWRybS5kZXYpKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3Jpb3ZfcGZfaGVscGVycy5oLTUwLX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfYm9uZC5jPTQ4ND1zdGF0aWMgYm9vbCBpc19kZXZfYm9uZF9zdXBwb3J0ZWQoc3RydWN0IGhuc19yb2NlX2JvbmRfZ3JvdXAgKmJvbmRfZ3JwLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9ib25kLmMtNTAyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfYm9uZC5jOjUwMzpcXHRpZiAoaHJfZGV2LVxcdTAwM2Vpc192ZiB8fCBwY2lfbnVtX3ZmKGhyX2Rldi1cXHUwMDNlcGNpX2RldikgXFx1MDAzZSAwKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9ib25kLmMtNTA0LVxcdFxcdHJldCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmM9MjY1PXN0YXRpYyBpcnFyZXR1cm5fdCBkcGlfbWJveF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTI3Mi1cXHRpZiAocmVnKSB7XFxuZHJpdmVycy9taXNjL21ydmxfY24xMGtfZHBpLmM6MjczOlxcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIHBjaV9udW1fdmYoZHBpLVxcdTAwM2VwZGV2KTsgdmYrKykge1xcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTI3NC1cXHRcXHRcXHRpZiAocmVnIFxcdTAwMjYgQklUX1VMTCh2ZikpXFxuLS1cXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYz0zMTU9c3RhdGljIHZvaWQgZHBpX3BmdmZfbWJveF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTMzMS1cXHR2ZmlkID0gRFBJX01CT1hfVkZJRChtc2cud29yZF9sKTtcXG5kcml2ZXJzL21pc2MvbXJ2bF9jbjEwa19kcGkuYzozMzI6XFx0aWYgKHZmaWQgXFx1MDAzZT0gcGNpX251bV92ZihkcGktXFx1MDAzZXBkZXYpKVxcbmRyaXZlcnMvbWlzYy9tcnZsX2NuMTBrX2RwaS5jLTMzMy1cXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYz00ODgxPWludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDg4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYzo0ODg1OlxcdGlmIChwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ4ODYtXFx0XFx0RFAoQk5YMlhfTVNHX0lPViwgXFxcIlZGcyBhcmUgZW5hYmxlZCwgY2FuIG5vdCBjaGFuZ2UgTVRVXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jPTQ5MTA9bmV0ZGV2X2ZlYXR1cmVzX3QgYm54MnhfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYy00OTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jOjQ5MTU6XFx0aWYgKHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDkxNi1cXHRcXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gZGV2LVxcdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmM9NDk0ND1pbnQgYm54Mnhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfY21uLmMtNDk1MS1cXHQvKiBWRnMgb3Igbm9uIFNSSU9WIFBGcyBzaG91bGQgYmUgYWJsZSB0byBjaGFuZ2UgbG9vcGJhY2sgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jOjQ5NTI6XFx0aWYgKCFwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jLTQ5NTMtXFx0XFx0aWYgKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9MT09QQkFDSykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTE5NDI9c3RhdGljIGludCBibngyeF9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMTk1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmM6MTk1MzpcXHRpZiAocGNpX251bV92ZihicC1cXHUwMDNlcGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMTk1NC1cXHRcXHREUChCTlgyWF9NU0dfSU9WLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTMwMDc9c3RhdGljIHZvaWQgYm54Mnhfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMzAxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmM6MzAxNDpcXHRpZiAocGNpX251bV92ZihicC1cXHUwMDNlcGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9ldGh0b29sLmMtMzAxNS1cXHRcXHREUChCTlgyWF9NU0dfSU9WLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTM1Njk9c3RhdGljIGludCBibngyeF9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzozNTc5OlxcdGlmIChwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNTgwLVxcdFxcdERQKEJOWDJYX01TR19JT1YsIFxcXCJWRnMgYXJlIGVuYWJsZWQsIGNhbiBub3Qgc2V0IGNoYW5uZWxzXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTEyNjE1PXN0YXRpYyBpbnQgYm54dF9od3JtX3NodXRkb3duX2xpbmsoc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTI2MjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTI2MjM6XFx0aWYgKHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTI2MjQtXFx0ICAgICEoYnAtXFx1MDAzZXBoeV9mbGFncyBcXHUwMDI2IEJOWFRfUEhZX0ZMX0ZXX01BTkFHRURfTEtETikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYz05NzQ9dm9pZCBfX2JueHRfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMtOTc1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYzo5NzY6XFx0dTE2IG51bV92ZnMgPSBwY2lfbnVtX3ZmKGJwLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYy05NzctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYz0xMDAwPXN0YXRpYyB2b2lkIGJueHRfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMtMTAwMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmM6MTAwMjpcXHRpZiAoIXBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9zcmlvdi5jLTEwMDMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTI2Mj12b2lkIGJueHRfdmZfcmVwc19jbG9zZShzdHJ1Y3QgYm54dCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzoyNzA6XFx0bnVtX3ZmcyA9IHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0yNzEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV92ZnM7IGkrKykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTI4Mj12b2lkIGJueHRfdmZfcmVwc19vcGVuKHN0cnVjdCBibnh0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0yODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjI4OTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0yOTAtXFx0XFx0LyogT3BlbiB0aGUgVkYtUmVwIG9ubHkgaWYgaXQgaXMgYWxsb2NhdGVkIGluIHRoZSBGVyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jPTMxMT1zdGF0aWMgdm9pZCBfX2JueHRfdmZfcmVwc19kZXN0cm95KHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtMzEyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM6MzEzOlxcdHUxNiBudW1fdmZzID0gcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTMxNC1cXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz0zNzk9dm9pZCBibnh0X3ZmX3JlcHNfZnJlZShzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTM4MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jOjM4MTpcXHR1MTYgbnVtX3ZmcyA9IHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy0zODItXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmM9NDE2PWludCBibnh0X3ZmX3JlcHNfYWxsb2Moc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy00MTcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0MTg6XFx0dTE2ICpjZmFfY29kZV9tYXAgPSBicC1cXHUwMDNlY2ZhX2NvZGVfbWFwLCBudW1fdmZzID0gcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTQxOS1cXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz00ODk9aW50IGJueHRfdmZfcmVwc19jcmVhdGUoc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYy00OTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo0OTE6XFx0dTE2ICpjZmFfY29kZV9tYXAgPSBOVUxMLCBudW1fdmZzID0gcGNpX251bV92ZihicC1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3Zmci5jLTQ5Mi1cXHRzdHJ1Y3QgYm54dF92Zl9yZXAgKnZmX3JlcDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYz01NjE9aW50IGJueHRfZGxfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTE2IG1vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNTg1LVxcdFxcdC8qIENyZWF0ZSByZXByZXNlbnRvcnMgZm9yIGV4aXN0aW5nIFZGcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF92ZnIuYzo1ODY6XFx0XFx0aWYgKHBjaV9udW1fdmYoYnAtXFx1MDAzZXBkZXYpIFxcdTAwM2UgMClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdmZyLmMtNTg3LVxcdFxcdFxcdHJldCA9IGJueHRfdmZfcmVwc19jcmVhdGUoYnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmM9NjIzNT1zdGF0aWMgaW50IGN4Z2I0X2lvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNjIzOC1cXHRpbnQgZXJyID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYzo2MjM5OlxcdGludCBjdXJyZW50X3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9tYWluLmMtNjI0MC1cXHR1MzIgcGNpZV9mdztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDIyMT1zdGF0aWMgaW50IGJlX3ZmX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00MjI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDIyODpcXHRvbGRfdmZzID0gcGNpX251bV92ZihhZGFwdGVyLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQyMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTQ0NDE9c3RhdGljIGludCBiZV9nZXRfc3Jpb3ZfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00NDYwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6NDQ2MTpcXHRvbGRfdmZzID0gcGNpX251bV92ZihhZGFwdGVyLVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ0NjItXFx0aWYgKG9sZF92ZnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9NDQ4MD1zdGF0aWMgdm9pZCBiZV9hbGxvY19zcmlvdl9yZXMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00NDgxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjQ0ODI6XFx0aW50IG9sZF92ZnMgPSBwY2lfbnVtX3ZmKGFkYXB0ZXItXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtNDQ4My1cXHRzdHJ1Y3QgIGJlX3Jlc291cmNlcyB2ZnRfcmVzID0gezB9O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz00Nzc5PXN0YXRpYyBib29sIGJlX3Jlc2V0X3JlcXVpcmVkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy00NzgzLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jOjQ3ODQ6XFx0XFx0cmV0dXJuIHBjaV9udW1fdmYoYWRhcHRlci1cXHUwMDNlcGRldikgPT0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTQ3ODUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYz02MDIyPXN0YXRpYyBpbnQgYmVfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTYwNDYtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzo2MDQ3OlxcdGlmIChza3loYXdrX2NoaXAoYWRhcHRlcikgXFx1MDAyNlxcdTAwMjYgIXBjaV9udW1fdmYocGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTYwNDgtXFx0XFx0YmVfY2FsY3VsYXRlX3ZmX3JlcyhhZGFwdGVyLCBhZGFwdGVyLVxcdTAwM2VudW1fdmZzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzIxMj1zdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMjI3LVxcdH0gZWxzZSBpZiAoIXBjaV92ZnNfYXNzaWduZWQocGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMjI4OlxcdFxcdGludCBudW1fdmZzX3ByZSA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzIyOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM9MjA5MD1zdGF0aWMgaW50IGhjbGdlX2RiZ19kdW1wX2ZkX2NvdW50ZXIoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yMDkyLVxcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBoY2xnZV9zZXFfZmlsZV90b19oZGV2KHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjA5MzpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTIwOTQtXFx0c3RydWN0IGhjbGdlX2ZkX2FkX2NudF9yZWFkX2NtZCAqcmVxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYz0yNjE3PXN0YXRpYyBpbnQgaGNsZ2VfZGJnX2R1bXBfdW12X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYy0yNjE5LVxcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSBoY2xnZV9zZXFfZmlsZV90b19oZGV2KHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjYyMDpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmMtMjYyMS1cXHRzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2RlYnVnZnMuYz0yNzgwPXN0YXRpYyBpbnQgaGNsZ2VfZGJnX2R1bXBfdmxhbl9maWx0ZXJfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6Mjc4MzpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI3ODQtXFx0dTggaSwgdmxhbl9mZSwgYnlwYXNzLCBpbmdyZXNzLCBlZ3Jlc3M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jPTI4MjU9c3RhdGljIGludCBoY2xnZV9kYmdfZHVtcF92bGFuX29mZmxvYWRfY29uZmlnKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI4Mjcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9kZWJ1Z2ZzLmM6MjgyODpcXHR1OCBmdW5jX251bSA9IHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikgKyAxOyAvKiBwZiBhbmQgZW5hYmxlZCB2ZiBudW0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZGVidWdmcy5jLTI4MjktXFx0c3RydWN0IGhjbGdlX2RiZ192bGFuX2NmZyB2bGFuX2NmZztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9Mjk5ND1zdGF0aWMgdm9pZCBoY2xnZV9wdXNoX2xpbmtfc3RhdHVzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTI5OTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMDAwOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwY2lfbnVtX3ZmKGhkZXYtXFx1MDAzZXBkZXYpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMwMDEtXFx0XFx0dnBvcnQgPSBcXHUwMDI2aGRldi1cXHUwMDNldnBvcnRbaSArIEhDTEdFX1ZGX1ZQT1JUX1NUQVJUX05VTV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTM0NTI9c3RydWN0IGhjbGdlX3Zwb3J0ICpoY2xnZV9nZXRfdmZfdnBvcnQoc3RydWN0IGhjbGdlX2RldiAqaGRldiwgaW50IHZmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ1My17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozNDU0OlxcdGlmICghcGNpX251bV92ZihoZGV2LVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ1NS1cXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTM0NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozNDYwOlxcdGlmICh2ZiBcXHUwMDNjIDAgfHwgdmYgXFx1MDAzZT0gcGNpX251bV92ZihoZGV2LVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2MS1cXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zNDYyLVxcdFxcdFxcdFxcXCJ2ZiBpZCglZCkgaXMgb3V0IG9mIHJhbmdlKDAgXFx1MDAzYz0gdmZpZCBcXHUwMDNjICVkKVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjM0NjM6XFx0XFx0XFx0dmYsIHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMzQ2NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9OTkyMz1zdGF0aWMgaW50IGhjbGdlX3Jlc3VtZV92Zl9yYXRlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTk5MzAtXFx0LyogcmVzdW1lIHRoZSB2ZiBtYXhfdHhfcmF0ZSBhZnRlciByZXNldCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6OTkzMTpcXHRmb3IgKHZmID0gMDsgdmYgXFx1MDAzYyBwY2lfbnVtX3ZmKGhkZXYtXFx1MDAzZXBkZXYpOyB2ZisrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy05OTMyLVxcdFxcdHZwb3J0ID0gaGNsZ2VfZ2V0X3ZmX3Zwb3J0KGhkZXYsIHZmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV90bS5jPTE3MjM9aW50IGhjbGdlX3RtX2dldF9xc2V0X251bShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LCB1MTYgKnFzZXRfbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3RtLmMtMTczMC1cXHRcXHQvKiBFYWNoIFBGIGhhcyA4IHFzZXRzIGFuZCBlYWNoIFZGIGhhcyAxIHFzZXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfdG0uYzoxNzMxOlxcdFxcdCpxc2V0X251bSA9IEhDTEdFX1RNX1BGX01BWF9RU0VUX05VTSArIHBjaV9udW1fdmYoaGRldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX3RtLmMtMTczMi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jPTQ4MD12b2lkIGZtMTBrX2lvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jLTQ4MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmM6NDgyOlxcdGlmIChwY2lfbnVtX3ZmKHBkZXYpIFxcdTAwMjZcXHUwMDI2IHBjaV92ZnNfYXNzaWduZWQocGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmMtNDgzLVxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2lvdi5jPTQ5MT1pbnQgZm0xMGtfaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfaW92LmMtNDkyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYzo0OTM6XFx0aW50IGN1cnJlbnRfdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19pb3YuYy00OTQtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYz0yNDYzPXN0YXRpYyB2b2lkIGZtMTBrX2lvX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDY1LVxcdC8qIHdhcm4gaW5jYXNlIHdlIGhhdmUgYW55IGFjdGl2ZSBWRiBkZXZpY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGNpLmM6MjQ2NjpcXHRpZiAocGNpX251bV92ZihwZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wY2kuYy0yNDY3LVxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTE1NTI4PXN0YXRpYyBpbnQgaTQwZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTU4NzktXFx0ICAgICF0ZXN0X2JpdChfX0k0MEVfQkFEX0VFUFJPTSwgcGYtXFx1MDAzZXN0YXRlKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTU4ODA6XFx0XFx0aWYgKHBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTg4MS1cXHRcXHRcXHRzZXRfYml0KEk0MEVfRkxBR19WRUJfTU9ERV9FTkEsIHBmLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTU5NjQ6XFx0XFx0aWYgKHBjaV9udW1fdmYocGRldikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE1OTY1LVxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2Ni1cXHRcXHRcXHRcXHQgXFxcIkFjdGl2ZSBWRnMgZm91bmQsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxNTk2NzpcXHRcXHRcXHRlcnIgPSBpNDBlX2FsbG9jX3ZmcyhwZiwgcGNpX251bV92ZihwZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNTk2OC1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM9MTU4PXZvaWQgaTQwZV9yZXN0b3JlX2FsbF92ZnNfbXNpX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE2NzpcXHRpZiAoIXBjaV9udW1fdmYocGRldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMtMTY4LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jPTE4Mjk9aW50IGk0MGVfYWxsb2NfdmZzKHN0cnVjdCBpNDBlX3BmICpwZiwgdTE2IG51bV9hbGxvY192ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYy0xODM3LVxcdC8qIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSBqdXN0IGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciBleHRhbnQgVkZzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmM6MTgzODpcXHRpZiAocGNpX251bV92ZihwZi1cXHUwMDNlcGRldikgIT0gbnVtX2FsbG9jX3Zmcykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4MzktXFx0XFx0cmV0ID0gcGNpX2VuYWJsZV9zcmlvdihwZi1cXHUwMDNlcGRldiwgbnVtX2FsbG9jX3Zmcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYz0xODkxPXN0YXRpYyBpbnQgaTQwZV9wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4OTQtXFx0c3RydWN0IGk0MGVfcGYgKnBmID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jOjE4OTU6XFx0aW50IHByZV9leGlzdGluZ192ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jLTE4OTYtXFx0aW50IGVyciA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYz0zNzU0PXN0YXRpYyBpbnQgaWdiX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMsIGJvb2wgcmVpbml0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMtMzc1Ny1cXHRzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjM3NTg6XFx0aW50IG9sZF92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jLTM3NTktXFx0c3RydWN0IHZmX21hY19maWx0ZXIgKm1hY19saXN0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYz0xNTQ9dm9pZCBpeGdiZV9lbmFibGVfc3Jpb3Yoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBtYXhfdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0xNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzoxNTk6XFx0cHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoYWRhcHRlci1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0xNjAtXFx0aWYgKCFwcmVfZXhpc3RpbmdfdmZzIFxcdTAwMjZcXHUwMDI2ICFtYXhfdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYz0yNzQ9c3RhdGljIGludCBpeGdiZV9wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0yNzctXFx0c3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jOjI3ODpcXHRpbnQgcHJlX2V4aXN0aW5nX3ZmcyA9IHBjaV9udW1fdmYoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jLTI3OS1cXHRpbnQgZXJyID0gMCwgbnVtX3J4X3Bvb2xzLCBpLCBsaW1pdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmM9MzM3PXN0YXRpYyBpbnQgaXhnYmVfcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMzQyLVxcdHUzMiBjdXJyZW50X2ZsYWdzID0gYWRhcHRlci1cXHUwMDNlZmxhZ3M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYzozNDM6XFx0aW50IHByZXZfbnVtX3ZmID0gcGNpX251bV92ZihkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMtMzQ0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0zNTAtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgKGN1cnJlbnRfZmxhZ3MgIT0gYWRhcHRlci1cXHUwMDNlZmxhZ3MgfHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jOjM1MTpcXHRcXHQgICAgIHByZXZfbnVtX3ZmICE9IHBjaV9udW1fdmYoZGV2KSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYy0zNTItXFx0XFx0aXhnYmVfc3Jpb3ZfcmVpbml0KGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYz0xMTg4PXN0YXRpYyBpbnQgb3R4Ml9hZGRfZmxvd19tc2coc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgb3R4Ml9mbG93ICpmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYy0xMjc0LVxcdFxcdHZmID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmdfdmYocmluZ19jb29raWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmM6MTI3NTpcXHRcXHRpZiAodmYgXFx1MDAzZSBwY2lfbnVtX3ZmKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYy0xMjc2LVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveC5sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9OTM1PWludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9jZ3hfbGlua19ldmVudChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy05NDQtXFx0Lyogbm90aWZ5IFZGcyBhYm91dCBsaW5rIGV2ZW50ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzo5NDU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBjaV9udW1fdmYocGYtXFx1MDAzZXBkZXYpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTk0Ni1cXHRcXHRzdHJ1Y3Qgb3R4Ml92Zl9jb25maWcgKmNvbmZpZyA9IFxcdTAwMjZwZi1cXHUwMDNldmZfY29uZmlnc1tpXTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTAwNT1zdGF0aWMgdm9pZCBvdHgyX3BmYWZfbWJveF91cF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTAzMy1cXHQvKiBGb3J3YXJkIHRvIFZGIGlmZiBWRnMgYXJlIHJlYWxseSBwcmVzZW50ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxMDM0OlxcdGlmIChkZXZpZCBcXHUwMDI2XFx1MDAyNiBwY2lfbnVtX3ZmKHBmLVxcdTAwM2VwZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTAzNS1cXHRcXHRvdHgyX2ZvcndhcmRfdmZfbWJveF9tc2dzKHBmLCBcXHUwMDI2cGYtXFx1MDAzZW1ib3gubWJveF91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTgyNz1zdGF0aWMgYm9vbCBvdHgyX3Byb21pc2NfdXNlX21jZV9saXN0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTgzNS1cXHQvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHRydXN0ZWQgVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYgbmV0ZGV2ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxODM2OlxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIHBjaV9udW1fdmYocGZ2Zi1cXHUwMDNlcGRldik7IHZmKyspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xODM3LVxcdFxcdGlmIChwZnZmLVxcdTAwM2V2Zl9jb25maWdzW3ZmXS50cnVzdGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yNzQyPXN0YXRpYyBpbnQgb3R4Ml9zZXRfdmZfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHUxNiB2bGFuLCB1OCBxb3MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI3NTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyNzUxOlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc1Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9Mjc2Nz1zdGF0aWMgaW50IG90eDJfZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI3NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyNzc3OlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjc3OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MjkyND1zdGF0aWMgaW50IG90eDJfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI5MzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoyOTMxOlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKHBkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjkzMi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzQ1OT1zdGF0aWMgaW50IG90eDJfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzQ2Mi1cXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM0NjM6XFx0aW50IG51bXZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNDY0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmM9MzM4MD1zdGF0aWMgaW50IG1seDRfbG9hZF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBwY2lfZGV2X2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDQ5LVxcdFxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgPSBNTFg0X0ZMQUdfTUFTVEVSO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jOjM0NTA6XFx0XFx0XFx0ZXhpc3RpbmdfdmZzID0gcGNpX251bV92ZihwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYy0zNDUxLVxcdFxcdFxcdGlmIChleGlzdGluZ192ZnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jPTE4OT1zdGF0aWMgaW50IG1seDVfZGV2bGlua19yZWxvYWRfZG93bihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgYm9vbCBuZXRuc19jaGFuZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTIyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jOjIyMTpcXHRpZiAobWx4NV9jb3JlX2lzX3BmKGRldikgXFx1MDAyNlxcdTAwMjYgcGNpX251bV92ZihwZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGV2bGluay5jLTIyMi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwicmVsb2FkIHdoaWxlIFZGcyBhcmUgcHJlc2VudCBpcyB1bmZhdm9yYWJsZVxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYz0xMTUzPW1seDVfZXN3X2hvc3RfcGZfZnJvbV9uZXRfZnVuY19wYXJhbXMoY29uc3QgdTggKmVudHJ5LCBpbnQgbnVtX2VudHJpZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5jLTExNzAtXFx0XFx0XFx0Lm51bV9vZl92ZnMgPSBNTFg1X0dFVChuZXR3b3JrX2Z1bmN0aW9uX3BhcmFtcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5jOjExNzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudHJ5LCBwY2lfbnVtX3ZmcyksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guYy0xMTcyLVxcdFxcdFxcdC50b3RhbF92ZnMgPSBNTFg1X0dFVChuZXR3b3JrX2Z1bmN0aW9uX3BhcmFtcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaD00MDc9c3RhdGljIGlubGluZSBib29sIG1seDVfc3Jpb3ZfaXNfZW5hYmxlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaC00MDgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tbHg1X2NvcmUuaDo0MDk6XFx0cmV0dXJuIHBjaV9udW1fdmYoZGV2LVxcdTAwM2VwZGV2KSA/IHRydWUgOiBmYWxzZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWx4NV9jb3JlLmgtNDEwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIwMz12b2lkIG1seDVfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBudW1fdmZfY2hhbmdlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjA2LVxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjA3OlxcdGludCBudW1fdmZzID0gcGNpX251bV92ZihkZXYtXFx1MDAzZXBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTIwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jPTIzMz1pbnQgbWx4NV9jb3JlX3NyaW92X3NldF9tc2l4X3ZlY19jb3VudChzdHJ1Y3QgcGNpX2RldiAqdmYsIGludCBtc2l4X3ZlY19jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI0Ni1cXHRcXHRtc2l4X3ZlY19jb3VudCA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjQ3OlxcdFxcdFxcdG1seDVfZ2V0X2RlZmF1bHRfbXNpeF92ZWNfY291bnQoZGV2LCBwY2lfbnVtX3ZmKHBmKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM9MjU3PWludCBtbHg1X3NyaW92X2F0dGFjaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI1OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjU5OlxcdGlmICghbWx4NV9jb3JlX2lzX3BmKGRldikgfHwgIXBjaV9udW1fdmYoZGV2LVxcdTAwM2VwZGV2KSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0yNjAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYy0yNjItXFx0LyogSWYgc3Jpb3YgVkZzIGV4aXN0IGluIFBDSSBsZXZlbCwgZW5hYmxlIHRoZW0gaW4gZGV2aWNlIGxldmVsICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmM6MjYzOlxcdHJldHVybiBtbHg1X2RldmljZV9lbmFibGVfc3Jpb3YoZGV2LCBwY2lfbnVtX3ZmKGRldi1cXHUwMDNlcGRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI2NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYz0yNjY9dm9pZCBtbHg1X3NyaW92X2RldGFjaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMjcwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjI3MTpcXHRtbHg1X2RldmljZV9kaXNhYmxlX3NyaW92KGRldiwgcGNpX251bV92ZihkZXYtXFx1MDAzZXBkZXYpLCBmYWxzZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jLTI3Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3Jpb3YuYz0yOTg9aW50IG1seDVfc3Jpb3ZfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMzA4LVxcdHNyaW92LVxcdTAwM2VtYXhfdmZzID0gbWx4NV9nZXRfbWF4X3ZmcyhkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zcmlvdi5jOjMwOTpcXHRzcmlvdi1cXHUwMDNlbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3NyaW92LmMtMzEwLVxcdHNyaW92LVxcdTAwM2VtYXhfZWNfdmZzID0gbWx4NV9jb3JlX2VjX3NyaW92X2VuYWJsZWQoZGV2KSA/IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMoZGV2LVxcdTAwM2VwZGV2KSA6IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9tYWluLmM9NzU3PXN0YXRpYyBpbnQgbmZwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX21haW4uYy04NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jOjg0ODpcXHRwZi1cXHUwMDNlbnVtX3ZmcyA9IHBjaV9udW1fdmYocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbWFpbi5jLTg0OS1cXHRpZiAocGYtXFx1MDAzZW51bV92ZnMgXFx1MDAzZSBwZi1cXHUwMDNlbGltaXRfdmZzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM9MzA4PXN0YXRpYyBpbnQgaW9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmMtMzYwLVxcdGluaXRfcndzZW0oXFx1MDAyNmlvbmljLVxcdTAwM2V2Zl9vcF9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19idXNfcGNpLmM6MzYxOlxcdG51bV92ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2J1c19wY2kuYy0zNjItXFx0aWYgKG51bV92ZnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jPTIzNDg9c3RhdGljIGludCBpb25pY19nZXRfdmZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jOjIzNjA6XFx0aWYgKHZmIFxcdTAwM2U9IHBjaV9udW1fdmYoaW9uaWMtXFx1MDAzZXBkZXYpIHx8ICFpb25pYy1cXHUwMDNldmZzKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmMtMjM2MS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmM9MjM3OT1zdGF0aWMgaW50IGlvbmljX2dldF92Zl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYy0yMzkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX2xpZi5jOjIzOTI6XFx0aWYgKHZmIFxcdTAwM2U9IHBjaV9udW1fdmYoaW9uaWMtXFx1MDAzZXBkZXYpIHx8ICFpb25pYy1cXHUwMDNldmZzKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmMtMjM5My1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmM9MjQxNj1zdGF0aWMgaW50IGlvbmljX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1OCAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfbGlmLmMtMjQzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY19saWYuYzoyNDMxOlxcdGlmICh2ZiBcXHUwMDNlPSBwY2lfbnVtX3ZmKGlvbmljLVxcdTAwM2VwZGV2KSB8fCAhaW9uaWMtXFx1MDAzZXZmcykge1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDoyMC42OTkwNTA0MTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwOTQwNDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBEZWZpbml0aW9uIG9mIGBwY2lfbnVtX3ZmYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgcGNpX251bV92ZmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcywgYW5kIHNpbmNlIHRoaXMgc291bmRzIGxpa2UgYSBQQ0ktc3BlY2lmaWMgdmFsdWUsIGBpbmNsdWRlL2xpbnV4L3BjaS5oYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0J3MgZ2V0IHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscyBhYm91dCBgcGNpX251bV92ZmAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIG1hY3JvLCBhIHN0cnVjdHVyZSBtZW1iZXIsIG9yIHNvbWV0aGluZyB0aGF0IGNsYXJpZmllcyBpdHMgbWVhbmluZyBhbmQgdXNhZ2UgaW4gdGhlIGtlcm5lbCdzIFBDSSBzdWJzeXN0ZW0uIExldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzc1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MjQuNTA4NDU3MzQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE3NjUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfbnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGNpLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wY2kuaD0yNTY5PXZvaWQgcGNpX2lvdl9yZW1vdmVfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCk7XFxuaW5jbHVkZS9saW51eC9wY2kuaDoyNTcwOmludCBwY2lfbnVtX3ZmKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbmluY2x1ZGUvbGludXgvcGNpLmgtMjU3MS1pbnQgcGNpX3Zmc19hc3NpZ25lZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLmg9MjYyMD1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9XFxuaW5jbHVkZS9saW51eC9wY2kuaDoyNjIxOnN0YXRpYyBpbmxpbmUgaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvcGNpLmgtMjYyMi1zdGF0aWMgaW5saW5lIGludCBwY2lfdmZzX2Fzc2lnbmVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjI0LjU1MjYzODU5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUzMzk5MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHBjaV9udW1fdmZgIHNpdHVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcgY29kZS4gSXQgbG9va3MgbGlrZSBgcGNpX251bV92ZmAgaXMgcHJlc2VudCByZWdhcmRsZXNzLCBidXQgaXQnbGwgcmV0dXJuIHplcm8gaWYgYFBDSV9JT1ZgIGlzbid0IGVuYWJsZWQuIFRoYXQncyBubyBnb29kIGZvciBtZTsgSSBuZWVkIHRvIGFjdHVhbGx5ICpydW4qIHRoZSBjb2RlLCBub3QganVzdCBjaGVjayBpZiBpdCdzIHRoZXJlLiBTbywgYFBDSV9JT1ZgICpkZWZpbml0ZWx5KiBuZWVkcyB0byBiZSBpbiBteSBgRW5hYmxlQ29uZmlnc2AuXG5cblRoZW4gdGhlcmUncyBgVkZJT19QQ0lgLiBJIGtub3cgdGhhdCBJIG5lZWQgdGhlIFZGSU8gUENJIGRyaXZlciBmb3IgZXhwb3NpbmcgUENJIGRldmljZXMgdG8gVkZJTywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGlzIGluY2x1ZGVkLiBUaGVuIEkgcmVjYWxsZWQgdGhhdCBgVkZJT19QQ0lgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFZGSU9fUENJX0NPUkVgLiBHb29kIHRoaW5nIEkgY2hlY2tlZCEgQnV0LCBkb2VzIGBWRklPX1BDSWAgKmFsb25lKiBnZXQgbWUgd2hhdCBJIG5lZWQ/XG5cbkxvb2tzIGxpa2UgdGhhdOKAmXMgc3VmZmljaWVudC4gYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYCwgc28gdGhhdCBkZXBlbmRlbmN5IGlzIGFscmVhZHkgaGFuZGxlZC4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWdzPyBJIGtub3cgSSdsbCBuZWVkIGBQQ0lgLCBidXQgdGhhdCdzIGEgYmFzZSBjb25maWcgYW5kIGxpa2VseSBhbHJlYWR5IGVuYWJsZWQuIEkgYWxzbyBuZWVkIGBQQ0lfSU9WYCwgd2hpY2ggaXMgYWxyZWFkeSBvbiB0aGUgbGlzdC4gQnV0IEkgKmFsc28qIG5lZWQgYFZGSU9fUENJYCBmb3IgdGhlIHZpcnR1YWwgZnVuY3Rpb24gZHJpdmVyLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgYFZGSU9gLiBTZWVtcyBsaWtlIGBWRklPX1BDSWAgZGVwZW5kcyBvbiBgVkZJT2AuIExldCdzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBgZHJpdmVycy92ZmlvL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgxMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMC43MDYwNDA5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgVkZJT1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcXG4gICA2OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuICAgNzpcXHRcXHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXFxuICAgODpcXHRcXHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxcbiAgIDk6XFx0XFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxcbiAgMTI6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgVkZJT1xcbiAgMTc6XFx0Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIElPTU1VRkQgXFx1MDAyNlxcdTAwMjYgIVNQQVBSX1RDRV9JT01NVVxcbiAgMjA6XFx0XFx0ZGVmYXVsdCAhVkZJT19HUk9VUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMC43MDYxNDYyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA1Mjk5ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzZXR0aW5nIHVwIGBWRklPYCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYFZGSU9gLCBgVkZJT19QQ0lgLCBhbmQgYFBDSV9JT1ZgLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG15IHNldHVwLiBJIHdvbmRlcmVkIGFib3V0IGBWRklPX1BDSV9DT1JFYCwgYnV0IGFmdGVyIGNoZWNraW5nIHRoZSBLY29uZmlnIGluIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgLCBpdCdzIG5vdCBkaXJlY3RseSB2aXNpYmxlLiBJdCdzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBWRklPX1BDSWAsIHNvIEknbGwgYmUgZW5hYmxpbmcgdGhhdCBpbnN0ZWFkLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGZ1bmN0aW9uIGNhbGxzLiBJJ20gZm9jdXNpbmcgb24gYHZmaW9fcGNpX2NvcmVfY2xvc2VfZGV2aWNlYCBhbmQgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBzcGVjaWZpY2FsbHkuIEhtbSwgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCBpcyBiZWluZyBjYWxsZWQgd2l0aCBgbnJfdmlydGZuID0gMGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuIFRpbWUgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCB0byBzZWUgaWYgaXQgbWlnaHQgYmUgYSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCBjb3VsZCBwcmVzZW50IGFuIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjM2LjMxMTQ1MDQ5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjgzODM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTIzNTY9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9hZXJfZXJyX2RldGVjdGVkKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzU3LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzNTg6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzU5LVxcdFxcdFxcdFxcdCAgaW50IG5yX3ZpcnRmbilcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTE3MT1leHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB2ZmlvX3BjaV9jb3JlX2Vycl9oYW5kbGVycztcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaDoxNzI6aW50IHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzMtXFx0XFx0XFx0XFx0ICBpbnQgbnJfdmlydGZuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MzguNTU0Mjk1NjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MTE2NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuIGV4cGVydDpcblxuKipEZWx2aW5nIGludG8gYHZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBob3cgaXQncyBjYWxsZWQ7IHdoYXQgc2V0cyB0aGUgc3RhZ2UgZm9yIHRoaXMgZnVuY3Rpb24/IEFyZSB3ZSBjb21pbmcgaW4gdGhyb3VnaCBkZXZpY2UgcHJvYmUsIHNvbWUgdXNlci1zcGFjZSByZXF1ZXN0LCBvciBzb21lIG90aGVyIHBhcnQgb2YgdGhlIHZmaW8vUENJIGluaXRpYWxpemF0aW9uIGxpZmVjeWNsZT8gSXQncyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzIGFuZCBjb25kaXRpb25hbCBicmFuY2hlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBhc3BlY3RzIG9mIGNvbmZpZ3VyaW5nIFNSLUlPVi4gRG9lcyBpdCBpbnZvbHZlIHNldHRpbmcgdXAgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKT8gQXJlIHRoZXJlIGNoZWNrcyBmb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgcGVybWlzc2lvbmluZz8gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGVzcGVjaWFsbHkgdGhlIFZGIEJBUnMgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMpLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWRiBkcml2ZXJzLlxuXG5BIGRlZXBlciB1bmRlcnN0YW5kaW5nIHdpbGwgaW52b2x2ZSBob3cgaXQgaGFuZGxlcyBhbnkgZXJyb3JzLiBJIG5lZWQgdG8ga25vdyB0aGUgZXJyb3IgY29kZXMgaXQgcmV0dXJucyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgcmV0cmllcyBvciBmYWxsYmFjayBtZWNoYW5pc21zPyBEb2VzIGl0IGNsZWFuIHVwIHBhcnRpYWxseSBjb25maWd1cmVkIHN0YXRlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBQcm9wZXIgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsIGZvciByZWxpYWJsZSBvcGVyYXRpb24uXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMuIEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gdGhlIGhvc3QgYW5kIHBvdGVudGlhbGx5IHRoZSBndWVzdCwgdGhlIGxvY2tpbmcgYXJvdW5kIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBpcyBjcnVjaWFsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHByZXZlbnQgY29uZmxpY3RzLiBBcmUgdGhleSBmaW5lLWdyYWluZWQgZW5vdWdoLCBvciBjb3VsZCB0aGV5IGxlYWQgdG8gY29udGVudGlvbj9cblxuVGhlIGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBTUi1JT1YsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgVkYgZHJpdmVycywgYW5kIHdoYXQgaXQgZG9lcyB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHNlY3VyZSBzZXR1cC4gVWx0aW1hdGVseSwgdGhpcyB1bmRlcnN0YW5kaW5nIHNob3VsZCBhbGxvdyBtZSB0byBpZGVudGlmeSBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTQwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6NDMuOTI1NDY3MjU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzU4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzU4OlxcdGludCB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuMjM1OTpcXHRcXHRcXHRcXHRcXHQgIGludCBucl92aXJ0Zm4pXFxuMjM2MDpcXHR7XFxuMjM2MTpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuMjM2MjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yMzYzOlxcdFxcbjIzNjQ6XFx0XFx0ZGV2aWNlX2xvY2tfYXNzZXJ0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHRpZiAobnJfdmlydGZuKSB7XFxuMjM2NzpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2ZmlvX3BjaV9zcmlvdl9wZnNfbXV0ZXgpO1xcbjIzNjg6XFx0XFx0XFx0LypcXG4yMzY5OlxcdFxcdFxcdCAqIFRoZSB0aHJlYWQgdGhhdCBhZGRzIHRoZSB2ZGV2IHRvIHRoZSBsaXN0IGlzIHRoZSBvbmx5IHRocmVhZFxcbjIzNzA6XFx0XFx0XFx0ICogdGhhdCBnZXRzIHRvIGNhbGwgcGNpX2VuYWJsZV9zcmlvdigpIGFuZCB3ZSB3aWxsIG9ubHkgYWxsb3dcXG4yMzcxOlxcdFxcdFxcdCAqIGl0IHRvIGJlIGNhbGxlZCBvbmNlIHdpdGhvdXQgZ29pbmcgdGhyb3VnaFxcbjIzNzI6XFx0XFx0XFx0ICogcGNpX2Rpc2FibGVfc3Jpb3YoKVxcbjIzNzM6XFx0XFx0XFx0ICovXFxuMjM3NDpcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnZkZXYtXFx1MDAzZXNyaW92X3Bmc19pdGVtKSkge1xcbjIzNzU6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4yMzc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yMzc3OlxcdFxcdFxcdH1cXG4yMzc4OlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnZkZXYtXFx1MDAzZXNyaW92X3Bmc19pdGVtLCBcXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzKTtcXG4yMzc5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcXG4yMzgwOlxcdFxcbjIzODE6XFx0XFx0XFx0LypcXG4yMzgyOlxcdFxcdFxcdCAqIFRoZSBQRiBwb3dlciBzdGF0ZSBzaG91bGQgYWx3YXlzIGJlIGhpZ2hlciB0aGFuIHRoZSBWRiBwb3dlclxcbjIzODM6XFx0XFx0XFx0ICogc3RhdGUuIFRoZSBQRiBjYW4gYmUgaW4gbG93IHBvd2VyIHN0YXRlIGVpdGhlciB3aXRoIHJ1bnRpbWVcXG4yMzg0OlxcdFxcdFxcdCAqIHBvd2VyIG1hbmFnZW1lbnQgKHdoZW4gdGhlcmUgaXMgbm8gdXNlcikgb3IgUENJX1BNX0NUUkxcXG4yMzg1OlxcdFxcdFxcdCAqIHJlZ2lzdGVyIHdyaXRlIGJ5IHRoZSB1c2VyLiBJZiBQRiBpcyBpbiB0aGUgbG93IHBvd2VyIHN0YXRlLFxcbjIzODY6XFx0XFx0XFx0ICogdGhlbiBjaGFuZ2UgdGhlIHBvd2VyIHN0YXRlIHRvIEQwIGZpcnN0IGJlZm9yZSBlbmFibGluZ1xcbjIzODc6XFx0XFx0XFx0ICogU1ItSU9WLiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGFuZFxcbjIzODg6XFx0XFx0XFx0ICogdXNlcnNwYWNlIFBDSV9QTV9DVFJMIHdyaXRlIGNhbiByYWNlIGFnYWluc3QgdGhpcyBjb2RlIHBhdGgsXFxuMjM4OTpcXHRcXHRcXHQgKiBzbyBwcm90ZWN0IHRoZSBzYW1lIHdpdGggJ21lbW9yeV9sb2NrJy5cXG4yMzkwOlxcdFxcdFxcdCAqL1xcbjIzOTE6XFx0XFx0XFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yMzkyOlxcdFxcdFxcdGlmIChyZXQpXFxuMjM5MzpcXHRcXHRcXHRcXHRnb3RvIG91dF9kZWw7XFxuMjM5NDpcXHRcXG4yMzk1OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4yMzk2OlxcdFxcdFxcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xcbjIzOTc6XFx0XFx0XFx0dmRldi1cXHUwMDNlc3Jpb3ZfYWN0aXZlID0gdHJ1ZTtcXG4yMzk4OlxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuMjM5OTpcXHRcXHRcXHRyZXQgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG5yX3ZpcnRmbik7XFxuMjQwMDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjQwMTpcXHRcXHRcXHRcXHRwbV9ydW50aW1lX3B1dChcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yNDAyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2RlbDtcXG4yNDAzOlxcdFxcdFxcdH1cXG4yNDA0OlxcdFxcdFxcdHJldHVybiBucl92aXJ0Zm47XFxuMjQwNTpcXHRcXHR9XFxuMjQwNjpcXHRcXG4yNDA3OlxcdFxcdGlmIChwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjQzLjkyNTY2MTUyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMyNjE0NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMgYW5kIGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uIGFjaGlldmVzIGl0cyBwdXJwb3NlLiBUaGUgYmlnIHBpY3R1cmUgaXMgc2V0LCBzbyBsZXQncyBwYXJzZSB0aHJvdWdoIHRoZSBsaW5lcyBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkwNywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6NDcuNjU4Mjc4NzFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MDcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MDc6XFx0XFx0aWYgKHBjaV9udW1fdmYocGRldikpIHtcXG4yNDA4OlxcdFxcdFxcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xcbjI0MDk6XFx0XFx0XFx0cG1fcnVudGltZV9wdXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMjQxMDpcXHRcXHR9XFxuMjQxMTpcXHRcXG4yNDEyOlxcdG91dF9kZWw6XFxuMjQxMzpcXHRcXHQvKlxcbjI0MTQ6XFx0XFx0ICogQXZvaWQgdGFraW5nIHRoZSBtZW1vcnlfbG9jayBpbnRlbnRpb25hbGx5LiBBIHJhY2Ugd2l0aCBhIHBvd2VyXFxuMjQxNTpcXHRcXHQgKiBzdGF0ZSB0cmFuc2l0aW9uIHdvdWxkIGF0IG1vc3QgcmVzdWx0IGluIGFuIC1FQlVTWSwgbGVhdmluZyB0aGVcXG4yNDE2OlxcdFxcdCAqIGRldmljZSBpbiBQQ0lfRDAuXFxuMjQxNzpcXHRcXHQgKi9cXG4yNDE4OlxcdFxcdHZkZXYtXFx1MDAzZXNyaW92X2FjdGl2ZSA9IGZhbHNlO1xcbjI0MTk6XFx0XFxuMjQyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2ZmlvX3BjaV9zcmlvdl9wZnNfbXV0ZXgpO1xcbjI0MjE6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dmRldi1cXHUwMDNlc3Jpb3ZfcGZzX2l0ZW0pO1xcbjI0MjI6XFx0b3V0X3VubG9jazpcXG4yNDIzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmZpb19wY2lfc3Jpb3ZfcGZzX211dGV4KTtcXG4yNDI0OlxcdFxcdHJldHVybiByZXQ7XFxuMjQyNTpcXHR9XFxuMjQyNjpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSk7XFxuMjQyNzpcXHRcXG4yNDI4OlxcdGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgdmZpb19wY2lfY29yZV9lcnJfaGFuZGxlcnMgPSB7XFxuMjQyOTpcXHRcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB2ZmlvX3BjaV9jb3JlX2Flcl9lcnJfZGV0ZWN0ZWQsXFxuMjQzMDpcXHR9O1xcbjI0MzE6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9lcnJfaGFuZGxlcnMpO1xcbjI0MzI6XFx0XFxuMjQzMzpcXHRzdGF0aWMgYm9vbCB2ZmlvX2Rldl9pbl9ncm91cHMoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LFxcbjI0MzQ6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9ncm91cF9pbmZvICpncm91cHMpXFxuMjQzNTpcXHR7XFxuMjQzNjpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6NDcuNjU4NDYwNzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcxNjEzMTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVkZJTyBQQ0kgRGV2aWNlIENsb3N1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZWAgd2l0aCBgbnJfdmlydGZuID0gMGAgZWZmZWN0aXZlbHkgZGlzYWJsZXMgU1JJT1YsIHJlbW92aW5nIHRoZSBkZXZpY2UgZnJvbSB0aGUgYHZmaW9fcGNpX3NyaW92X3Bmc2AgbGlzdC4gVGhpcyBzZWVtcyBjb3JyZWN0IGFuZCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBWRnMgYXJlIGFscmVhZHkgZW5hYmxlZC4gVGhlIGtleSBwYXJ0IGlzLCBvZiBjb3Vyc2UsIHRoZSBjb25kaXRpb246IGBpZiAocGNpX251bV92Zih2ZGV2LVx1MDAzZXBkZXYpKWAuIFRoaXMgY2hlY2tzIGlmIGFueSBWRnMgYXJlIHByZXNlbnQuICBJZiBzbywgdGhlIHBhdGNoIGNhbGxzIGB2ZmlvX3BjaV9jb3JlX3NyaW92X2NvbmZpZ3VyZSh2ZGV2LCAwKWAgd2l0aGluIGB2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZWAsIGVuc3VyaW5nIFZGcyBhcmUgZGlzYWJsZWQgKmJlZm9yZSogdGhlIGRldmljZSBpcyBjbG9zZWQuICBUaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gZGV2aWNlcyBhcmUgcmVtb3ZlZC5cblxuU28sIHRvIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBTUi1JT1YgVkZzLiBUaGlzIGVuc3VyZXMgVkZzIGFyZSBkaXNhYmxlZCBvbiBkZXZpY2UgY2xvc3VyZSwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB2ZmlvLXBjaS4gSSdkIGFzc2VzcyBgdmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VgIGFuZCBgdmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVgIGFzIHRoZSBzeW1ib2xzIG9mIGZvY3VzLiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJbml0aWFsbHksIEkgc3VzcGVjdGVkIHdlIG1pZ2h0IG5lZWQgbW9yZSB0aGFuIGp1c3QgYFZGSU9gLCBhbmQgdGhhdCBgVkZJT19WSVJRRkRgIHdvdWxkIGJlIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIGBWRklPX1BDSV9DT1JFYCBzZWxlY3RzIGBWRklPX1ZJUlFGRGAgYW5kIGBJUlFfQllQQVNTX01BTkFHRVJgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBgVkZJT19QQ0lgIGlzIHN1ZmZpY2llbnQuIEJ1dCwgd2UgYWxzbyBuZWVkIGBQQ0lfSU9WYCBzaW5jZSBgcGNpX251bV92ZmAgaXMgdGhlIHRyaWdnZXIuIEl0IGlzIGEgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZSB0byBvYnRhaW4gYSBub24temVybyB2YWx1ZS4gVGh1cywgYFZGSU9fUENJYCBhbmQgYFBDSV9JT1ZgIGFyZSByZXF1aXJlZCwgYWxvbmcgd2l0aCBgVkZJT2Agb2YgY291cnNlLiBJIGNhbid0IHNlZSBhbnkgb3RoZXIgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcywgc28gbGV0J3MgbG9jayB0aGlzIGRvd24gYW5kIGdlbmVyYXRlIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU4OSwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDo1Ny4zNzQ1OTUwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTEzMzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Nsb3NlX2RldmljZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9zcmlvdl9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZGlzYWJsZSBTUi1JT1YgVkZzIHdoZW4gYSBWRklPIFBDSSBkZXZpY2UgaXMgY2xvc2VkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgYmluZGluZyBhIHZpcnR1YWwgUENJIGRldmljZSB0byB2ZmlvLXBjaSwgZW5hYmxpbmcgVkZzLCBhbmQgY2xvc2luZyB0aGUgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9jbG9zZV9kZXZpY2VcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfc3Jpb3ZfY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGRpc2FibGUgU1ItSU9WIFZGcyB3aGVuIGEgVkZJTyBQQ0kgZGV2aWNlIGlzIGNsb3NlZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGJpbmRpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdG8gdmZpby1wY2ksIGVuYWJsaW5nIFZGcywgYW5kIGNsb3NpbmcgdGhlIGRldmljZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7n5fz[1] Phase: Succeeded StartedAt: 2026-08-05 00:41:08 +0000 UTC FinishedAt: 2026-08-05 00:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 00:41:08 +0000 UTC FinishedAt: 2026-08-05 00:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2] Phase: Succeeded StartedAt: 2026-08-05 00:41:08 +0000 UTC FinishedAt: 2026-08-05 01:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-05 00:41:08 +0000 UTC FinishedAt: 2026-08-05 01:33:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 00:41:08 +0000 UTC FinishedAt: 2026-08-05 00:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 00:41:08 +0000 UTC FinishedAt: 2026-08-05 00:41:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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-workflow7n5fz/series-workflow7n5fz-convert-artifact-1442503055/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 00:41:18 +0000 UTC FinishedAt: 2026-08-05 01:01:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 00:41:18 +0000 UTC FinishedAt: 2026-08-05 01:01:05 +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:*38e904d0-685a-41cb-8a78-e23c82a5fb33,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-workflow7n5fz/series-workflow7n5fz-convert-artifact-1442503055/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": "ab143a8e-df8e-4a04-8ad7-b0a094efbc72", "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-workflow7n5fz/series-workflow7n5fz-build-action-86558421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 00:41:18 +0000 UTC FinishedAt: 2026-08-05 01:00:55 +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:*38e904d0-685a-41cb-8a78-e23c82a5fb33,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-workflow7n5fz/series-workflow7n5fz-convert-artifact-1442503055/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": "ab143a8e-df8e-4a04-8ad7-b0a094efbc72", "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-workflow7n5fz/series-workflow7n5fz-build-action-86558421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 01:01:05 +0000 UTC FinishedAt: 2026-08-05 01:01:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 01:01:05 +0000 UTC FinishedAt: 2026-08-05 01:01:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 01:01:05 +0000 UTC FinishedAt: 2026-08-05 01:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 01:01:05 +0000 UTC FinishedAt: 2026-08-05 01:01:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-workflow7n5fz/series-workflow7n5fz-convert-artifact-3521635550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 01:01:16 +0000 UTC FinishedAt: 2026-08-05 01:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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-08-05 01:01:16 +0000 UTC FinishedAt: 2026-08-05 01:32:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab143a8e-df8e-4a04-8ad7-b0a094efbc72,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-workflow7n5fz/series-workflow7n5fz-build-action-86558421/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": false },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-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-08-05 01:32:50 +0000 UTC FinishedAt: 2026-08-05 01:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7n5fz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"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":["vfio_pci_core_close_device","vfio_pci_core_sriov_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","VFIO_PCI","PCI_IOV"],"series_id":"1b3d4ef8-781c-41bb-9e1e-e6c432d57791","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: Failed StartedAt: 2026-08-05 01:32:50 +0000 UTC FinishedAt: 2026-08-05 01:32:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}