Name: series-workflowfn6k2 Phase: Succeeded StartedAt: 2026-08-29 15:08:14 +0000 UTC FinishedAt: 2026-08-29 19:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[0] Phase: Succeeded StartedAt: 2026-08-29 15:08:14 +0000 UTC FinishedAt: 2026-08-29 15:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 15:08:14 +0000 UTC FinishedAt: 2026-08-29 15:30:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS", "DEBUG_KERNEL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS", "DEBUG_KERNEL", "NET" ], "series_id": "2631749c-606d-45e0-a2dd-d5d8768368ba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "save_netdev_trace_buffer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OywKICAgICYjMzQ7REVCVUdfS0VSTkVMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW4ta2VybmVsIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nL2RlYnVnZ2luZyBtZWNoYW5pc20gdXNpbmcgYSBzdGF0aWMgdHJhY2UgYnVmZmVyIGxpc3QgYW5kIHN0YWNrIHRyYWNlIGNhcHR1cmVzLiBcblxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxuMi4gQWxsIHRyYWNlIGJ1ZmZlcnMgYW5kIHN0YWNrIGFycmF5cyBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgKHN0YXRpYyBCU1MgYnVmZmVyIHBvb2wgYW5kIHplcm9lZCBzdGFjayBidWZmZXJzKSBvciBleHBsaWNpdGx5IHdyaXR0ZW4gdXAgdG8gdGhlIGNvdW50IHJldHVybmVkIGJ5IHN0YWNrX3RyYWNlX3NhdmUoKSBiZWZvcmUgYW55IHJlYWRzIG9yIGNvbXBhcmlzb25zLlxuMy4gTGVuZ3RoIHBhcmFtZXRlcnMgKG5yX2VudHJpZXMsIHRyaW1tZWRfZW50cmllcykgYXJlIHN0cmljdGx5IG1haW50YWluZWQgc3VjaCB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgc3RhY2sgdHJhY2UgZW50cmllcyBhcmUgZXZlciBhY2Nlc3NlZCBieSBtZW1jbXAsIG1lbW1vdmUsIGFuZCBzdGFja190cmFjZV9wcmludC5cbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2JiOWM5Y2Q0NDk3ZWZmMjg0NjNlYTIwNWYxNjUyNDFjMGIxNThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6MjI6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg3Y2FmYzkzMmU5ZTYuLmQ1MTgzMzhjZDA3NDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMjE1Myw2ICYjNDM7MjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcbiAgKlx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xuICAqXHRtb3ZlcyBvdXQuXG4mIzQzOyAqXG4mIzQzOyAqXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXG4gICovXG4gXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xuQEAgLTIzMTIsNiAmIzQzOzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXG4gXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcbiAjZW5kaWZcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XG4mIzQzOyNlbmRpZlxuIFxuIFx0dW5zaWduZWQgaW50XHRcdG9wZXJzdGF0ZTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0bGlua19tb2RlO1xuQEAgLTQ0OTgsOSAmIzQzOzQ1MDMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl9uaXRfYWN0aXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpZiAoZGV2KSB7XG4mIzQzO1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfZGVjKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5AQCAtNDUxMiw2ICYjNDM7NDUyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbiYjNDM7XHRcdHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIDEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2luYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmNcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLjIwYzRjOTI3MDhiOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmNcbkBAIC0yNTY2LDYgJiM0MzsyNTY2LDEwIEBAIHN0YXRpYyBib29sIHJjdV9kb19iYXRjaF9jaGVja190aW1lKGxvbmcgY291bnQsIGxvbmcgdGxpbWl0LFxuIFx0ICAgICAgIGxvY2FsX2Nsb2NrKCkgXHUwMDNlPSB0bGltaXQ7XG4gfVxuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZVxuICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtXHUwMDNlYmxpbWl0LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jXG5pbmRleCA3OTgwYTRhMjMyZjlmLi5hZDk4ODk1NjMyODgwIDEwMDY0NFxuLS0tIGEva2VybmVsL3NvZnRpcnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuY1xuQEAgLTU5OSw2ICYjNDM7NTk5LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3NvZnRpcnFfc3RhcnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuICNlbmRpZlxuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyAmIzQzOyBNQVhfU09GVElSUV9USU1FO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuY1xuaW5kZXggM2MwMzRjYmM1YmIzMC4uNjBkYWFlMWM2ZjE3ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC93b3JrcXVldWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jXG5AQCAtMzI1OSw2ICYjNDM7MzI1OSwxMCBAQCBzdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyoqXG4gICogcHJvY2Vzc19vbmVfd29yayAtIHByb2Nlc3Mgc2luZ2xlIHdvcmtcbiAgKiBAd29ya2VyOiBzZWxmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggMzgzMzY4NThjMTY4Zi4uOTNhNzU5NGQ1ODZlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTExNjM5LDYgJiM0MzsxMTYzOSwxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0MztzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xuIFxuICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxXG5AQCAtMTE3MjEsNiAmIzQzOzExNzI5LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFx0XHRcdFx0cHJfZW1lcmcoXCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcbiBcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9wcmludChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEwKTtcbiYjNDM7XHRcdFx0XHRkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbkBAIC0xMjEyMSw2ICYjNDM7MTIxMzAsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXG4gXHRkZXYtXHUwMDNlcHJpdl9sZW4gPSBzaXplb2ZfcHJpdjtcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbiYjNDM7I2VuZGlmXG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXCYjMzQ7bmV0ZGV2XCYjMzQ7KTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7XG5AQCAtMTIyMjMsNiAmIzQzOzEyMjM1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIGZyZWVfcGNwdTpcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiYjNDM7XHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gZnJlZV9kZXY6XG4gI2VuZGlmXG4gXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuQEAgLTEyMjkyLDYgJiM0MzsxMjMwNSw3IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuJiM0MztcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2Vjb3JlX3N0YXRzKTtcbiBcdGRldi1cdTAwM2Vjb3JlX3N0YXRzID0gTlVMTDtcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2V4ZHBfYnVsa3EpO1xuQEAgLTEzNDE4LDYgJiM0MzsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IGJhY2tsb2dfbmFwaV9zZXR1cCxcbiB9O1xuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qXG4gICogICAgICAgVGhpcyBpcyBjYWxsZWQgc2luZ2xlIHRocmVhZGVkIGR1cmluZyBib290LCBzbyBubyBuZWVkXG4gICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXG5AQCAtMTM0MjYsNiAmIzQzOzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJjID0gLUVOT01FTTtcbiBcbiYjNDM7XHRuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTtcbiBcdEJVR19PTighZGV2X2Jvb3RfcGhhc2UpO1xuIFxuIFx0bmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTtcbkBAIC0xMzUyOSwzICYjNDM7MTM1NTAsMjU0IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIH1cbiBcbiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxuJiM0MztzdGF0aWMgc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRhdG9taWNfdCBjb3VudDtcbiYjNDM7XHRpbnQgdHJpbW1lZF9lbnRyaWVzO1xuJiM0MztcdGludCBucl9lbnRyaWVzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XG4mIzQzO30gbmV0ZGV2X3RyYWNlX2J1ZmZlcltORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkVdO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XG4mIzQzO3N0YXRpYyBib29sIG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xuJiM0MztcdGNoYXIgKmNwO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3ByaW50X3N5bWJvbF9ub19vZmZzZXQoYnVmZmVyLCBlbnRyaWVzW2ldKTtcbiYjNDM7XHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspO1xuJiM0MztcdFx0aWYgKGNwKVxuJiM0MztcdFx0XHQqY3AgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0aWYgKGJ1ZmZlclswXSA9PSAmIzM5O3AmIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O3Byb2Nlc3Nfb25lX3dvcmtcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O2smIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O2tzeXNfdW5zaGFyZVwmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGkgJiM0MzsgMTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCYjMzQ7c29ja19zZW5kbXNnX25vc2VjXCYjMzQ7KSB8fFxuJiM0MztcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwmIzM0O3NvY2tfcmVjdm1zZ19ub3NlY1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGkgJiM0MzsgMTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ciYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCYjMzQ7cmN1X2RvX2JhdGNoXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtfJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtfX3N5c19iaW5kXCYjMzQ7KSB8fFxuJiM0MztcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwmIzM0O19fc29ja19yZWxlYXNlXCYjMzQ7KSB8fFxuJiM0MztcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwmIzM0O19fc3lzX2JwZlwmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGkgJiM0MzsgMTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCYjMzQ7ZG9fc29ja19zZXRzb2Nrb3B0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbnJfZW50cmllcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wO1xuJiM0MztcdGludCBjb3VudCwgYmFsYW5jZSA9IDAsIHBvcyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSB0cmltbWVkX2VudHJpZXMgZmllbGQuIERvIG5vdCBtb2RpZnkgbnJfZW50cmllcyBmaWVsZFxuJiM0MztcdCAqIGluIGNhc2Ugc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgaXMgY2FsbGVkIGFnYWluLlxuJiM0MztcdCAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7XG4mIzQzO1x0XHRpZiAocHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9PSBwdHItXHUwMDNlbnJfZW50cmllcylcbiYjNDM7XHRcdFx0cHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9IHRyaW1fbmV0ZGV2X3RyYWNlKHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcyk7XG4mIzQzO1x0fVxuJiM0MztcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyB1c2luZyB0cmltbWVkX2VudHJpZXMgZmllbGQuICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuJiM0MztcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbiYjNDM7XHRcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR0bXAgPSBwdHI7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdFx0aWYgKHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgIT0gdG1wLVx1MDAzZXRyaW1tZWRfZW50cmllcyB8fFxuJiM0MztcdFx0XHQgICAgbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCB0bXAtXHUwMDNlZW50cmllcyxcbiYjNDM7XHRcdFx0XHQgICBwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuJiM0MztcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGlmICghY291bnQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4mIzQzO1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGF0b21pY19zdWIoY291bnQsIFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzXG4mIzQzO1x0XHQgKiBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1x0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4mIzQzO1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkge1xuJiM0MztcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuJiM0MztcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuJiM0MztcdFx0aWYgKCFjb3VudClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHQvKiBSZXBvcnQgdGhpcyBlbnRyeS4gSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2VcbiYjNDM7XHRcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG9zJiM0MzsmIzQzOztcbiYjNDM7XHRcdGJhbGFuY2UgJiM0Mzs9IGNvdW50O1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtDYWxsIHRyYWNlIGZvciAlc1slZF0gJSYjNDM7ZCBhdFxcblwmIzM0OywgZGV2LVx1MDAzZW5hbWUsIHBvcywgY291bnQpO1xuJiM0MztcdFx0c3RhY2tfdHJhY2VfcHJpbnQocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMsIDQpO1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O2JhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxuXCYjMzQ7LCBkZXYtXHUwMDNlbmFtZSwgcG9zLCBiYWxhbmNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5XG4mIzQzO1x0ICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuXG4mIzQzO1x0ICogVGhlcmVmb3JlLCBubyBtb3JlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGNhbGwgd2lsbCBiZSBtYWRlLCBhbmQgd2UgY2FuXG4mIzQzO1x0ICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4mIzQzO1x0XHRwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdH1cbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuJiM0MztcdGludCBucl9lbnRyaWVzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xuJiM0MztcdGlmIChpbl9ubWkoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQvKiBHZXQgc3RhY2sgdHJhY2VzLiAqL1xuJiM0MztcdG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUocHRyLVx1MDAzZWVudHJpZXMpLCAxKTtcbiYjNDM7XHQvKiBUcmltIHRyYWNlcyBvZiBwcm9jZXNzIGNvbnRleHQgbm93IGlmIGNhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgZm9yXG4mIzQzO1x0ICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJiMzOTt0IHRyaW0gdHJhY2VzXG4mIzQzO1x0ICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQXZvaWQga2FsbHN5bXMgbG9va3VwLCBieSB1c2luZyBjYWNoZWQgYWRkcmVzcyByZXNvbHZlZCB1cG9uIGJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGluX3NvZnRpcnEoKSkge1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKGVudHJpZXNbaV0gXHUwMDNlPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBlbnRyaWVzW2ldIFx1MDAzYyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzKSB7XG4mIzQzO1x0XHRcdFx0bnJfZW50cmllcyA9IGkgJiM0MzsgMTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXG4mIzQzO1x0ICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuJiM0MztcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFtZW1jbXAocHRyLVx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7XG4mIzQzO1x0XHRcdGF0b21pY19hZGQoZGVsdGEsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvclxuJiM0MztcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxuJiM0MztcdCAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXJcbiYjNDM7XHQgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkge1xuJiM0MztcdFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cbiYjNDM7XHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZwdHItXHUwMDNlY291bnQsIGRlbHRhKTtcbiYjNDM7XHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbiYjNDM7XHRcdHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuJiM0MztcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHQvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqL1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbiYjNDM7ICoga2FsbHN5bXMgZXZlcnkgdGltZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTtcbiYjNDM7XHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4mIzQzO1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTtcbiYjNDM7XHRjaGFyICpjcDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbiYjNDM7XHRcdGlmIChzdHJuY21wKGJ1ZmZlciwgXCYjMzQ7aGFuZGxlX3NvZnRpcnFzXCYjMzQ7LCAxNSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspO1xuJiM0MztcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwmIzM0OyYjNDM7JWx4LyVseFwmIzM0OywgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XG4mIzQzO1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICYjNDM7IHNpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGUoXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cdTAwM2Vjb21wbGV0aW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuJiM0MztcbiYjNDM7XHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqL1xuJiM0MztcdG1vZF90aW1lcihcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuJiM0MztcdHRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soXHUwMDI2dGMudGltZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IGMwNWQ4NmU2M2FiZjcuLmIzZGRjYzI4M2NiYmMgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuY1xuQEAgLTcyMyw3ICYjNDM7NzIzLDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZClcbiB9XG4gRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jKTtcbiBcbi1zdGF0aWMgdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MztzdGF0aWNcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7bm9pbmxpbmVcbiYjNDM7I2VuZGlmXG4mIzQzO3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFxuQEAgLTc5NSw3ICYjNDM7Nzk5LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsXG4gXHR0cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHNrLCByZXQsIDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKVxuJiM0MztzdGF0aWNcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7bm9pbmxpbmVcbiYjNDM7I2Vsc2VcbiYjNDM7aW5saW5lXG4mIzQzOyNlbmRpZlxuJiM0MztpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlc2VuZG1zZywgaW5ldDZfc2VuZG1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldF9zZW5kbXNnLCBzb2NrLCBtc2csXG5AQCAtMTE0NSw4ICYjNDM7MTE1NSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZlxuIFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICAgIGludCBmbGFncylcbiYjNDM7c3RhdGljXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO25vaW5saW5lXG4mIzQzOyNlbHNlXG4mIzQzO2lubGluZVxuJiM0MzsjZW5kaWZcbiYjNDM7aW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlcmVjdm1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldDZfcmVjdm1zZyxcbkBAIC0yNjUzLDkgJiM0MzsyNjY4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9tc2doZHJfZnJvbV91c2VyKHN0cnVjdCBtc2doZHIgKmttc2csXG4gXHRyZXR1cm4gZXJyIFx1MDAzYyAwID8gZXJyIDogMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4mIzQzO3N0YXRpY1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0Mztub2lubGluZVxuJiM0MzsjZW5kaWZcbiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4mIzQzO1x0XHQgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF1cbiBcdFx0XHRcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiYjMzQ7LAogICAgJiMzNDtLQUxMU1lNUyYjMzQ7LAogICAgJiMzNDtERUJVR19LRVJORUwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgYSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2UgY291bnQgdHJhY2UgYnVmZmVyIHRyYWNraW5nIG1lY2hhbmlzbSB1bmRlciBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiBhbmQgQ09ORklHX0tBTExTWU1TLiBJdCBzYXZlcyBzdGFjayB0cmFjZXMgb24gX19kZXZfaG9sZCgpIGFuZCBfX2Rldl9wdXQoKSwgbWFuYWdpbmcgYW4gUkNVIGxpc3Qgb2YgdHJhY2UgYnVmZmVycyB3aXRoIGEgcmF3IHNwaW5sb2NrIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMsIHdoaWNoIGFmZmVjdHMgY29yZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3YmI5YzljZDQ0OTdlZmYyODQ2M2VhMjA1ZjE2NTI0MWMwYjE1OGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNToyMjo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDg3Y2FmYzkzMmU5ZTYuLmQ1MTgzMzhjZDA3NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjE1Myw2ICYjNDM7MjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgogICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbwogICoJbW92ZXMgb3V0LgomIzQzOyAqCiYjNDM7ICoJQG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlIHsKQEAgLTIzMTIsNiAmIzQzOzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkKIAljb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wczsKICNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCW5ldGRldl90cmFjZV9idWZmZXJfbGlzdDsKJiM0MzsjZW5kaWYKIAogCXVuc2lnbmVkIGludAkJb3BlcnN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCWxpbmtfbW9kZTsKQEAgLTQ0OTgsOSAmIzQzOzQ1MDMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl9uaXRfYWN0aXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7dm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2KSB7CiYjNDM7CQlzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9kZWMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKQEAgLTQ1MTIsNiAmIzQzOzQ1MjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIDEpOwogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAkJdGhpc19jcHVfaW5jKCpkZXYtJmd0O3BjcHVfcmVmY250KTsKICNlbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jCmluZGV4IDk2ODQ4ZmMxZjAyYjguLjIwYzRjOTI3MDhiOGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jCkBAIC0yNTY2LDYgJiM0MzsyNTY2LDEwIEBAIHN0YXRpYyBib29sIHJjdV9kb19iYXRjaF9jaGVja190aW1lKGxvbmcgY291bnQsIGxvbmcgdGxpbWl0LAogCSAgICAgICBsb2NhbF9jbG9jaygpICZndDs9IHRsaW1pdDsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogSW52b2tlIGFueSBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBtYWRlIGl0IHRvIHRoZSBlbmQgb2YgdGhlaXIgZ3JhY2UKICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtJmd0O2JsaW1pdC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDc5ODBhNGEyMzJmOWYuLmFkOTg4OTU2MzI4ODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTk5LDYgJiM0Mzs1OTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH0KICNlbmRpZgogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAzYzAzNGNiYzViYjMwLi42MGRhYWUxYzZmMTdmIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMjU5LDYgJiM0MzszMjU5LDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29yawogICogQHdvcmtlcjogc2VsZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAzODMzNjg1OGMxNjhmLi45M2E3NTk0ZDU4NmUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTE2MzksNiAmIzQzOzExNjM5LDE0IEBAIGludCBuZXRkZXZfcmVmY250X3JlYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTsKIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0MztzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwOwogCiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMQpAQCAtMTE3MjEsNiAmIzQzOzExNzI5LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogCQkJCXByX2VtZXJnKCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXG4mIzM0OywKIAkJCQkJIGRldi0mZ3Q7bmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOwogCQkJCXJlZl90cmFja2VyX2Rpcl9wcmludCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEwKTsKJiM0MzsJCQkJZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiAJCQl9CiAKIAkJCXdhcm5pbmdfdGltZSA9IGppZmZpZXM7CkBAIC0xMjEyMSw2ICYjNDM7MTIxMzAsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAKIAlkZXYtJmd0O3ByaXZfbGVuID0gc2l6ZW9mX3ByaXY7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7CiYjNDM7I2VuZGlmCiAJcmVmX3RyYWNrZXJfZGlyX2luaXQoJmFtcDtkZXYtJmd0O3JlZmNudF90cmFja2VyLCAxMjgsICYjMzQ7bmV0ZGV2JiMzNDspOwogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7CkBAIC0xMjIyMyw2ICYjNDM7MTIyMzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiBmcmVlX3BjcHU6CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7cGNwdV9yZWZjbnQpOwomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiBmcmVlX2RldjoKICNlbmRpZgogCXJlZl90cmFja2VyX2Rpcl9leGl0KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlcik7CkBAIC0xMjI5Miw2ICYjNDM7MTIzMDUsNyBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCk7CiAJZGV2LSZndDtwY3B1X3JlZmNudCA9IE5VTEw7CiAjZW5kaWYKJiM0MzsJZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7Y29yZV9zdGF0cyk7CiAJZGV2LSZndDtjb3JlX3N0YXRzID0gTlVMTDsKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3hkcF9idWxrcSk7CkBAIC0xMzQxOCw2ICYjNDM7MTM0MzIsMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0gewogCS5zZXR1cAkJCT0gYmFja2xvZ19uYXBpX3NldHVwLAogfTsKIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTsKJiM0MzsjZW5kaWYKJiM0MzsKIC8qCiAgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWQKICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLgpAQCAtMTM0MjYsNiAmIzQzOzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB7CiAJaW50IGksIHJjID0gLUVOT01FTTsKIAomIzQzOwluZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTsKIAlCVUdfT04oIWRldl9ib290X3BoYXNlKTsKIAogCW5ldF9kZXZfc3RydWN0X2NoZWNrKCk7CkBAIC0xMzUyOSwzICYjNDM7MTM1NTAsMjU0IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKQogfQogCiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0MzsKJiM0MzsjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OAomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJYXRvbWljX3QgY291bnQ7CiYjNDM7CWludCB0cmltbWVkX2VudHJpZXM7CiYjNDM7CWludCBucl9lbnRyaWVzOwomIzQzOwl1bnNpZ25lZCBsb25nIGVudHJpZXNbMjBdOwomIzQzO30gbmV0ZGV2X3RyYWNlX2J1ZmZlcltORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkVdOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2spOwomIzQzO3N0YXRpYyBib29sIG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpJiM0MzsmIzQzOykKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsICZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHRyaW1fbmV0ZGV2X3RyYWNlKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIGludCBucl9lbnRyaWVzKQomIzQzO3sKJiM0MzsJY2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2xfbm9fb2Zmc2V0KGJ1ZmZlciwgZW50cmllc1tpXSk7CiYjNDM7CQljcCA9IHN0cmNocihidWZmZXIsICYjMzk7ICYjMzk7KTsKJiM0MzsJCWlmIChjcCkKJiM0MzsJCQkqY3AgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlpZiAoYnVmZmVyWzBdID09ICYjMzk7cCYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3Byb2Nlc3Nfb25lX3dvcmsmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O2smIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtrc3lzX3Vuc2hhcmUmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O3MmIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3NlbmRtc2dfbm9zZWMmIzM0OykgfHwKJiM0MzsJCQkgICAgIXN0cmNtcChidWZmZXIsICYjMzQ7c29ja19yZWN2bXNnX25vc2VjJiMzNDspKQomIzQzOwkJCQlyZXR1cm4gaSAmIzQzOyAxOwomIzQzOwkJfSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtyJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cmN1X2RvX2JhdGNoJiMzNDspKQomIzQzOwkJCQlyZXR1cm4gaSAmIzQzOyAxOwomIzQzOwkJfSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtfJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7X19zeXNfYmluZCYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3NvY2tfcmVsZWFzZSYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19icGYmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG5yX2VudHJpZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0ciwgKnRtcDsKJiM0MzsJaW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDsKJiM0MzsKJiM0MzsJLyogVXBkYXRlIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gRG8gbm90IG1vZGlmeSBucl9lbnRyaWVzIGZpZWxkCiYjNDM7CSAqIGluIGNhc2Ugc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgaXMgY2FsbGVkIGFnYWluLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQlpZiAocHRyLSZndDt0cmltbWVkX2VudHJpZXMgPT0gcHRyLSZndDtucl9lbnRyaWVzKQomIzQzOwkJCXB0ci0mZ3Q7dHJpbW1lZF9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMpOwomIzQzOwl9CiYjNDM7CS8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyB1c2luZyB0cmltbWVkX2VudHJpZXMgZmllbGQuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJLyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqLwomIzQzOwkJaWYgKCFhdG9taWNfcmVhZCgmYW1wO3B0ci0mZ3Q7Y291bnQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJdG1wID0gcHRyOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UodG1wLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0KSB7CiYjNDM7CQkJaWYgKHB0ci0mZ3Q7dHJpbW1lZF9lbnRyaWVzICE9IHRtcC0mZ3Q7dHJpbW1lZF9lbnRyaWVzIHx8CiYjNDM7CQkJICAgIG1lbWNtcChwdHItJmd0O2VudHJpZXMsIHRtcC0mZ3Q7ZW50cmllcywKJiM0MzsJCQkJICAgcHRyLSZndDt0cmltbWVkX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJCWlmICghY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovCiYjNDM7CQkJYXRvbWljX2FkZChjb3VudCwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlhdG9taWNfc3ViKGNvdW50LCAmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJfQomIzQzOwkJLyogSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcwomIzQzOwkJICogY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJLyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQljb3VudCA9IGF0b21pY19yZWFkKCZhbXA7cHRyLSZndDtjb3VudCk7CiYjNDM7CQlpZiAoIWNvdW50KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJLyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlCiYjNDM7CQkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuCiYjNDM7CQkgKi8KJiM0MzsJCXBvcyYjNDM7JiM0Mzs7CiYjNDM7CQliYWxhbmNlICYjNDM7PSBjb3VudDsKJiM0MzsJCXByX2luZm8oJiMzNDtDYWxsIHRyYWNlIGZvciAlc1slZF0gJSYjNDM7ZCBhdFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBjb3VudCk7CiYjNDM7CQlzdGFja190cmFjZV9wcmludChwdHItJmd0O2VudHJpZXMsIHB0ci0mZ3Q7dHJpbW1lZF9lbnRyaWVzLCA0KTsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwl9CiYjNDM7CWlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7YmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcbiYjMzQ7LCBkZXYtJmd0O25hbWUsIHBvcywgYmFsYW5jZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi0mZ3Q7cGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5CiYjNDM7CSAqIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCBubyBtb3JlIF9fZGV2X3B1dCgpL19fZGV2X2hvbGQoKSBjYWxsIGNhbiBiZSBtYWRlLgomIzQzOwkgKiBUaGVyZWZvcmUsIG5vIG1vcmUgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgY2FsbCB3aWxsIGJlIG1hZGUsIGFuZCB3ZSBjYW4KJiM0MzsJICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC4KJiM0MzsJICovCiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwl3aGlsZSAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCXB0ciA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7cHRyLSZndDtsaXN0KTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyOwomIzQzOwl1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpXTsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CS8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqLwomIzQzOwlpZiAoaW5fbm1pKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CS8qIEdldCBzdGFjayB0cmFjZXMuICovCiYjNDM7CW5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUocHRyLSZndDtlbnRyaWVzKSwgMSk7CiYjNDM7CS8qIFRyaW0gdHJhY2VzIG9mIHByb2Nlc3MgY29udGV4dCBub3cgaWYgY2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBmb3IKJiM0MzsJICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJiMzOTt0IHRyaW0gdHJhY2VzCiYjNDM7CSAqIG9mIHByb2Nlc3MgY29udGV4dCB3aGVuIHRyeWluZyB0byBjb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcy4KJiM0MzsJICoKJiM0MzsJICogQXZvaWQga2FsbHN5bXMgbG9va3VwLCBieSB1c2luZyBjYWNoZWQgYWRkcmVzcyByZXNvbHZlZCB1cG9uIGJvb3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW5fc29mdGlycSgpKSB7CiYjNDM7CQlpbnQgaTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChlbnRyaWVzW2ldICZndDs9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIGVudHJpZXNbaV0gJmx0OyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzKSB7CiYjNDM7CQkJCW5yX2VudHJpZXMgPSBpICYjNDM7IDE7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwkvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzCiYjNDM7CSAqIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcsIHdlIGRvbiYjMzk7dCB1c2UgbG9jayBoZXJlLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQlpZiAocHRyLSZndDtucl9lbnRyaWVzID09IG5yX2VudHJpZXMgJmFtcDsmYW1wOwomIzQzOwkJICAgICFtZW1jbXAocHRyLSZndDtlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkgewomIzQzOwkJCWF0b21pY19hZGQoZGVsdGEsICZhbXA7cHRyLSZndDtjb3VudCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIEFkZCBhIG5ldyBlbnRyeS4gV2UgZG9uJiMzOTt0IHJlLWNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIHdpdGggbG9jayBoZWxkLCBmb3IKJiM0MzsJICogZHVwbGljYXRlZCBlbnRyaWVzIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcuCiYjNDM7CSAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXIKJiM0MzsJICogcmF3IHNwaW5sb2NrIGFscmVhZHkgaGVsZC4KJiM0MzsJICovCiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7CiYjNDM7CQkvKiBSZW1vdmUgb25lIGVudHJ5IGZyb20gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0IGFuZCBpbml0aWFsaXplIGl0LiAqLwomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7cHRyLSZndDtsaXN0KTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtwdHItJmd0O2NvdW50LCBkZWx0YSk7CiYjNDM7CQlwdHItJmd0O25yX2VudHJpZXMgPSBucl9lbnRyaWVzOwomIzQzOwkJcHRyLSZndDt0cmltbWVkX2VudHJpZXMgPSBucl9lbnRyaWVzOwomIzQzOwkJbWVtbW92ZShwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzOwkJLyogQXBwZW5kIGl0IGluIFJDVSBtYW5uZXIsIGZvciByZWFkZXJzIGFyZSBsb2NrbGVzcy4gKi8KJiM0MzsJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cHRyLSZndDtsaXN0LCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7CiYjNDM7CiYjNDM7c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHsKJiM0MzsJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiYjNDM7CXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBSZXNvbHZlIGFkZHJlc3Mgb2YgaGFuZGxlX3NvZnRpcnFzKCkgYW5kIGNhY2hlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBsb29raW5nIHVwCiYjNDM7ICoga2FsbHN5bXMgZXZlcnkgdGltZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07CiYjNDM7CWludCBucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpLCAxKTsKJiM0MzsJY2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7CiYjNDM7CWNoYXIgKmNwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzcHJpbnRfc3ltYm9sKGJ1ZmZlciwgZW50cmllc1tpXSk7CiYjNDM7CQlpZiAoc3RybmNtcChidWZmZXIsICYjMzQ7aGFuZGxlX3NvZnRpcnFzJiMzNDssIDE1KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsmIzQzOyYjMzk7KTsKJiM0MzsJCWlmICghY3AgfHwgc3NjYW5mKGNwLCAmIzM0OyYjNDM7JWx4LyVseCYjMzQ7LCAmYW1wO29mZnNldCwgJmFtcDtzaXplKSAhPSAyKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gZW50cmllc1tpXSAtIG9mZnNldDsKJiM0MzsJCWVuZF9vZl9oYW5kbGVfc29mdGlycXMgPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgJiM0Mzsgc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWNvbXBsZXRlKCZhbXA7Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS0mZ3Q7Y29tcGxldGlvbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB0YzsKJiM0MzsKJiM0MzsJdGltZXJfc2V0dXBfb25fc3RhY2soJmFtcDt0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7dGMuY29tcGxldGlvbik7CiYjNDM7CS8qIFNjaGVkdWxlIGEgY2FsbCB0byBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKS4gKi8KJiM0MzsJbW9kX3RpbWVyKCZhbXA7dGMudGltZXIsIGppZmZpZXMpOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBiZSBjYWxsZWQuICovCiYjNDM7CXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovCiYjNDM7CXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7dGMudGltZXIpOwomIzQzOwl0aW1lcl9kZXN0cm95X29uX3N0YWNrKCZhbXA7dGMudGltZXIpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCBjMDVkODZlNjNhYmY3Li5iM2RkY2MyODNjYmJjIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NvY2tldC5jCkBAIC03MjMsNyAmIzQzOzcyMywxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpCiB9CiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpOwogCi1zdGF0aWMgdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7dm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcyA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpOwogCkBAIC03OTUsNyAmIzQzOzc5OSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LAogCXRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZWxzZQomIzQzO2lubGluZQomIzQzOyNlbmRpZgomIzQzO2ludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3NlbmRtc2csIGluZXQ2X3NlbmRtc2csCiAJCQkJICAgICBpbmV0X3NlbmRtc2csIHNvY2ssIG1zZywKQEAgLTExNDUsOCAmIzQzOzExNTUsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGYKIAl0cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHNrLCByZXQsIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCQkgICAgIGludCBmbGFncykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncykKIHsKIAlpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtyZWN2bXNnLAogCQkJCSAgICAgaW5ldDZfcmVjdm1zZywKQEAgLTI2NTMsOSAmIzQzOzI2NjgsMTIgQEAgc3RhdGljIGludCBjb3B5X21zZ2hkcl9mcm9tX3VzZXIoc3RydWN0IG1zZ2hkciAqa21zZywKIAlyZXR1cm4gZXJyICZsdDsgMCA/IGVyciA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsCi0JCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywKLQkJCSAgIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbmRpZgomIzQzO2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQogewogCXVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiM0MzsgMjBdCiAJCQkJX19hbGlnbmVkKHNpemVvZihfX2tlcm5lbF9zaXplX3QpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDg1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEZWJ1ZyBQYXRjaCBmb3IgTmV0ZGV2IFJlZmNvdW50IFRyYWNraW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnIG9yIGRpYWdub3N0aWMgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgdHJhY2tpbmcgcmVmZXJlbmNlIGNvdW50cyBvbiBuZXR3b3JrIGRldmljZXMuIEl0IHNlZW1zIHRvIGJlIGEgcHJvYWN0aXZlIG1lYXN1cmUgdG8gY2F0Y2ggbWVtb3J5IGxlYWtzIG9yIG90aGVyIHJlZmNvdW50LXJlbGF0ZWQgaXNzdWVzLCBwb3RlbnRpYWxseSBmb3IgdXNlIHdpdGggdG9vbHMgbGlrZSBzeXprYWxsZXIuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcywgaXMgdGhpcyBqdXN0ICYjMzQ7ZGVjb3JhdGl2ZSYjMzQ7IGxpa2UgbG9nZ2luZyBvciB0cmFjaW5nIHRoYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lIG1lbnRpb25zPyBIb3dldmVyLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyB0d28gbmV3IGZ1bmN0aW9uczogYG5ldGRldl90cmFjZV9idWZmZXJfbGlzdGAgYW5kIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLiBJdCBhcHBlYXJzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byBjcml0aWNhbCBwb2ludHMgd2l0aGluIHRoZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUg4oCTIHNwZWNpZmljYWxseSwgZXZlcnkgY2FsbCB0byBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIOKAkyBwcm92aWRlZCB0aGF0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIGBDT05GSUdfS0FMTFNZTVNgKSBhcmUgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdpbGwgYWZmZWN0IGV4ZWN1dGlvbiBhbmQgaXMgbm90IGRlY29yYXRpdmUuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gYSBiaXQuIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQgdXNlcyBgc3RhY2tfdHJhY2Vfc2F2ZWAgdG8gY2FwdHVyZSBhIHN0YWNrIHRyYWNlLCB3aGljaCBpcyBhIGJpZyBoaW50IHRoYXQgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aGVyZSBhIGRldmljZSBpcyBiZWluZyBoZWxkIG9yIHJlbGVhc2VkLiBUaGlzIHRyYWNlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIGZpeGVkLXNpemUgYnVmZmVyLCBgbmV0ZGV2X3RyYWNlX2J1ZmZlclszMjc2OF1gLiBJIG5vdGUgdGhlIHByZXNlbmNlIG9mIHNwaW5sb2NrcyAoYHJhd19zcGluX2xvY2tfaXJxc2F2ZWApIGFuZCBSQ1UgdHJhdmVyc2FsLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgbG9naWMuIFRoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyBmb3IgbGlzdCBtYW5pcHVsYXRpb24sIGVyYXNpbmcsIGFuZCBkdW1waW5nIG9mIGJ1ZmZlciBkYXRhLiBUaGUgZmFjdCB0aGF0IHRoZSBzdGFjayB0cmFjZSBpcyBzYXZlZCBvbiBldmVyeSBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIG1ha2VzIHRoaXMgYSBwb3RlbnRpYWxseSBoaWdoLW92ZXJoZWFkIG9wZXJhdGlvbiBpZiBpdCYjMzk7cyBydW5uaW5nIGFsbCB0aGUgdGltZSEKClRoZXJlIGFyZSBzb21lIG5vaW5saW5lIGFubm90YXRpb25zIGFkZGVkIHRvIHNldmVyYWwgZnVuY3Rpb25zIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVpciBwdXJwb3NlIGlzIGluIHRoaXMgY29udGV4dC4KClRoZSBtb3N0IGltcG9ydGFudCBzdGVwIGlzIHRvIHNlYXJjaCBmb3IgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCB0byBzZWUgaWYgdGhpcyBpcyBhbiBlbnRpcmVseSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgaWYgaXQmIzM5O3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guCgpJIGJlbGlldmUgdGhpcyBpcyBnb2luZyB0byBiZSBtYXJrZWQgYXMgd29ydGh5IG9mIGZ1enppbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNjA9c3RydWN0IG5ldF9kZXZpY2Uge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMxNi0jZW5kaWZcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjMxNzojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzE4LVx0c3RydWN0IGxpc3RfaGVhZFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUwND12b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUwNS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUwNjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTA3LXZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTM2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTM5LXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDU0MDojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDU0MS1cdHJlZl90cmFja2VyX2FsbG9jKFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlciwgZ2ZwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQ1NDg9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTUwLXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDU1MTojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDU1Mi1cdHJlZmNvdW50X2RlYyhcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIubm9fdHJhY2tlcik7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTU3PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTU5LXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDU2MDojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDU2MS1cdHJlZl90cmFja2VyX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaC01LVxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmg6NjojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oLTctdHlwZWRlZiBzdHJ1Y3QgcmVmX3RyYWNrZXIgKm5ldGRldmljZV90cmFja2VyO1xuLS1cbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZz00MD1DT05GSUdfVUJTQU5fVU5SRUFDSEFCTEU9eVxuLS1cbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZy00My0jXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc6NDQ6Q09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVI9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTQ1LUNPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVI9eVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTI1NTg9c3RhdGljIGJvb2wgcmN1X2RvX2JhdGNoX2NoZWNrX3RpbWUobG9uZyBjb3VudCwgbG9uZyB0bGltaXQsXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMjU2OC1cbmtlcm5lbC9yY3UvdHJlZS5jOjI1Njk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC9yY3UvdHJlZS5jLTI1NzAtc3RhdGljIG5vaW5saW5lIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKTtcbi0tXG5rZXJuZWwvc29mdGlycS5jPTU5OT1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuLS1cbmtlcm5lbC9zb2Z0aXJxLmMtNjAxLVxua2VybmVsL3NvZnRpcnEuYzo2MDI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC9zb2Z0aXJxLmMtNjAzLXN0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jPTMyNDQ9c3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy0zMjYxLVxua2VybmVsL3dvcmtxdWV1ZS5jOjMyNjI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC93b3JrcXVldWUuYy0zMjYzLXN0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTItXG5uZXQvS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy00LVx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1wmIzM0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExNjQwPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbm5ldC9jb3JlL2Rldi5jLTExNjQxLVxubmV0L2NvcmUvZGV2LmM6MTE2NDI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTExNjQzLXN0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjEwMz1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxMzItXG5uZXQvY29yZS9kZXYuYzoxMjEzMzojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTIxMzQtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzQyNz1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTM0MzQtXG5uZXQvY29yZS9kZXYuYzoxMzQzNTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTM0MzYtc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzU1Mj1zdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbm5ldC9jb3JlL2Rldi5jLTEzNTUzLVxubmV0L2NvcmUvZGV2LmM6MTM1NTQ6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTEzNTU1LVxuLS1cbm5ldC9zb2NrZXQuYz03MjY9c3RhdGljXG5uZXQvc29ja2V0LmM6NzI3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtNzI4LW5vaW5saW5lXG4tLVxubmV0L3NvY2tldC5jPTgwMj1zdGF0aWNcbm5ldC9zb2NrZXQuYzo4MDM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy04MDQtbm9pbmxpbmVcbi0tXG5uZXQvc29ja2V0LmM9MTE1OD1zdGF0aWNcbm5ldC9zb2NrZXQuYzoxMTU5OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtMTE2MC1ub2lubGluZVxuLS1cbm5ldC9zb2NrZXQuYz0yNjcxPXN0YXRpY1xubmV0L3NvY2tldC5jOjI2NzI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy0yNjczLW5vaW5saW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gYG5ldC9LY29uZmlnLmRlYnVnYCBhbmQgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2s6CgoqKkFuYWx5emluZyBOZXR3b3JrIERldmljZSBSZWZlcmVuY2UgQ291bnRpbmcgRGVidWdnaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHplcm8gaW4gb24gaG93IHRvIGVuYWJsZSBvciBjb25maWd1cmUgdGhpcyBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgZmVhdHVyZS4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IHBvaW50cyB0byBgbmV0L0tjb25maWcuZGVidWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZGVidWdnaW5nIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIHN1YnN5c3RlbXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgYSByZWZlcmVuY2UgY291bnQgdHJhY2tlci4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoZSBuZXR3b3JraW5nIHNwYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdGhlcmUuIElzIGl0IGEgZGlyZWN0IGVuYWJsZS9kaXNhYmxlLCBvciBhcmUgdGhlcmUgZGlmZmVyZW50IGxldmVscyBvZiB2ZXJib3NpdHkgb3IgZGV0YWlsPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlbGF0ZWQga2VybmVsIHBhcmFtZXRlcnMgSSBzaG91bGQgY2hlY2sgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoPyBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBJIGNvdWxkIHBvdGVudGlhbGx5IHVzZSB0aGlzIHRyYWNrZXIgdG8gZGVidWcgYSB0cmlja3kgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IGlzc3VlIEkmIzM5O20gd29ya2luZyBvbi4gVGhlIHNwZWNpZmljcyBvZiB0aGUgaXNzdWUgbWlnaHQgZ3VpZGUgbWUgZnVydGhlciwgYnV0IEkgbmVlZCBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmaXJzdC4gU28sIGBuZXQvS2NvbmZpZy5kZWJ1Z2AgaXQgaXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldCBkZXZpY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAgNjpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gICA3Olx0XHRkZWZhdWx0IG5cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIGRldmljZSByZWZlcmVuY2VzLlxuICAxMDpcdFx0ICBUaGlzIGFkZHMgbWVtb3J5IGFuZCBjcHUgY29zdHMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxuICAxMzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAxNTpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gIDE2Olx0XHRkZWZhdWx0IG5cbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIG5ldG5zIHJlZmVyZW5jZXMuXG4gIDE5Olx0XHQgIFRoaXMgYWRkcyBtZW1vcnkgYW5kIGNwdSBjb3N0cy5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgREVCVUdfTkVUXG4gIDIyOlx0XHRib29sIFwmIzM0O0FkZCBnZW5lcmljIG5ldHdvcmtpbmcgZGVidWdcJiMzNDtcbiAgMjM6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBORVRcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgRW5hYmxlIGV4dHJhIHNhbml0eSBjaGVja3MgaW4gbmV0d29ya2luZy5cbiAgMjY6XHRcdCAgVGhpcyBpcyBtb3N0bHkgdXNlZCBieSBmdXp6ZXJzLCBidXQgaXMgc2FmZSB0byBzZWxlY3QuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIERFQlVHX05FVF9TTUFMTF9SVE5MXG4gIDI5Olx0XHRib29sIFwmIzM0O0FkZCBleHRyYSBwZXItbmV0bnMgbXV0ZXggaW5zaWRlIFJUTkxcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDczOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIFRpbWUqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGVzZSBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGd1aWRlbGluZXMgYXJlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGNoZWNrIGZvciBtb2RpZmljYXRpb25zIHRoYXQgYXJlICphY3R1YWxseSogaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIElmIGl0JiMzOTtzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGxvZ2dpbmcsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBzdHVmZiwgdGhlbiBpdCYjMzk7cyBhIG5vLWdvLiBCdXQsIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsICphbmQqIEkgY2FuIHZlcmlmeSBpdCYjMzk7cyBleGVjdXRhYmxlLCB0aGVuIGl0JiMzOTtzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhpcyBzcGVjaWZpYyBwYXRjaC4gSG9sZCBvbiwgd2hhdCBleGFjdGx5ICpkaWQqIGl0IGRvIGFnYWluPyBBaCB5ZXMsIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCwgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYCBhcmUgY2FsbGluZyBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYC4gQW5kIGdldCB0aGlzLCBpdCBpcyBjYWxsZWQgZXZlcnkgc2luZ2xlIHRpbWUgYW55IG5ldHdvcmsgZGV2aWNlIGlzIHRvdWNoZWQhIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIGRvaW5nIGEgYnVuY2ggb2YgaW50ZXJlc3RpbmcgdGhpbmdzOiBpdCBpcyBhbGxvY2F0aW5nIGZyb20gYSBnbG9iYWwgcmluZy9idWZmZXIsIHVzaW5nIHJhdyBzcGlubG9ja3MsIHNhdmluZyBzdGFjayB0cmFjZXMsIGNvbXBhcmluZyBzdHVmZiB1c2luZyBgbWVtY21wYCwgdXBkYXRpbmcgYXRvbWljIGNvdW50ZXJzLCBhbmQgYWRkaW5nIHRvIGEgbGlua2VkIGxpc3QgYGRldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0YC4gV2hlbiBuZXRkZXZpY2VzIGFyZSBmcmVlZCBvciBkdW1wZWQgKHdoaWNoIGhhcHBlbnMgaW4gcGxhY2VzIGxpa2UgYG5ldGRldl93YWl0X2FsbHJlZnNfYW55YCwgYGFsbG9jX25ldGRldl9tcXNgLCBgZnJlZV9uZXRkZXZgKSwgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgIG9yIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgIGdldCBjYWxsZWQuIEFsc28sIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgIGlzIGRvaW5nIHRpbWVyIHNldHVwIGFuZCBjb21wbGV0aW9uIGR1cmluZyBgbmV0X2Rldl9pbml0YC4KClRoaXMgaXMgZnVuY3Rpb25hbGx5IHJlbGV2YW50LiBJIHNlZSB0cmFjaW5nIGJ1ZmZlciBtYW5hZ2VtZW50LCBsaW5rZWQgbGlzdCBtYW5pcHVsYXRpb24gdW5kZXIgY29uY3VycmVuY3ksIGFuZCByYXcgc3BpbmxvY2tzIGluIGludGVycnVwdC9zb2Z0aXJxL3Byb2Nlc3MgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBjaGFuZ2VzIQoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZDogYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AuIE9rLCBsZXQmIzM5O3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIEFoLCBmcm9tIGBuZXQvS2NvbmZpZy5kZWJ1Z2AsIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgLCBgU1RBQ0tUUkFDRV9TVVBQT1JUYCwgYW5kIGBORVRgLCBhbmQgaXQgYWxzbyBgc2VsZWN0YHMgYFJFRl9UUkFDS0VSYC4gQW5kIGBDT05GSUdfS0FMTFNZTVNgLi4uIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGFnYWluIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBkZXBlbmRzIG9uLgoKR2l2ZW4gdGhpcywgdGhpcyAqaXMqIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGNvcmUga2VybmVsIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLQUxMU1lNUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MjA4Nj1jb25maWcgQ0FDSEVTVEFUX1NZU0NBTExcbi0tXG5pbml0L0tjb25maWctMjA5NS1cbmluaXQvS2NvbmZpZzoyMDk2OmNvbmZpZyBLQUxMU1lNU1xuaW5pdC9LY29uZmlnLTIwOTctXHRib29sIFwmIzM0O0xvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wc1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWctMjEwMy1cbmluaXQvS2NvbmZpZzoyMTA0OmNvbmZpZyBLQUxMU1lNU19TRUxGVEVTVFxuaW5pdC9LY29uZmlnLTIxMDUtXHRib29sIFwmIzM0O1Rlc3QgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2Ugb2Yga2FsbHN5bXNcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMjExNi1cbmluaXQvS2NvbmZpZzoyMTE3OmNvbmZpZyBLQUxMU1lNU19BTExcbmluaXQvS2NvbmZpZy0yMTE4LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGFsbCBzeW1ib2xzIGluIGthbGxzeW1zXCYjMzQ7XG4tLVxua2VybmVsL2tzeW1zX2NvbW1vbi5jLTMtICoga3N5bXNfY29tbW9uLmM6IEEgc3BsaXQgb2Yga2VybmVsL2thbGxzeW1zLmNcbmtlcm5lbC9rc3ltc19jb21tb24uYzo0OiAqIENvbnRhaW5zIGEgZmV3IGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5hdGlvbnMgaW5kZXBlbmRlbnQgb2YgY29uZmlnIEtBTExTWU1TLlxua2VybmVsL2tzeW1zX2NvbW1vbi5jLTUtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZSBmb3IgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYSBiaXQgZGVlcGVyLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGFyb3VuZCBsaW5lIDIwOTYuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHNwb3QgdG8gYmVnaW4gZXhwbG9yaW5nIHRoZSBzZXR0aW5ncyB0aGF0IGFyZSB1c2VkIGR1cmluZyBlYXJseSBzeXN0ZW0gc3RhcnR1cCwgYW5kIGxpa2VseSBzb21lIG9mIHRoZSBjb3JlIGRlZmF1bHRzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHNwZWNpZmljIG9wdGlvbnMgYXJlIGJlaW5nIHNldCBvciBpbmZsdWVuY2VkIGVhcmx5IG9uLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHBhcnNpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA5MDpcdFx0ICBFbmFibGUgdGhlIGNhY2hlc3RhdCBzeXN0ZW0gY2FsbCwgd2hpY2ggcXVlcmllcyB0aGUgcGFnZSBjYWNoZVxuMjA5MTpcdFx0ICBzdGF0aXN0aWNzIG9mIGEgZmlsZSAobnVtYmVyIG9mIGNhY2hlZCBwYWdlcywgZGlydHkgcGFnZXMsXG4yMDkyOlx0XHQgIHBhZ2VzIG1hcmtlZCBmb3Igd3JpdGViYWNrLCAocmVjZW50bHkpIGV2aWN0ZWQgcGFnZXMpLlxuMjA5MzpcdFxuMjA5NDpcdFx0ICBJZiB1bnN1cmUgc2F5IFkgaGVyZS5cbjIwOTU6XHRcbjIwOTY6XHRjb25maWcgS0FMTFNZTVNcbjIwOTc6XHRcdGJvb2wgXCYjMzQ7TG9hZCBhbGwgc3ltYm9scyBmb3IgZGVidWdnaW5nL2tzeW1vb3BzXCYjMzQ7IGlmIEVYUEVSVFxuMjA5ODpcdFx0ZGVmYXVsdCB5XG4yMDk5Olx0XHRoZWxwXG4yMTAwOlx0XHQgIFNheSBZIGhlcmUgdG8gbGV0IHRoZSBrZXJuZWwgcHJpbnQgb3V0IHN5bWJvbGljIGNyYXNoIGluZm9ybWF0aW9uIGFuZFxuMjEwMTpcdFx0ICBzeW1ib2xpYyBzdGFjayBiYWNrdHJhY2VzLiBUaGlzIGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXG4yMTAyOlx0XHQgIHNvbWV3aGF0LCBhcyBhbGwgc3ltYm9scyBoYXZlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuXG4yMTAzOlx0XG4yMTA0Olx0Y29uZmlnIEtBTExTWU1TX1NFTEZURVNUXG4yMTA1Olx0XHRib29sIFwmIzM0O1Rlc3QgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2Ugb2Yga2FsbHN5bXNcJiMzNDtcbjIxMDY6XHRcdGRlcGVuZHMgb24gS0FMTFNZTVNcbjIxMDc6XHRcdGRlZmF1bHQgblxuMjEwODpcdFx0aGVscFxuMjEwOTpcdFx0ICBUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlIG9mIHNvbWUgaW50ZXJmYWNlcywgc3VjaCBhc1xuMjExMDpcdFx0ICBrYWxsc3ltc19sb29rdXBfbmFtZS4gSXQgYWxzbyBjYWxjdWxhdGVzIHRoZSBjb21wcmVzc2lvbiByYXRlIG9mIHRoZVxuMjExMTpcdFx0ICBrYWxsc3ltcyBjb21wcmVzc2lvbiBhbGdvcml0aG0gZm9yIHRoZSBjdXJyZW50IHN5bWJvbCBzZXQuXG4yMTEyOlx0XG4yMTEzOlx0XHQgIFN0YXJ0IHNlbGYtdGVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHN5c3RlbSBzdGFydHVwLiBTdWdnZXN0IGV4ZWN1dGluZ1xuMjExNDpcdFx0ICBcJiMzNDtkbWVzZyB8IGdyZXAga2FsbHN5bXNfc2VsZnRlc3RcJiMzNDsgdG8gY29sbGVjdCB0ZXN0IHJlc3VsdHMuIFwmIzM0O2ZpbmlzaFwmIzM0OyBpc1xuMjExNTpcdFx0ICBkaXNwbGF5ZWQgaW4gdGhlIGxhc3QgbGluZSwgaW5kaWNhdGluZyB0aGF0IHRoZSB0ZXN0IGlzIGNvbXBsZXRlLlxuMjExNjpcdFxuMjExNzpcdGNvbmZpZyBLQUxMU1lNU19BTExcbjIxMTg6XHRcdGJvb2wgXCYjMzQ7SW5jbHVkZSBhbGwgc3ltYm9scyBpbiBrYWxsc3ltc1wmIzM0O1xuMjExOTpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IEtBTExTWU1TXG4yMTIwOlx0XHRoZWxwXG4yMTIxOlx0XHQgIE5vcm1hbGx5IGthbGxzeW1zIG9ubHkgY29udGFpbnMgdGhlIHN5bWJvbHMgb2YgZnVuY3Rpb25zIGZvciBuaWNlclxuMjEyMjpcdFx0ICBPT1BTIG1lc3NhZ2VzIGFuZCBiYWNrdHJhY2VzIChpLmUuLCBzeW1ib2xzIGZyb20gdGhlIHRleHQgYW5kIGluaXR0ZXh0XG4yMTIzOlx0XHQgIHNlY3Rpb25zKS4gVGhpcyBpcyBzdWZmaWNpZW50IGZvciBtb3N0IGNhc2VzLiBBbmQgb25seSBpZiB5b3Ugd2FudCB0b1xuMjEyNDpcdFx0ICBlbmFibGUga2VybmVsIGxpdmUgcGF0Y2hpbmcsIG9yIG90aGVyIGxlc3MgY29tbW9uIHVzZSBjYXNlcyAoZS5nLixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NzcKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMTM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgS2VybmVsIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGtlcm5lbCBmdW5jdGlvbnMgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gSSYjMzk7bSBsb29raW5nIGZvciBzcGVjaWZpYyBlbnRyeXBvaW50cywgbm90IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBNeSBwcmlvcml0eSBpcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbmV0L2NvcmUvZGV2LmNgIG1vZHVsZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBJIGZvdW5kIHRoZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBmdW5jdGlvbi4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAsIGFuZCBpc24mIzM5O3Qgc3RhdGljLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQuIEkgd2VudCB0aHJvdWdoIHRoZSBlbnRpcmUgZGlmZiwgbm90aW5nIGFsbCBjaGFuZ2VkIGZ1bmN0aW9ucyBhbmQgZmlsZXMsIGluY2x1ZGluZyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBzdGF0aWMgaGVscGVycywgbWFraW5nIHN1cmUgdG8gY29uc2lkZXIgZXZlcnl0aGluZy4gVGhpcyBpbmNsdWRlcyBgcmN1X2RvX2JhdGNoYCwgYGhhbmRsZV9zb2Z0aXJxc2AsIGFuZCBvdGhlcnMsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKSSB3YW50IHRvIGJlIHRob3JvdWdoIGhlcmUuIEkmIzM5O3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBhZ2FpbiB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGUgcGF0Y2gsIGluY2x1ZGluZyB0aG9zZSBpbiBgbmV0L3NvY2tldC5jYCBhbmQgZWxzZXdoZXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGFzIGl0IHN0YW5kcyBvdXQgYXMgdGhlIG1haW4gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBpbnRyb2R1Y2VkLiBJdCBzZWVtcyBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIG15IGNyaXRlcmlhLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXBwZWFyIHRvIGJlIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCwgYEtBTExTWU1TYCwgYW5kIHRoZWlyIGRlcGVuZGVuY2llczogYERFQlVHX0tFUk5FTGAgYW5kIGBORVRgLiBJIG1hZGUgc3VyZSB0byBjaGVjayB0aGUgaWZkZWZzIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AgYXJlIHRoZSBwcmltYXJ5IGd1YXJkcyBmb3IgdGhlIG5ldyBjb2RlLiBJIHRoaW5rIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGNvbXBsZXRlIHNldCBvZiByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4KCklzIHRoaXMgY29kZSBhY3R1YWxseSB3b3J0aHkgb2YgZnV6emluZz8gQmFzZWQgb24gbXkgcmV2aWV3LCB5ZXMsIGFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMsIG1hbmFnaW5nIG5ldGRldmljZSByZWZlcmVuY2VzIHdpdGggYW4gaW4ta2VybmVsIHRyYWNlIGJ1ZmZlciwgaW5jbHVkaW5nIHJhdyBzcGlubG9ja3MsIFJDVSBsaXN0IG1hbmFnZW1lbnQsIGNvbmN1cnJlbmN5IGNvbnRyb2wsIGFuZCBzeW1ib2wgbmFtZSBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucy4gSXQgaXNuJiMzOTt0IGp1c3QgZGVjb3JhdGl2ZSBsb2dnaW5nOyBpdCBpbnRyb2R1Y2VzIG5ldyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2sgcHJvdGVjdGlvbi4gVGhpcyBuZXcgY29kZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc2VyaW91cyByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaXNzdWVzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgdGhlcmUgYXJlIGNsZWFybHkgcmlza3Mgd29ydGggZXhwbG9yaW5nLgoKRXZlcnl0aGluZyBpcyB2ZXJpZmllZCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OywKICAgICYjMzQ7REVCVUdfS0VSTkVMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OywKICAgICYjMzQ7REVCVUdfS0VSTkVMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXG5cbjEuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIGV0Yy4pOyBhbGwgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cgdmlhIHByaW50ay9zdGFja190cmFjZV9wcmludC5cbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cbjMuIExlbmd0aCBwYXJhbWV0ZXJzIChucl9lbnRyaWVzLCB0cmltbWVkX2VudHJpZXMpIGFyZSBzdHJpY3RseSBtYWludGFpbmVkIHN1Y2ggdGhhdCBvbmx5IGluaXRpYWxpemVkIHN0YWNrIHRyYWNlIGVudHJpZXMgYXJlIGV2ZXIgYWNjZXNzZWQgYnkgbWVtY21wLCBtZW1tb3ZlLCBhbmQgc3RhY2tfdHJhY2VfcHJpbnQuXG40LiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIFJDVS9yYXcgc3BpbmxvY2sgdXNhZ2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiYjljOWNkNDQ5N2VmZjI4NDYzZWEyMDVmMTY1MjQxYzBiMTU4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE1OjIyOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggODdjYWZjOTMyZTllNi4uZDUxODMzOGNkMDc0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yMTUzLDYgJiM0MzsyMTUzLDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHsKICAqCiAgKglGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvCiAgKgltb3ZlcyBvdXQuCiYjNDM7ICoKJiM0MzsgKglAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuCiAgKi8KIAogc3RydWN0IG5ldF9kZXZpY2UgewpAQCAtMjMxMiw2ICYjNDM7MjMxNCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKQogCWNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzOwogI2VuZGlmCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OwomIzQzOyNlbmRpZgogCiAJdW5zaWduZWQgaW50CQlvcGVyc3RhdGU7CiAJdW5zaWduZWQgY2hhcgkJbGlua19tb2RlOwpAQCAtNDQ5OCw5ICYjNDM7NDUwMywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJCXRoaXNfY3B1X2RlYygqZGV2LSZndDtwY3B1X3JlZmNudCk7CiAjZWxzZQpAQCAtNDUxMiw2ICYjNDM7NDUyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldikgewomIzQzOwkJc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9pbmMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmMKaW5kZXggOTY4NDhmYzFmMDJiOC4uMjBjNGM5MjcwOGI4YyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmMKQEAgLTI1NjYsNiAmIzQzOzI1NjYsMTAgQEAgc3RhdGljIGJvb2wgcmN1X2RvX2JhdGNoX2NoZWNrX3RpbWUobG9uZyBjb3VudCwgbG9uZyB0bGltaXQsCiAJICAgICAgIGxvY2FsX2Nsb2NrKCkgJmd0Oz0gdGxpbWl0OwogfQogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKJiM0MzsjZW5kaWYKJiM0MzsKIC8qCiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQogICogcGVyaW9kLiAgVGhyb3R0bGUgYXMgc3BlY2lmaWVkIGJ5IHJkcC0mZ3Q7YmxpbWl0LgpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggNzk4MGE0YTIzMmY5Zi4uYWQ5ODg5NTYzMjg4MCAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc29mdGlycS5jCkBAIC01OTksNiAmIzQzOzU5OSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfQogI2VuZGlmCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpOwomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKQogewogCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyAmIzQzOyBNQVhfU09GVElSUV9USU1FOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDNjMDM0Y2JjNWJiMzAuLjYwZGFhZTFjNmYxN2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTMyNTksNiAmIzQzOzMyNTksMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrCiAgKiBAd29ya2VyOiBzZWxmCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLjkzYTc1OTRkNTg2ZTMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMTYzOSw2ICYjNDM7MTE2MzksMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7CiAKICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxCkBAIC0xMTcyMSw2ICYjNDM7MTE3MjksNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJCQkJcHJfZW1lcmcoJiMzNDt1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcbiYjMzQ7LAogCQkJCQkgZGV2LSZndDtuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7CiAJCQkJcmVmX3RyYWNrZXJfZGlyX3ByaW50KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlciwgMTApOwomIzQzOwkJCQlkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIAkJCX0KIAogCQkJd2FybmluZ190aW1lID0gamlmZmllczsKQEAgLTEyMTIxLDYgJiM0MzsxMjEzMCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIAogCWRldi0mZ3Q7cHJpdl9sZW4gPSBzaXplb2ZfcHJpdjsKIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsjZW5kaWYKIAlyZWZfdHJhY2tlcl9kaXJfaW5pdCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEyOCwgJiMzNDtuZXRkZXYmIzM0Oyk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCWRldi0mZ3Q7cGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTsKQEAgLTEyMjIzLDYgJiM0MzsxMjIzNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIGZyZWVfcGNwdToKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCk7CiYjNDM7CWVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIGZyZWVfZGV2OgogI2VuZGlmCiAJcmVmX3RyYWNrZXJfZGlyX2V4aXQoJmFtcDtkZXYtJmd0O3JlZmNudF90cmFja2VyKTsKQEAgLTEyMjkyLDYgJiM0MzsxMjMwNSw3IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gTlVMTDsKICNlbmRpZgomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiAJZnJlZV9wZXJjcHUoZGV2LSZndDtjb3JlX3N0YXRzKTsKIAlkZXYtJmd0O2NvcmVfc3RhdHMgPSBOVUxMOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7eGRwX2J1bGtxKTsKQEAgLTEzNDE4LDYgJiM0MzsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7CiAJLnNldHVwCQkJPSBiYWNrbG9nX25hcGlfc2V0dXAsCiB9OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9OwomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZAogICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuCkBAIC0xMzQyNiw2ICYjNDM7MTM0NDYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCiYjNDM7CW5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpOwogCUJVR19PTighZGV2X2Jvb3RfcGhhc2UpOwogCiAJbmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTsKQEAgLTEzNTI5LDMgJiM0MzsxMzU1MCwyNTQgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB9CiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwomIzQzOyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlhdG9taWNfdCBjb3VudDsKJiM0MzsJaW50IHRyaW1tZWRfZW50cmllczsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07CiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07CiYjNDM7c3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7CiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO25ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwljaGFyICpjcDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ByaW50X3N5bWJvbF9ub19vZmZzZXQoYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspOwomIzQzOwkJaWYgKGNwKQomIzQzOwkJCSpjcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCWlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cHJvY2Vzc19vbmVfd29yayYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ayYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2tzeXNfdW5zaGFyZSYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3NvY2tfc2VuZG1zZ19ub3NlYyYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWMmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O3ImIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtyY3VfZG9fYmF0Y2gmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19iaW5kJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc29ja19yZWxlYXNlJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc3lzX2JwZiYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gbnJfZW50cmllczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wOwomIzQzOwlpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwOwomIzQzOwomIzQzOwkvKiBVcGRhdGUgdHJpbW1lZF9lbnRyaWVzIGZpZWxkLiBEbyBub3QgbW9kaWZ5IG5yX2VudHJpZXMgZmllbGQKJiM0MzsJICogaW4gY2FzZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBpcyBjYWxsZWQgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O3RyaW1tZWRfZW50cmllcyA9PSBwdHItJmd0O25yX2VudHJpZXMpCiYjNDM7CQkJcHRyLSZndDt0cmltbWVkX2VudHJpZXMgPSB0cmltX25ldGRldl90cmFjZShwdHItJmd0O2VudHJpZXMsIHB0ci0mZ3Q7bnJfZW50cmllcyk7CiYjNDM7CX0KJiM0MzsJLyogTWVyZ2UgZHVwbGljYXRlZCBlbnRyaWVzIHVzaW5nIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQlpZiAoIWF0b21pY19yZWFkKCZhbXA7cHRyLSZndDtjb3VudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl0bXAgPSBwdHI7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QpIHsKJiM0MzsJCQlpZiAocHRyLSZndDt0cmltbWVkX2VudHJpZXMgIT0gdG1wLSZndDt0cmltbWVkX2VudHJpZXMgfHwKJiM0MzsJCQkgICAgbWVtY21wKHB0ci0mZ3Q7ZW50cmllcywgdG1wLSZndDtlbnRyaWVzLAomIzQzOwkJCQkgICBwdHItJmd0O3RyaW1tZWRfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCQljb3VudCA9IGF0b21pY19yZWFkKCZhbXA7dG1wLSZndDtjb3VudCk7CiYjNDM7CQkJaWYgKCFjb3VudCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJLyogTW92ZSBjb3VudCBmcm9tIG5vbi1maXJzdCBlbnRyeSB0byBmaXJzdCBlbnRyeS4gKi8KJiM0MzsJCQlhdG9taWNfYWRkKGNvdW50LCAmYW1wO3B0ci0mZ3Q7Y291bnQpOwomIzQzOwkJCWF0b21pY19zdWIoY291bnQsICZhbXA7dG1wLSZndDtjb3VudCk7CiYjNDM7CQl9CiYjNDM7CQkvKiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzCiYjNDM7CQkgKiBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LgomIzQzOwkJICovCiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQomIzQzOwkvKiBSZXBvcnQgYWxsIGVudHJpZXMgZm9yIHRoaXMgZGV2aWNlLiAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCWNvdW50ID0gYXRvbWljX3JlYWQoJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCWlmICghY291bnQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKiBSZXBvcnQgdGhpcyBlbnRyeS4gSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2UKJiM0MzsJCSAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJcG9zJiM0MzsmIzQzOzsKJiM0MzsJCWJhbGFuY2UgJiM0Mzs9IGNvdW50OwomIzQzOwkJcHJfaW5mbygmIzM0O0NhbGwgdHJhY2UgZm9yICVzWyVkXSAlJiM0MztkIGF0XG4mIzM0OywgZGV2LSZndDtuYW1lLCBwb3MsIGNvdW50KTsKJiM0MzsJCXN0YWNrX3RyYWNlX3ByaW50KHB0ci0mZ3Q7ZW50cmllcywgcHRyLSZndDt0cmltbWVkX2VudHJpZXMsIDQpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJaWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtiYWxhbmNlIGFzIG9mICVzWyVkXSBpcyAlZFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBiYWxhbmNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCkgd2FzIGFscmVhZHkKJiM0MzsJICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuCiYjNDM7CSAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhbgomIzQzOwkgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkgewomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3B0ci0mZ3Q7bGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci0mZ3Q7ZW50cmllcyldOwomIzQzOwlpbnQgbnJfZW50cmllczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovCiYjNDM7CWlmIChpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJLyogR2V0IHN0YWNrIHRyYWNlcy4gKi8KJiM0MzsJbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpLCAxKTsKJiM0MzsJLyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvcgomIzQzOwkgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXMKJiM0MzsJICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLgomIzQzOwkgKgomIzQzOwkgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC4KJiM0MzsJICovCiYjNDM7CWlmIChpbl9zb2Z0aXJxKCkpIHsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGVudHJpZXNbaV0gJmd0Oz0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZW50cmllc1tpXSAmbHQ7IGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHsKJiM0MzsJCQkJbnJfZW50cmllcyA9IGkgJiM0MzsgMTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXMKJiM0MzsJICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O25yX2VudHJpZXMgPT0gbnJfZW50cmllcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CiYjNDM7CQkJYXRvbWljX2FkZChkZWx0YSwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJLyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvcgomIzQzOwkgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy4KJiM0MzsJICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlcgomIzQzOwkgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCS8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovCiYjNDM7CQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3B0ci0mZ3Q7Y291bnQsIGRlbHRhKTsKJiM0MzsJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQlwdHItJmd0O3RyaW1tZWRfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQltZW1tb3ZlKHB0ci0mZ3Q7ZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQkvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqLwomIzQzOwkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXAKJiM0MzsgKiBrYWxsc3ltcyBldmVyeSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTsKJiM0MzsJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWlmIChzdHJuY21wKGJ1ZmZlciwgJiMzNDtoYW5kbGVfc29mdGlycXMmIzM0OywgMTUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJY3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspOwomIzQzOwkJaWYgKCFjcCB8fCBzc2NhbmYoY3AsICYjMzQ7JiM0MzslbHgvJWx4JiMzNDssICZhbXA7b2Zmc2V0LCAmYW1wO3NpemUpICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0OwomIzQzOwkJZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmIzQzOyBzaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY29tcGxldGUoJmFtcDtjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLSZndDtjb21wbGV0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjOwomIzQzOwomIzQzOwl0aW1lcl9zZXR1cF9vbl9zdGFjaygmYW1wO3RjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqLwomIzQzOwltb2RfdGltZXIoJmFtcDt0Yy50aW1lciwgamlmZmllcyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi8KJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO3RjLmNvbXBsZXRpb24pOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0Yy50aW1lcik7CiYjNDM7CXRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soJmFtcDt0Yy50aW1lcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGMwNWQ4NmU2M2FiZjcuLmIzZGRjYzI4M2NiYmMgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTcyMyw3ICYjNDM7NzIzLDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCkKIH0KIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZW5kaWYKJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyk7CiAKQEAgLTc5NSw3ICYjNDM7Nzk5LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsCiAJdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJaW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7c2VuZG1zZywgaW5ldDZfc2VuZG1zZywKIAkJCQkgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLApAQCAtMTE0NSw4ICYjNDM7MTE1NSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZgogCXRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgICAgaW50IGZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2Vsc2UKJiM0MztpbmxpbmUKJiM0MzsjZW5kaWYKJiM0MztpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3JlY3Ztc2csCiAJCQkJICAgICBpbmV0Nl9yZWN2bXNnLApAQCAtMjY1Myw5ICYjNDM7MjY2OCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLAogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIH0KIAotc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywKLQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLAotCQkJICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpCiB7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF0KIAkJCQlfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0OAoJCQkJCQkJb3V0cHV0OiAyNjEKCQkJCQkJCXRob3VnaHRzOiAyMzY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2gsIGZvY3VzZWQgb24gdHJhY2luZyBgbmV0X2RldmljZWAgcmVmZXJlbmNlIGNvdW50IG9wZXJhdGlvbnMsIGRvZXNuJiMzOTt0IGluaGVyZW50bHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgbGV0JiMzOTtzIHZlcmlmeS4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20sIG1vZGlmeWluZyB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCBhbmQgdXBkYXRpbmcgY29yZSBmdW5jdGlvbnMgdG8gdHJhY2sgcmVmZXJlbmNlIGNvdW50cy4gS2V5IGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSB0cmFjZSBidWZmZXIgbGlzdCwgbW9kaWZ5aW5nIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAsIGFuZCBhbm5vdGF0aW5nIGZ1bmN0aW9ucyB3aXRoIGBub2lubGluZWAuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXRgLCBgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGV0Yy4KClRoZSBjcml0aWNhbCBhcmVhIHRvIGV2YWx1YXRlIGZvciBLTVNBTiBpcyBhbnkgcmVhZCBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGlzIG5ldyB0cmFjZSBidWZmZXIgaXMgdXNlZC4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSB2YXJpYWJsZXMgdXNlZCBmb3IgbWVtb3J5LgoKQWZ0ZXIgZGl2aW5nIGludG8gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgLCBgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLCBJIHNlZSBubyBvYnZpb3VzIGlzc3Vlcy4gYHN0YWNrX3RyYWNlX3NhdmVgIHBvcHVsYXRlcyB0aGUgc3RhY2sgdHJhY2UsIGFuZCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgYXJlIGNhcmVmdWxseSBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgcmV0dXJuZWQgZW50cmllcyAoYG5yX2VudHJpZXNgIGFuZCBgdHJpbW1lZF9lbnRyaWVzYCkuIFRoZSBzdGF0aWMgYXJyYXkgYG5ldGRldl90cmFjZV9idWZmZXJgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIEJTUy4gQ3JpdGljYWxseSwgdGhlcmUgYXJlIG5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIG9yIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBleHBvc2Uga2VybmVsIG1lbW9yeS4gRXZlbiB0aGUgY2FsbCB0byBgc3ByaW50X3N5bWJvbF9ub19vZmZzZXRgIHVzZXMgaW5pdGlhbGl6ZWQgYnVmZmVycy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBzdGFja190cmFjZV9zYXZlYCBjb3JyZWN0bHkgc2V0cyB0aGUgZW50cmllcywgYW5kIGV2ZXJ5IG9wZXJhdGlvbiBpcyBib3VuZGVkIGNvcnJlY3RseS4gVGhlIHVzZSBvZiBSQ1Ugd2l0aCBgbWVtY21wYCBhbmQgYG1lbW1vdmVgIGFyZSBhbGwgY29uc3RyYWluZWQgYnkgdGhlIHBvcHVsYXRlZCBudW1iZXIgb2YgZW50cmllcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYXZvaWRzIGV4cG9zaW5nIGtlcm5lbCBkYXRhIHRvIHVzZXItc3BhY2UuCgpZZXMsIHRoZXJlIGNvdWxkIGJlIHJhY2UgY29uZGl0aW9ucyBvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBidXQgdGhvc2UgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLgoKSW4gc3VtbWFyeSwgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgZWZmb3J0IGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgYW5kIHByb2NlZWQuIEkmIzM5O2xsIHNhbml0eSBjaGVjayB0aGlzIGNvbmNsdXNpb24gd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXG5cbjEuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIGV0Yy4pOyBhbGwgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cgdmlhIHByaW50ay9zdGFja190cmFjZV9wcmludC5cbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cbjMuIExlbmd0aCBwYXJhbWV0ZXJzIChucl9lbnRyaWVzLCB0cmltbWVkX2VudHJpZXMpIGFyZSBzdHJpY3RseSBtYWludGFpbmVkIHN1Y2ggdGhhdCBvbmx5IGluaXRpYWxpemVkIHN0YWNrIHRyYWNlIGVudHJpZXMgYXJlIGV2ZXIgYWNjZXNzZWQgYnkgbWVtY21wLCBtZW1tb3ZlLCBhbmQgc3RhY2tfdHJhY2VfcHJpbnQuXG40LiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIFJDVS9yYXcgc3BpbmxvY2sgdXNhZ2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW4ta2VybmVsIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nL2RlYnVnZ2luZyBtZWNoYW5pc20gdXNpbmcgYSBzdGF0aWMgdHJhY2UgYnVmZmVyIGxpc3QgYW5kIHN0YWNrIHRyYWNlIGNhcHR1cmVzLiBcblxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxuMi4gQWxsIHRyYWNlIGJ1ZmZlcnMgYW5kIHN0YWNrIGFycmF5cyBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgKHN0YXRpYyBCU1MgYnVmZmVyIHBvb2wgYW5kIHplcm9lZCBzdGFjayBidWZmZXJzKSBvciBleHBsaWNpdGx5IHdyaXR0ZW4gdXAgdG8gdGhlIGNvdW50IHJldHVybmVkIGJ5IHN0YWNrX3RyYWNlX3NhdmUoKSBiZWZvcmUgYW55IHJlYWRzIG9yIGNvbXBhcmlzb25zLlxuMy4gTGVuZ3RoIHBhcmFtZXRlcnMgKG5yX2VudHJpZXMsIHRyaW1tZWRfZW50cmllcykgYXJlIHN0cmljdGx5IG1haW50YWluZWQgc3VjaCB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgc3RhY2sgdHJhY2UgZW50cmllcyBhcmUgZXZlciBhY2Nlc3NlZCBieSBtZW1jbXAsIG1lbW1vdmUsIGFuZCBzdGFja190cmFjZV9wcmludC5cbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyMjo1Ni4xOTU1MjU2OThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5OTA2NzgwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIixcbiAgICBcIkRFQlVHX0tFUk5FTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXFxuXFxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxcbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cXG4zLiBMZW5ndGggcGFyYW1ldGVycyAobnJfZW50cmllcywgdHJpbW1lZF9lbnRyaWVzKSBhcmUgc3RyaWN0bHkgbWFpbnRhaW5lZCBzdWNoIHRoYXQgb25seSBpbml0aWFsaXplZCBzdGFjayB0cmFjZSBlbnRyaWVzIGFyZSBldmVyIGFjY2Vzc2VkIGJ5IG1lbWNtcCwgbWVtbW92ZSwgYW5kIHN0YWNrX3RyYWNlX3ByaW50LlxcbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhIG5ldHdvcmsgZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFjZSBidWZmZXIgdHJhY2tpbmcgbWVjaGFuaXNtIHVuZGVyIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSIGFuZCBDT05GSUdfS0FMTFNZTVMuIEl0IHNhdmVzIHN0YWNrIHRyYWNlcyBvbiBfX2Rldl9ob2xkKCkgYW5kIF9fZGV2X3B1dCgpLCBtYW5hZ2luZyBhbiBSQ1UgbGlzdCBvZiB0cmFjZSBidWZmZXJzIHdpdGggYSByYXcgc3BpbmxvY2sgYW5kIG1lbW9yeSBjb21wYXJpc29ucywgd2hpY2ggYWZmZWN0cyBjb3JlIG5ldHdvcmsgZGV2aWNlIGxpZmVjeWNsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyMjo1Ni4xOTU1MzA2NjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMzUxMDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3YmI5YzljZDQ0OTdlZmYyODQ2M2VhMjA1ZjE2NTI0MWMwYjE1OGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6MjI6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA4N2NhZmM5MzJlOWU2Li5kNTE4MzM4Y2QwNzQ5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTIxNTMsNiArMjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuICAqXFxuICAqXFx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xcbiAgKlxcdG1vdmVzIG91dC5cXG4rICpcXG4rICpcXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXFxuICAqL1xcbiBcXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xcbkBAIC0yMzEyLDYgKzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxcbiBcXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcXG4gI2VuZGlmXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcXG4rI2VuZGlmXFxuIFxcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcGVyc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRsaW5rX21vZGU7XFxuQEAgLTQ0OTgsOSArNDUwMywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbit2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGlmIChkZXYpIHtcXG4rXFx0XFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxcbiBcXHRcXHR0aGlzX2NwdV9kZWMoKmRldi1cXHUwMDNlcGNwdV9yZWZjbnQpO1xcbiAjZWxzZVxcbkBAIC00NTEyLDYgKzQ1MjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0aWYgKGRldikge1xcbitcXHRcXHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0XFx0dGhpc19jcHVfaW5jKCpkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4gI2Vsc2VcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLjIwYzRjOTI3MDhiOGMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbkBAIC0yNTY2LDYgKzI1NjYsMTAgQEAgc3RhdGljIGJvb2wgcmN1X2RvX2JhdGNoX2NoZWNrX3RpbWUobG9uZyBjb3VudCwgbG9uZyB0bGltaXQsXFxuIFxcdCAgICAgICBsb2NhbF9jbG9jaygpIFxcdTAwM2U9IHRsaW1pdDtcXG4gfVxcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApO1xcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIEludm9rZSBhbnkgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgbWFkZSBpdCB0byB0aGUgZW5kIG9mIHRoZWlyIGdyYWNlXFxuICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtXFx1MDAzZWJsaW1pdC5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmNcXG5pbmRleCA3OTgwYTRhMjMyZjlmLi5hZDk4ODk1NjMyODgwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zb2Z0aXJxLmNcXG4rKysgYi9rZXJuZWwvc29mdGlycS5jXFxuQEAgLTU5OSw2ICs1OTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxcbiAjZW5kaWZcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgTUFYX1NPRlRJUlFfVElNRTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jXFxuaW5kZXggM2MwMzRjYmM1YmIzMC4uNjBkYWFlMWM2ZjE3ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmNcXG4rKysgYi9rZXJuZWwvd29ya3F1ZXVlLmNcXG5AQCAtMzI1OSw2ICszMjU5LDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrXFxuICAqIEB3b3JrZXI6IHNlbGZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDM4MzM2ODU4YzE2OGYuLjkzYTc1OTRkNTg2ZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC0xMTYzOSw2ICsxMTYzOSwxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxcbisjZW5kaWZcXG4rXFxuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xcbiBcXG4gI2RlZmluZSBXQUlUX1JFRlNfTUlOX01TRUNTIDFcXG5AQCAtMTE3MjEsNiArMTE3MjksNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuIFxcdFxcdFxcdFxcdHByX2VtZXJnKFxcXCJ1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCBkZXYtXFx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcXG4gXFx0XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX3ByaW50KFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMCk7XFxuK1xcdFxcdFxcdFxcdGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3YXJuaW5nX3RpbWUgPSBqaWZmaWVzO1xcbkBAIC0xMjEyMSw2ICsxMjEzMCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4gXFxuIFxcdGRldi1cXHUwMDNlcHJpdl9sZW4gPSBzaXplb2ZfcHJpdjtcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rI2VuZGlmXFxuIFxcdHJlZl90cmFja2VyX2Rpcl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJuZXRkZXZcXFwiKTtcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0ZGV2LVxcdTAwM2VwY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpO1xcbkBAIC0xMjIyMyw2ICsxMjIzNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4gZnJlZV9wY3B1OlxcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxcbiBcXHRmcmVlX3BlcmNwdShkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4rXFx0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xcbiBmcmVlX2RldjpcXG4gI2VuZGlmXFxuIFxcdHJlZl90cmFja2VyX2Rpcl9leGl0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyKTtcXG5AQCAtMTIyOTIsNiArMTIzMDUsNyBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNlcGNwdV9yZWZjbnQpO1xcbiBcXHRkZXYtXFx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcXG4gI2VuZGlmXFxuK1xcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcXG4gXFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2Vjb3JlX3N0YXRzKTtcXG4gXFx0ZGV2LVxcdTAwM2Vjb3JlX3N0YXRzID0gTlVMTDtcXG4gXFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2V4ZHBfYnVsa3EpO1xcbkBAIC0xMzQxOCw2ICsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XFxuIFxcdC5zZXR1cFxcdFxcdFxcdD0gYmFja2xvZ19uYXBpX3NldHVwLFxcbiB9O1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcXG4rI2VuZGlmXFxuK1xcbiAvKlxcbiAgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWRcXG4gICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXFxuQEAgLTEzNDI2LDYgKzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IGksIHJjID0gLUVOT01FTTtcXG4gXFxuK1xcdG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpO1xcbiBcXHRCVUdfT04oIWRldl9ib290X3BoYXNlKTtcXG4gXFxuIFxcdG5ldF9kZXZfc3RydWN0X2NoZWNrKCk7XFxuQEAgLTEzNTI5LDMgKzEzNTUwLDI1NCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcXG4gfVxcbiBcXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XFxuK1xcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK1xcbisjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxcbitzdGF0aWMgc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdGF0b21pY190IGNvdW50O1xcbitcXHRpbnQgdHJpbW1lZF9lbnRyaWVzO1xcbitcXHRpbnQgbnJfZW50cmllcztcXG4rXFx0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcXG4rfSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XFxuK3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcXG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xcbitcXG4rc3RhdGljIGludCBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkrKylcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rcHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xcbitcXG4rc3RhdGljIGludCB0cmltX25ldGRldl90cmFjZSh1bnNpZ25lZCBsb25nICplbnRyaWVzLCBpbnQgbnJfZW50cmllcylcXG4re1xcbitcXHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xcbitcXHRjaGFyICpjcDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdHNwcmludF9zeW1ib2xfbm9fb2Zmc2V0KGJ1ZmZlciwgZW50cmllc1tpXSk7XFxuK1xcdFxcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJyAnKTtcXG4rXFx0XFx0aWYgKGNwKVxcbitcXHRcXHRcXHQqY3AgPSAnXFxcXDAnO1xcbitcXHRcXHRpZiAoYnVmZmVyWzBdID09ICdwJykge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJwcm9jZXNzX29uZV93b3JrXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpICsgMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ2snKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcImtzeXNfdW5zaGFyZVxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdzJykge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJzb2NrX3NlbmRtc2dfbm9zZWNcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXN0cmNtcChidWZmZXIsIFxcXCJzb2NrX3JlY3Ztc2dfbm9zZWNcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncicpIHtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcXFwicmN1X2RvX2JhdGNoXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpICsgMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ18nKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcIl9fc3lzX2JpbmRcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXN0cmNtcChidWZmZXIsIFxcXCJfX3NvY2tfcmVsZWFzZVxcXCIpIHx8XFxuK1xcdFxcdFxcdCAgICAhc3RyY21wKGJ1ZmZlciwgXFxcIl9fc3lzX2JwZlxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcImRvX3NvY2tfc2V0c29ja29wdFxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gbnJfZW50cmllcztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0ciwgKnRtcDtcXG4rXFx0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcXG4rXFxuK1xcdC8qIFVwZGF0ZSB0cmltbWVkX2VudHJpZXMgZmllbGQuIERvIG5vdCBtb2RpZnkgbnJfZW50cmllcyBmaWVsZFxcbitcXHQgKiBpbiBjYXNlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGlzIGNhbGxlZCBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxcbitcXHRcXHRcXHRcXHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcXG4rXFx0XFx0aWYgKHB0ci1cXHUwMDNldHJpbW1lZF9lbnRyaWVzID09IHB0ci1cXHUwMDNlbnJfZW50cmllcylcXG4rXFx0XFx0XFx0cHRyLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgPSB0cmltX25ldGRldl90cmFjZShwdHItXFx1MDAzZWVudHJpZXMsIHB0ci1cXHUwMDNlbnJfZW50cmllcyk7XFxuK1xcdH1cXG4rXFx0LyogTWVyZ2UgZHVwbGljYXRlZCBlbnRyaWVzIHVzaW5nIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXFxuK1xcdFxcdFxcdFxcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xcbitcXHRcXHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXFxuK1xcdFxcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNnB0ci1cXHUwMDNlY291bnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dG1wID0gcHRyO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAocHRyLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgIT0gdG1wLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgfHxcXG4rXFx0XFx0XFx0ICAgIG1lbWNtcChwdHItXFx1MDAzZWVudHJpZXMsIHRtcC1cXHUwMDNlZW50cmllcyxcXG4rXFx0XFx0XFx0XFx0ICAgcHRyLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xcbitcXHRcXHRcXHRjb3VudCA9IGF0b21pY19yZWFkKFxcdTAwMjZ0bXAtXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0aWYgKCFjb3VudClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXFxuK1xcdFxcdFxcdGF0b21pY19hZGQoY291bnQsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0YXRvbWljX3N1Yihjb3VudCwgXFx1MDAyNnRtcC1cXHUwMDNlY291bnQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXNcXG4rXFx0XFx0ICogY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcdC8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxcbitcXHRcXHRcXHRcXHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcXG4rXFx0XFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xcbitcXHRcXHRjb3VudCA9IGF0b21pY19yZWFkKFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0aWYgKCFjb3VudClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdC8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZVxcbitcXHRcXHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwb3MrKztcXG4rXFx0XFx0YmFsYW5jZSArPSBjb3VudDtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiQ2FsbCB0cmFjZSBmb3IgJXNbJWRdICUrZCBhdFxcXFxuXFxcIiwgZGV2LVxcdTAwM2VuYW1lLCBwb3MsIGNvdW50KTtcXG4rXFx0XFx0c3RhY2tfdHJhY2VfcHJpbnQocHRyLVxcdTAwM2VlbnRyaWVzLCBwdHItXFx1MDAzZXRyaW1tZWRfZW50cmllcywgNCk7XFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcdGlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpXFxuK1xcdFxcdHByX2luZm8oXFxcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0LyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcXG4rXFx0ICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuXFxuK1xcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxcbitcXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxcbitcXHQgKi9cXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci1cXHUwMDNlZW50cmllcyldO1xcbitcXHRpbnQgbnJfZW50cmllcztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xcbitcXHRpZiAoaW5fbm1pKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LyogR2V0IHN0YWNrIHRyYWNlcy4gKi9cXG4rXFx0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXFx1MDAzZWVudHJpZXMpLCAxKTtcXG4rXFx0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxcbitcXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xcbitcXHQgKiBvZiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0cnlpbmcgdG8gY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxcbitcXHQgKi9cXG4rXFx0aWYgKGluX3NvZnRpcnEoKSkge1xcbitcXHRcXHRpbnQgaTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKGVudHJpZXNbaV0gXFx1MDAzZT0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBlbnRyaWVzW2ldIFxcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xcbitcXHRcXHRcXHRcXHRucl9lbnRyaWVzID0gaSArIDE7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXFxuK1xcdCAqIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcsIHdlIGRvbid0IHVzZSBsb2NrIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcXG4rXFx0XFx0XFx0XFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XFxuK1xcdFxcdGlmIChwdHItXFx1MDAzZW5yX2VudHJpZXMgPT0gbnJfZW50cmllcyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW1lbWNtcChwdHItXFx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7XFxuK1xcdFxcdFxcdGF0b21pY19hZGQoZGVsdGEsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXFxuK1xcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxcbitcXHQgKiBCdXQgd2UgdXNlIHJhdyBzcGlubG9jayBoZXJlIGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzb21lIG90aGVyXFxuK1xcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXFxuK1xcdCAqL1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRyLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHRyLVxcdTAwM2Vjb3VudCwgZGVsdGEpO1xcbitcXHRcXHRwdHItXFx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xcbitcXHRcXHRwdHItXFx1MDAzZXRyaW1tZWRfZW50cmllcyA9IG5yX2VudHJpZXM7XFxuK1xcdFxcdG1lbW1vdmUocHRyLVxcdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rXFx0XFx0LyogQXBwZW5kIGl0IGluIFJDVSBtYW5uZXIsIGZvciByZWFkZXJzIGFyZSBsb2NrbGVzcy4gKi9cXG4rXFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNnB0ci1cXHUwMDNlbGlzdCwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7XFxuK1xcbitzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3Qge1xcbitcXHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcXG4rXFx0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcXG4rfTtcXG4rXFxuKy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcXG4rICoga2FsbHN5bXMgZXZlcnkgdGltZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07XFxuK1xcdGludCBucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpLCAxKTtcXG4rXFx0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcXG4rXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7XFxuK1xcdGNoYXIgKmNwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0c3ByaW50X3N5bWJvbChidWZmZXIsIGVudHJpZXNbaV0pO1xcbitcXHRcXHRpZiAoc3RybmNtcChidWZmZXIsIFxcXCJoYW5kbGVfc29mdGlycXNcXFwiLCAxNSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRjcCA9IHN0cmNocihidWZmZXIsICcrJyk7XFxuK1xcdFxcdGlmICghY3AgfHwgc3NjYW5mKGNwLCBcXFwiKyVseC8lbHhcXFwiLCBcXHUwMDI2b2Zmc2V0LCBcXHUwMDI2c2l6ZSkgIT0gMilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XFxuK1xcdFxcdGVuZF9vZl9oYW5kbGVfc29mdGlycXMgPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgKyBzaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjb21wbGV0ZShcXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cXHUwMDNlY29tcGxldGlvbik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgdGM7XFxuK1xcbitcXHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcXHUwMDI2dGMudGltZXIsIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYywgMCk7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2dGMuY29tcGxldGlvbik7XFxuK1xcdC8qIFNjaGVkdWxlIGEgY2FsbCB0byBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKS4gKi9cXG4rXFx0bW9kX3RpbWVyKFxcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XFxuK1xcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi9cXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2dGMuY29tcGxldGlvbik7XFxuK1xcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGNvbXBsZXRlLiAqL1xcbitcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2dGMudGltZXIpO1xcbitcXHR0aW1lcl9kZXN0cm95X29uX3N0YWNrKFxcdTAwMjZ0Yy50aW1lcik7XFxuK31cXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCBjMDVkODZlNjNhYmY3Li5iM2RkY2MyODNjYmJjIDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC03MjMsNyArNzIzLDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpO1xcbiBcXG4tc3RhdGljIHZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2VuZGlmXFxuK3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4gXFxuQEAgLTc5NSw3ICs3OTksMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCxcXG4gXFx0dHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2Vsc2VcXG4raW5saW5lXFxuKyNlbmRpZlxcbitpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcXG4ge1xcbiBcXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVxcdTAwM2VvcHMpLVxcdTAwM2VzZW5kbXNnLCBpbmV0Nl9zZW5kbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxcbkBAIC0xMTQ1LDggKzExNTUsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGZcXG4gXFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLVxcdFxcdFxcdFxcdCAgICAgaW50IGZsYWdzKVxcbitzdGF0aWNcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitub2lubGluZVxcbisjZWxzZVxcbitpbmxpbmVcXG4rI2VuZGlmXFxuK2ludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlcmVjdm1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICBpbmV0Nl9yZWN2bXNnLFxcbkBAIC0yNjUzLDkgKzI2NjgsMTIgQEAgc3RhdGljIGludCBjb3B5X21zZ2hkcl9mcm9tX3VzZXIoc3RydWN0IG1zZ2hkciAqa21zZyxcXG4gXFx0cmV0dXJuIGVyciBcXHUwMDNjIDAgPyBlcnIgOiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLFxcbi1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcyxcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxcbitzdGF0aWNcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitub2lubGluZVxcbisjZW5kaWZcXG4raW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBjaGFyIGN0bFtzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgMjBdXFxuIFxcdFxcdFxcdFxcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjIyOjU2LjU5OTc3Njg2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc5NTgwMzk0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcIixcbiAgICBcIktBTExTWU1TXCIsXG4gICAgXCJERUJVR19LRVJORUxcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2UgY291bnQgdHJhY2UgYnVmZmVyIHRyYWNraW5nIG1lY2hhbmlzbSB1bmRlciBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiBhbmQgQ09ORklHX0tBTExTWU1TLiBJdCBzYXZlcyBzdGFjayB0cmFjZXMgb24gX19kZXZfaG9sZCgpIGFuZCBfX2Rldl9wdXQoKSwgbWFuYWdpbmcgYW4gUkNVIGxpc3Qgb2YgdHJhY2UgYnVmZmVycyB3aXRoIGEgcmF3IHNwaW5sb2NrIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMsIHdoaWNoIGFmZmVjdHMgY29yZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDdiYjljOWNkNDQ5N2VmZjI4NDYzZWEyMDVmMTY1MjQxYzBiMTU4YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjIyOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg3Y2FmYzkzMmU5ZTYuLmQ1MTgzMzhjZDA3NDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMjE1Myw2ICsyMTUzLDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlxuICAqXHRGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvXG4gICpcdG1vdmVzIG91dC5cbisgKlxuKyAqXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXG4gICovXG4gXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xuQEAgLTIzMTIsNiArMjMxNCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbiBcdGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzO1xuICNlbmRpZlxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XG4rI2VuZGlmXG4gXG4gXHR1bnNpZ25lZCBpbnRcdFx0b3BlcnN0YXRlO1xuIFx0dW5zaWduZWQgY2hhclx0XHRsaW5rX21vZGU7XG5AQCAtNDQ5OCw5ICs0NTAzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfbml0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH1cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfZGVjKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5AQCAtNDUxMiw2ICs0NTI0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0XHR0aGlzX2NwdV9pbmMoKmRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA5Njg0OGZjMWYwMmI4Li4yMGM0YzkyNzA4YjhjIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjU2Niw2ICsyNTY2LDEwIEBAIHN0YXRpYyBib29sIHJjdV9kb19iYXRjaF9jaGVja190aW1lKGxvbmcgY291bnQsIGxvbmcgdGxpbWl0LFxuIFx0ICAgICAgIGxvY2FsX2Nsb2NrKCkgXHUwMDNlPSB0bGltaXQ7XG4gfVxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKTtcbisjZW5kaWZcbitcbiAvKlxuICAqIEludm9rZSBhbnkgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgbWFkZSBpdCB0byB0aGUgZW5kIG9mIHRoZWlyIGdyYWNlXG4gICogcGVyaW9kLiAgVGhyb3R0bGUgYXMgc3BlY2lmaWVkIGJ5IHJkcC1cdTAwM2VibGltaXQuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmNcbmluZGV4IDc5ODBhNGEyMzJmOWYuLmFkOTg4OTU2MzI4ODAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc29mdGlycS5jXG4rKysgYi9rZXJuZWwvc29mdGlycS5jXG5AQCAtNTk5LDYgKzU5OSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cbiAjZW5kaWZcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIE1BWF9TT0ZUSVJRX1RJTUU7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jXG5pbmRleCAzYzAzNGNiYzViYjMwLi42MGRhYWUxYzZmMTdmIDEwMDY0NFxuLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jXG4rKysgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbkBAIC0zMjU5LDYgKzMyNTksMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rI2VuZGlmXG4rXG4gLyoqXG4gICogcHJvY2Vzc19vbmVfd29yayAtIHByb2Nlc3Mgc2luZ2xlIHdvcmtcbiAgKiBAd29ya2VyOiBzZWxmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggMzgzMzY4NThjMTY4Zi4uOTNhNzU5NGQ1ODZlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTExNjM5LDYgKzExNjM5LDE0IEBAIGludCBuZXRkZXZfcmVmY250X3JlYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxuKyNlbmRpZlxuK1xuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xuIFxuICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxXG5AQCAtMTE3MjEsNiArMTE3MjksNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4gXHRcdFx0XHRwcl9lbWVyZyhcInVucmVnaXN0ZXJfbmV0ZGV2aWNlOiB3YWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZS4gVXNhZ2UgY291bnQgPSAlZFxcblwiLFxuIFx0XHRcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcbiBcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9wcmludChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEwKTtcbitcdFx0XHRcdGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3YXJuaW5nX3RpbWUgPSBqaWZmaWVzO1xuQEAgLTEyMTIxLDYgKzEyMTMwLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIFxuIFx0ZGV2LVx1MDAzZXByaXZfbGVuID0gc2l6ZW9mX3ByaXY7XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuKyNlbmRpZlxuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0ZGV2XCIpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcbkBAIC0xMjIyMyw2ICsxMjIzNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBmcmVlX3BjcHU6XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4rXHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gZnJlZV9kZXY6XG4gI2VuZGlmXG4gXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuQEAgLTEyMjkyLDYgKzEyMzA1LDcgQEAgdm9pZCBmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiBcdGRldi1cdTAwM2VwY3B1X3JlZmNudCA9IE5VTEw7XG4gI2VuZGlmXG4rXHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlY29yZV9zdGF0cyk7XG4gXHRkZXYtXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNleGRwX2J1bGtxKTtcbkBAIC0xMzQxOCw2ICsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IGJhY2tsb2dfbmFwaV9zZXR1cCxcbiB9O1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9O1xuKyNlbmRpZlxuK1xuIC8qXG4gICogICAgICAgVGhpcyBpcyBjYWxsZWQgc2luZ2xlIHRocmVhZGVkIGR1cmluZyBib290LCBzbyBubyBuZWVkXG4gICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXG5AQCAtMTM0MjYsNiArMTM0NDYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB7XG4gXHRpbnQgaSwgcmMgPSAtRU5PTUVNO1xuIFxuK1x0bmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KCk7XG4gXHRCVUdfT04oIWRldl9ib290X3BoYXNlKTtcbiBcbiBcdG5ldF9kZXZfc3RydWN0X2NoZWNrKCk7XG5AQCAtMTM1MjksMyArMTM1NTAsMjU0IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIH1cbiBcbiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbitcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK1xuKyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4XG4rc3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbitcdGF0b21pY190IGNvdW50O1xuK1x0aW50IHRyaW1tZWRfZW50cmllcztcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcbit9IG5ldGRldl90cmFjZV9idWZmZXJbTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFXTtcbitzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcbitzdGF0aWMgYm9vbCBuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkrKylcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rcHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXG4re1xuK1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbitcdGNoYXIgKmNwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0c3ByaW50X3N5bWJvbF9ub19vZmZzZXQoYnVmZmVyLCBlbnRyaWVzW2ldKTtcbitcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnICcpO1xuK1x0XHRpZiAoY3ApXG4rXHRcdFx0KmNwID0gJ1xcMCc7XG4rXHRcdGlmIChidWZmZXJbMF0gPT0gJ3AnKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcInByb2Nlc3Nfb25lX3dvcmtcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdrJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJrc3lzX3Vuc2hhcmVcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdzJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJzb2NrX3NlbmRtc2dfbm9zZWNcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwic29ja19yZWN2bXNnX25vc2VjXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncicpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwicmN1X2RvX2JhdGNoXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnXycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYmluZFwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3NvY2tfcmVsZWFzZVwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3N5c19icGZcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcImRvX3NvY2tfc2V0c29ja29wdFwiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIG5yX2VudHJpZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XG4rXHRpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwO1xuK1xuK1x0LyogVXBkYXRlIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gRG8gbm90IG1vZGlmeSBucl9lbnRyaWVzIGZpZWxkXG4rXHQgKiBpbiBjYXNlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGlzIGNhbGxlZCBhZ2Fpbi5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdGlmIChwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzID09IHB0ci1cdTAwM2Vucl9lbnRyaWVzKVxuK1x0XHRcdHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgPSB0cmltX25ldGRldl90cmFjZShwdHItXHUwMDNlZW50cmllcywgcHRyLVx1MDAzZW5yX2VudHJpZXMpO1xuK1x0fVxuK1x0LyogTWVyZ2UgZHVwbGljYXRlZCBlbnRyaWVzIHVzaW5nIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0dG1wID0gcHRyO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QpIHtcbitcdFx0XHRpZiAocHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyAhPSB0bXAtXHUwMDNldHJpbW1lZF9lbnRyaWVzIHx8XG4rXHRcdFx0ICAgIG1lbWNtcChwdHItXHUwMDNlZW50cmllcywgdG1wLVx1MDAzZWVudHJpZXMsXG4rXHRcdFx0XHQgICBwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0aWYgKCFjb3VudClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4rXHRcdFx0YXRvbWljX2FkZChjb3VudCwgXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0XHRhdG9taWNfc3ViKGNvdW50LCBcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHR9XG4rXHRcdC8qIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXNcbitcdFx0ICogY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1x0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGNvdW50ID0gYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0aWYgKCFjb3VudClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXG4rXHRcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdHBvcysrO1xuK1x0XHRiYWxhbmNlICs9IGNvdW50O1xuK1x0XHRwcl9pbmZvKFwiQ2FsbCB0cmFjZSBmb3IgJXNbJWRdICUrZCBhdFxcblwiLCBkZXYtXHUwMDNlbmFtZSwgcG9zLCBjb3VudCk7XG4rXHRcdHN0YWNrX3RyYWNlX3ByaW50KHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzLCA0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHR9XG4rXHRpZiAoIW5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkKVxuK1x0XHRwcl9pbmZvKFwiYmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcXG5cIiwgZGV2LVx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcbitcdCAqIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCBubyBtb3JlIF9fZGV2X3B1dCgpL19fZGV2X2hvbGQoKSBjYWxsIGNhbiBiZSBtYWRlLlxuK1x0ICogVGhlcmVmb3JlLCBubyBtb3JlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGNhbGwgd2lsbCBiZSBtYWRlLCBhbmQgd2UgY2FuXG4rXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxuK1x0ICovXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XG4rXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuK1x0aW50IG5yX2VudHJpZXM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovXG4rXHRpZiAoaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdC8qIEdldCBzdGFjayB0cmFjZXMuICovXG4rXHRucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKSwgMSk7XG4rXHQvKiBUcmltIHRyYWNlcyBvZiBwcm9jZXNzIGNvbnRleHQgbm93IGlmIGNhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgZm9yXG4rXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xuK1x0ICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLlxuK1x0ICpcbitcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxuK1x0ICovXG4rXHRpZiAoaW5fc29mdGlycSgpKSB7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0XHRpZiAoZW50cmllc1tpXSBcdTAwM2U9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgZW50cmllc1tpXSBcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xuK1x0XHRcdFx0bnJfZW50cmllcyA9IGkgKyAxO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXG4rXHQgKiBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLCB3ZSBkb24ndCB1c2UgbG9jayBoZXJlLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzID09IG5yX2VudHJpZXMgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkge1xuK1x0XHRcdGF0b21pY19hZGQoZGVsdGEsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXHQvKiBBZGQgYSBuZXcgZW50cnkuIFdlIGRvbid0IHJlLWNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIHdpdGggbG9jayBoZWxkLCBmb3JcbitcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxuK1x0ICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlclxuK1x0ICogcmF3IHNwaW5sb2NrIGFscmVhZHkgaGVsZC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNnB0ci1cdTAwM2VsaXN0KTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZwdHItXHUwMDNlY291bnQsIGRlbHRhKTtcbitcdFx0cHRyLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuK1x0XHRwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdC8qIEFwcGVuZCBpdCBpbiBSQ1UgbWFubmVyLCBmb3IgcmVhZGVycyBhcmUgbG9ja2xlc3MuICovXG4rXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbitcdH0gZWxzZSB7XG4rXHRcdG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTtcbitcdH1cbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7XG4rXG4rc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHtcbitcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xuK1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbit9O1xuK1xuKy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbisgKiBrYWxsc3ltcyBldmVyeSB0aW1lLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07XG4rXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4rXHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7XG4rXHRjaGFyICpjcDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbitcdFx0aWYgKHN0cm5jbXAoYnVmZmVyLCBcImhhbmRsZV9zb2Z0aXJxc1wiLCAxNSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJysnKTtcbitcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwiKyVseC8lbHhcIiwgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0O1xuK1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICsgc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjb21wbGV0ZShcdTAwMjZjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLVx1MDAzZWNvbXBsZXRpb24pO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuK1xuK1x0dGltZXJfc2V0dXBfb25fc3RhY2soXHUwMDI2dGMudGltZXIsIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYywgMCk7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4rXHQvKiBTY2hlZHVsZSBhIGNhbGwgdG8gbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkuICovXG4rXHRtb2RfdGltZXIoXHUwMDI2dGMudGltZXIsIGppZmZpZXMpO1xuK1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuK1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZ0Yy5jb21wbGV0aW9uKTtcbitcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGNvbXBsZXRlLiAqL1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuK1x0dGltZXJfZGVzdHJveV9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lcik7XG4rfVxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xuaW5kZXggYzA1ZDg2ZTYzYWJmNy4uYjNkZGNjMjgzY2JiYyAxMDA2NDRcbi0tLSBhL25ldC9zb2NrZXQuY1xuKysrIGIvbmV0L3NvY2tldC5jXG5AQCAtNzIzLDcgKzcyMywxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpXG4gfVxuIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7XG4gXG4tc3RhdGljIHZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2VuZGlmXG4rdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcyA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyk7XG4gXG5AQCAtNzk1LDcgKzc5OSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LFxuIFx0dHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2Vsc2VcbitpbmxpbmVcbisjZW5kaWZcbitpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlc2VuZG1zZywgaW5ldDZfc2VuZG1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldF9zZW5kbXNnLCBzb2NrLCBtc2csXG5AQCAtMTE0NSw4ICsxMTU1LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19yZWN2X2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsIGludCBmXG4gXHR0cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHNrLCByZXQsIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHRcdCAgICAgaW50IGZsYWdzKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZWxzZVxuK2lubGluZVxuKyNlbmRpZlxuK2ludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXJlY3Ztc2csXG4gXHRcdFx0XHQgICAgIGluZXQ2X3JlY3Ztc2csXG5AQCAtMjY1Myw5ICsyNjY4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9tc2doZHJfZnJvbV91c2VyKHN0cnVjdCBtc2doZHIgKmttc2csXG4gXHRyZXR1cm4gZXJyIFx1MDAzYyAwID8gZXJyIDogMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbmRpZlxuK2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHQgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIDIwXVxuIFx0XHRcdFx0X19hbGlnbmVkKHNpemVvZihfX2tlcm5lbF9zaXplX3QpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjIyOjU2LjU5OTc3ODI3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODMyODY3Mjc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEZWJ1ZyBQYXRjaCBmb3IgTmV0ZGV2IFJlZmNvdW50IFRyYWNraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBkZWJ1ZyBvciBkaWFnbm9zdGljIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IHRyYWNraW5nIHJlZmVyZW5jZSBjb3VudHMgb24gbmV0d29yayBkZXZpY2VzLiBJdCBzZWVtcyB0byBiZSBhIHByb2FjdGl2ZSBtZWFzdXJlIHRvIGNhdGNoIG1lbW9yeSBsZWFrcyBvciBvdGhlciByZWZjb3VudC1yZWxhdGVkIGlzc3VlcywgcG90ZW50aWFsbHkgZm9yIHVzZSB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcywgaXMgdGhpcyBqdXN0IFwiZGVjb3JhdGl2ZVwiIGxpa2UgbG9nZ2luZyBvciB0cmFjaW5nIHRoYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lIG1lbnRpb25zPyBIb3dldmVyLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyB0d28gbmV3IGZ1bmN0aW9uczogYG5ldGRldl90cmFjZV9idWZmZXJfbGlzdGAgYW5kIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLiBJdCBhcHBlYXJzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byBjcml0aWNhbCBwb2ludHMgd2l0aGluIHRoZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUg4oCTIHNwZWNpZmljYWxseSwgZXZlcnkgY2FsbCB0byBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIOKAkyBwcm92aWRlZCB0aGF0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIGBDT05GSUdfS0FMTFNZTVNgKSBhcmUgZW5hYmxlZC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgd2lsbCBhZmZlY3QgZXhlY3V0aW9uIGFuZCBpcyBub3QgZGVjb3JhdGl2ZS5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gYSBiaXQuIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQgdXNlcyBgc3RhY2tfdHJhY2Vfc2F2ZWAgdG8gY2FwdHVyZSBhIHN0YWNrIHRyYWNlLCB3aGljaCBpcyBhIGJpZyBoaW50IHRoYXQgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aGVyZSBhIGRldmljZSBpcyBiZWluZyBoZWxkIG9yIHJlbGVhc2VkLiBUaGlzIHRyYWNlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIGZpeGVkLXNpemUgYnVmZmVyLCBgbmV0ZGV2X3RyYWNlX2J1ZmZlclszMjc2OF1gLiBJIG5vdGUgdGhlIHByZXNlbmNlIG9mIHNwaW5sb2NrcyAoYHJhd19zcGluX2xvY2tfaXJxc2F2ZWApIGFuZCBSQ1UgdHJhdmVyc2FsLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgbG9naWMuIFRoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyBmb3IgbGlzdCBtYW5pcHVsYXRpb24sIGVyYXNpbmcsIGFuZCBkdW1waW5nIG9mIGJ1ZmZlciBkYXRhLiBUaGUgZmFjdCB0aGF0IHRoZSBzdGFjayB0cmFjZSBpcyBzYXZlZCBvbiBldmVyeSBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIG1ha2VzIHRoaXMgYSBwb3RlbnRpYWxseSBoaWdoLW92ZXJoZWFkIG9wZXJhdGlvbiBpZiBpdCdzIHJ1bm5pbmcgYWxsIHRoZSB0aW1lIVxuXG5UaGVyZSBhcmUgc29tZSBub2lubGluZSBhbm5vdGF0aW9ucyBhZGRlZCB0byBzZXZlcmFsIGZ1bmN0aW9ucyBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVpciBwdXJwb3NlIGlzIGluIHRoaXMgY29udGV4dC5cblxuVGhlIG1vc3QgaW1wb3J0YW50IHN0ZXAgaXMgdG8gc2VhcmNoIGZvciBgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGVudGlyZWx5IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBpZiBpdCdzIGFscmVhZHkgcGFydCBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBnb2luZyB0byBiZSBtYXJrZWQgYXMgd29ydGh5IG9mIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNDo1NC45Mjg0NTQyODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTAxMDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE2MD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMTYtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzE3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMTgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUwND12b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MDUtXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo0NTA2OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MDctdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUzNj1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTM5LXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1NDA6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTQxLVxcdHJlZl90cmFja2VyX2FsbG9jKFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyLCBnZnApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTUwLXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1NTE6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTUyLVxcdHJlZmNvdW50X2RlYyhcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlci5ub190cmFja2VyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDU1Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3RyYWNrZXJfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTU5LXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1NjA6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTYxLVxcdHJlZl90cmFja2VyX2ZyZWUoXFx1MDAyNmRldi1cXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmgtNS1cXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaDo2OiNpZmRlZiBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlxcbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oLTctdHlwZWRlZiBzdHJ1Y3QgcmVmX3RyYWNrZXIgKm5ldGRldmljZV90cmFja2VyO1xcbi0tXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTQwPUNPTkZJR19VQlNBTl9VTlJFQUNIQUJMRT15XFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNDMtI1xcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZzo0NDpDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUj15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTQ1LUNPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVI9eVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MjU1OD1zdGF0aWMgYm9vbCByY3VfZG9fYmF0Y2hfY2hlY2tfdGltZShsb25nIGNvdW50LCBsb25nIHRsaW1pdCxcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTI1NjgtXFxua2VybmVsL3JjdS90cmVlLmM6MjU2OTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxua2VybmVsL3JjdS90cmVlLmMtMjU3MC1zdGF0aWMgbm9pbmxpbmUgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApO1xcbi0tXFxua2VybmVsL3NvZnRpcnEuYz01OTk9c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cXG4tLVxcbmtlcm5lbC9zb2Z0aXJxLmMtNjAxLVxcbmtlcm5lbC9zb2Z0aXJxLmM6NjAyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5rZXJuZWwvc29mdGlycS5jLTYwMy1zdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpO1xcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jPTMyNDQ9c3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTMyNjEtXFxua2VybmVsL3dvcmtxdWV1ZS5jOjMyNjI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmtlcm5lbC93b3JrcXVldWUuYy0zMjYzLXN0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxubmV0L0tjb25maWcuZGVidWctMi1cXG5uZXQvS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxubmV0L0tjb25maWcuZGVidWctNC1cXHRib29sIFxcXCJFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExNjQwPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcXG5uZXQvY29yZS9kZXYuYy0xMTY0MS1cXG5uZXQvY29yZS9kZXYuYzoxMTY0MjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L2NvcmUvZGV2LmMtMTE2NDMtc3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIxMDM9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxMzItXFxubmV0L2NvcmUvZGV2LmM6MTIxMzM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9jb3JlL2Rldi5jLTEyMTM0LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzQyNz1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzQzNC1cXG5uZXQvY29yZS9kZXYuYzoxMzQzNTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L2NvcmUvZGV2LmMtMTM0MzYtc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzNTUyPXN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpO1xcbm5ldC9jb3JlL2Rldi5jLTEzNTUzLVxcbm5ldC9jb3JlL2Rldi5jOjEzNTU0OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvY29yZS9kZXYuYy0xMzU1NS1cXG4tLVxcbm5ldC9zb2NrZXQuYz03MjY9c3RhdGljXFxubmV0L3NvY2tldC5jOjcyNzojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L3NvY2tldC5jLTcyOC1ub2lubGluZVxcbi0tXFxubmV0L3NvY2tldC5jPTgwMj1zdGF0aWNcXG5uZXQvc29ja2V0LmM6ODAzOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtODA0LW5vaW5saW5lXFxuLS1cXG5uZXQvc29ja2V0LmM9MTE1OD1zdGF0aWNcXG5uZXQvc29ja2V0LmM6MTE1OTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L3NvY2tldC5jLTExNjAtbm9pbmxpbmVcXG4tLVxcbm5ldC9zb2NrZXQuYz0yNjcxPXN0YXRpY1xcbm5ldC9zb2NrZXQuYzoyNjcyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtMjY3My1ub2lubGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNDo1Ni44MzM0NzIzODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ4Njk1ODU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiBgbmV0L0tjb25maWcuZGVidWdgIGFuZCBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIERldmljZSBSZWZlcmVuY2UgQ291bnRpbmcgRGVidWdnaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgemVybyBpbiBvbiBob3cgdG8gZW5hYmxlIG9yIGNvbmZpZ3VyZSB0aGlzIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBmZWF0dXJlLiBNeSBpbnR1aXRpb24gaW1tZWRpYXRlbHkgcG9pbnRzIHRvIGBuZXQvS2NvbmZpZy5kZWJ1Z2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgZGVidWdnaW5nIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIHN1YnN5c3RlbXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgYSByZWZlcmVuY2UgY291bnQgdHJhY2tlci4gSXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gaW4gdGhlIG5ldHdvcmtpbmcgc3BhY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0aGVyZS4gSXMgaXQgYSBkaXJlY3QgZW5hYmxlL2Rpc2FibGUsIG9yIGFyZSB0aGVyZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHZlcmJvc2l0eSBvciBkZXRhaWw/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVsYXRlZCBrZXJuZWwgcGFyYW1ldGVycyBJIHNob3VsZCBjaGVjayB0b28sIGp1c3QgdG8gYmUgdGhvcm91Z2g/IE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IEkgY291bGQgcG90ZW50aWFsbHkgdXNlIHRoaXMgdHJhY2tlciB0byBkZWJ1ZyBhIHRyaWNreSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2UgY291bnQgaXNzdWUgSSdtIHdvcmtpbmcgb24uIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGlzc3VlIG1pZ2h0IGd1aWRlIG1lIGZ1cnRoZXIsIGJ1dCBJIG5lZWQgYSBzb2xpZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZmlyc3QuIFNvLCBgbmV0L0tjb25maWcuZGVidWdgIGl0IGlzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI1OjA3LjMyMDQzMzE2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuICAgNDpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCBuXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEVuYWJsZSBkZWJ1Z2dpbmcgZmVhdHVyZSB0byB0cmFjayBkZXZpY2UgcmVmZXJlbmNlcy5cXG4gIDEwOlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxuICAxMzpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxNTpcXHRcXHRzZWxlY3QgUkVGX1RSQUNLRVJcXG4gIDE2OlxcdFxcdGRlZmF1bHQgblxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBFbmFibGUgZGVidWdnaW5nIGZlYXR1cmUgdG8gdHJhY2sgbmV0bnMgcmVmZXJlbmNlcy5cXG4gIDE5OlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgREVCVUdfTkVUXFxuICAyMjpcXHRcXHRib29sIFxcXCJBZGQgZ2VuZXJpYyBuZXR3b3JraW5nIGRlYnVnXFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIEVuYWJsZSBleHRyYSBzYW5pdHkgY2hlY2tzIGluIG5ldHdvcmtpbmcuXFxuICAyNjpcXHRcXHQgIFRoaXMgaXMgbW9zdGx5IHVzZWQgYnkgZnV6emVycywgYnV0IGlzIHNhZmUgdG8gc2VsZWN0LlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgREVCVUdfTkVUX1NNQUxMX1JUTkxcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkFkZCBleHRyYSBwZXItbmV0bnMgbXV0ZXggaW5zaWRlIFJUTkxcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNTowNy4zMjA0OTcxOTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjc2MTY5MTk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBUaW1lKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGVzZSBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGd1aWRlbGluZXMgYXJlLiBJdCdzIGVzc2VudGlhbGx5IGEgY2hlY2sgZm9yIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmUgKmFjdHVhbGx5KiBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gSWYgaXQncyBqdXN0IGRvY3MsIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciB2ZW5kb3Itc3BlY2lmaWMgc3R1ZmYsIHRoZW4gaXQncyBhIG5vLWdvLiBCdXQsIGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgKmFuZCogSSBjYW4gdmVyaWZ5IGl0J3MgZXhlY3V0YWJsZSwgdGhlbiBpdCdzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2guIEhvbGQgb24sIHdoYXQgZXhhY3RseSAqZGlkKiBpdCBkbyBhZ2Fpbj8gQWggeWVzLCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAsIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAgYXJlIGNhbGxpbmcgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAuIEFuZCBnZXQgdGhpcywgaXQgaXMgY2FsbGVkIGV2ZXJ5IHNpbmdsZSB0aW1lIGFueSBuZXR3b3JrIGRldmljZSBpcyB0b3VjaGVkISBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBpcyBkb2luZyBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIHRoaW5nczogaXQgaXMgYWxsb2NhdGluZyBmcm9tIGEgZ2xvYmFsIHJpbmcvYnVmZmVyLCB1c2luZyByYXcgc3BpbmxvY2tzLCBzYXZpbmcgc3RhY2sgdHJhY2VzLCBjb21wYXJpbmcgc3R1ZmYgdXNpbmcgYG1lbWNtcGAsIHVwZGF0aW5nIGF0b21pYyBjb3VudGVycywgYW5kIGFkZGluZyB0byBhIGxpbmtlZCBsaXN0IGBkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0YC4gV2hlbiBuZXRkZXZpY2VzIGFyZSBmcmVlZCBvciBkdW1wZWQgKHdoaWNoIGhhcHBlbnMgaW4gcGxhY2VzIGxpa2UgYG5ldGRldl93YWl0X2FsbHJlZnNfYW55YCwgYGFsbG9jX25ldGRldl9tcXNgLCBgZnJlZV9uZXRkZXZgKSwgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgIG9yIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgIGdldCBjYWxsZWQuIEFsc28sIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgIGlzIGRvaW5nIHRpbWVyIHNldHVwIGFuZCBjb21wbGV0aW9uIGR1cmluZyBgbmV0X2Rldl9pbml0YC5cblxuVGhpcyBpcyBmdW5jdGlvbmFsbHkgcmVsZXZhbnQuIEkgc2VlIHRyYWNpbmcgYnVmZmVyIG1hbmFnZW1lbnQsIGxpbmtlZCBsaXN0IG1hbmlwdWxhdGlvbiB1bmRlciBjb25jdXJyZW5jeSwgYW5kIHJhdyBzcGlubG9ja3MgaW4gaW50ZXJydXB0L3NvZnRpcnEvcHJvY2VzcyBjb250ZXh0LiBUaGlzIGxvb2tzIGxpa2UgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGNoYW5nZXMhXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZDogYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AuIE9rLCBsZXQncyBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gQWgsIGZyb20gYG5ldC9LY29uZmlnLmRlYnVnYCwgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAsIGBTVEFDS1RSQUNFX1NVUFBPUlRgLCBhbmQgYE5FVGAsIGFuZCBpdCBhbHNvIGBzZWxlY3RgcyBgUkVGX1RSQUNLRVJgLiBBbmQgYENPTkZJR19LQUxMU1lNU2AuLi4gSSdsbCBuZWVkIHRvIHNlYXJjaCB0aGUgS2NvbmZpZyBmaWxlcyBhZ2FpbiB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgZGVwZW5kcyBvbi5cblxuR2l2ZW4gdGhpcywgdGhpcyAqaXMqIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGNvcmUga2VybmVsIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjE0LjkzNzQyMDA1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMxMDIxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLQUxMU1lNU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MjA4Nj1jb25maWcgQ0FDSEVTVEFUX1NZU0NBTExcXG4tLVxcbmluaXQvS2NvbmZpZy0yMDk1LVxcbmluaXQvS2NvbmZpZzoyMDk2OmNvbmZpZyBLQUxMU1lNU1xcbmluaXQvS2NvbmZpZy0yMDk3LVxcdGJvb2wgXFxcIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wc1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWctMjEwMy1cXG5pbml0L0tjb25maWc6MjEwNDpjb25maWcgS0FMTFNZTVNfU0VMRlRFU1RcXG5pbml0L0tjb25maWctMjEwNS1cXHRib29sIFxcXCJUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlIG9mIGthbGxzeW1zXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTIxMTYtXFxuaW5pdC9LY29uZmlnOjIxMTc6Y29uZmlnIEtBTExTWU1TX0FMTFxcbmluaXQvS2NvbmZpZy0yMTE4LVxcdGJvb2wgXFxcIkluY2x1ZGUgYWxsIHN5bWJvbHMgaW4ga2FsbHN5bXNcXFwiXFxuLS1cXG5rZXJuZWwva3N5bXNfY29tbW9uLmMtMy0gKiBrc3ltc19jb21tb24uYzogQSBzcGxpdCBvZiBrZXJuZWwva2FsbHN5bXMuY1xcbmtlcm5lbC9rc3ltc19jb21tb24uYzo0OiAqIENvbnRhaW5zIGEgZmV3IGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5hdGlvbnMgaW5kZXBlbmRlbnQgb2YgY29uZmlnIEtBTExTWU1TLlxcbmtlcm5lbC9rc3ltc19jb21tb24uYy01LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzoxNi44Njg0NDYwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4OTI3NDYyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIGZvciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYSBiaXQgZGVlcGVyLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGFyb3VuZCBsaW5lIDIwOTYuIFRoYXQncyBhIHJlYXNvbmFibGUgc3BvdCB0byBiZWdpbiBleHBsb3JpbmcgdGhlIHNldHRpbmdzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIGVhcmx5IHN5c3RlbSBzdGFydHVwLCBhbmQgbGlrZWx5IHNvbWUgb2YgdGhlIGNvcmUgZGVmYXVsdHMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBzcGVjaWZpYyBvcHRpb25zIGFyZSBiZWluZyBzZXQgb3IgaW5mbHVlbmNlZCBlYXJseSBvbi4gSXQncyB0aW1lIHRvIHN0YXJ0IHBhcnNpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjIyLjc2MTE5NDE2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwOTA6XFx0XFx0ICBFbmFibGUgdGhlIGNhY2hlc3RhdCBzeXN0ZW0gY2FsbCwgd2hpY2ggcXVlcmllcyB0aGUgcGFnZSBjYWNoZVxcbjIwOTE6XFx0XFx0ICBzdGF0aXN0aWNzIG9mIGEgZmlsZSAobnVtYmVyIG9mIGNhY2hlZCBwYWdlcywgZGlydHkgcGFnZXMsXFxuMjA5MjpcXHRcXHQgIHBhZ2VzIG1hcmtlZCBmb3Igd3JpdGViYWNrLCAocmVjZW50bHkpIGV2aWN0ZWQgcGFnZXMpLlxcbjIwOTM6XFx0XFxuMjA5NDpcXHRcXHQgIElmIHVuc3VyZSBzYXkgWSBoZXJlLlxcbjIwOTU6XFx0XFxuMjA5NjpcXHRjb25maWcgS0FMTFNZTVNcXG4yMDk3OlxcdFxcdGJvb2wgXFxcIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wc1xcXCIgaWYgRVhQRVJUXFxuMjA5ODpcXHRcXHRkZWZhdWx0IHlcXG4yMDk5OlxcdFxcdGhlbHBcXG4yMTAwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBsZXQgdGhlIGtlcm5lbCBwcmludCBvdXQgc3ltYm9saWMgY3Jhc2ggaW5mb3JtYXRpb24gYW5kXFxuMjEwMTpcXHRcXHQgIHN5bWJvbGljIHN0YWNrIGJhY2t0cmFjZXMuIFRoaXMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBrZXJuZWxcXG4yMTAyOlxcdFxcdCAgc29tZXdoYXQsIGFzIGFsbCBzeW1ib2xzIGhhdmUgdG8gYmUgbG9hZGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS5cXG4yMTAzOlxcdFxcbjIxMDQ6XFx0Y29uZmlnIEtBTExTWU1TX1NFTEZURVNUXFxuMjEwNTpcXHRcXHRib29sIFxcXCJUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlIG9mIGthbGxzeW1zXFxcIlxcbjIxMDY6XFx0XFx0ZGVwZW5kcyBvbiBLQUxMU1lNU1xcbjIxMDc6XFx0XFx0ZGVmYXVsdCBuXFxuMjEwODpcXHRcXHRoZWxwXFxuMjEwOTpcXHRcXHQgIFRlc3QgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2Ugb2Ygc29tZSBpbnRlcmZhY2VzLCBzdWNoIGFzXFxuMjExMDpcXHRcXHQgIGthbGxzeW1zX2xvb2t1cF9uYW1lLiBJdCBhbHNvIGNhbGN1bGF0ZXMgdGhlIGNvbXByZXNzaW9uIHJhdGUgb2YgdGhlXFxuMjExMTpcXHRcXHQgIGthbGxzeW1zIGNvbXByZXNzaW9uIGFsZ29yaXRobSBmb3IgdGhlIGN1cnJlbnQgc3ltYm9sIHNldC5cXG4yMTEyOlxcdFxcbjIxMTM6XFx0XFx0ICBTdGFydCBzZWxmLXRlc3QgYXV0b21hdGljYWxseSBhZnRlciBzeXN0ZW0gc3RhcnR1cC4gU3VnZ2VzdCBleGVjdXRpbmdcXG4yMTE0OlxcdFxcdCAgXFxcImRtZXNnIHwgZ3JlcCBrYWxsc3ltc19zZWxmdGVzdFxcXCIgdG8gY29sbGVjdCB0ZXN0IHJlc3VsdHMuIFxcXCJmaW5pc2hcXFwiIGlzXFxuMjExNTpcXHRcXHQgIGRpc3BsYXllZCBpbiB0aGUgbGFzdCBsaW5lLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRlc3QgaXMgY29tcGxldGUuXFxuMjExNjpcXHRcXG4yMTE3OlxcdGNvbmZpZyBLQUxMU1lNU19BTExcXG4yMTE4OlxcdFxcdGJvb2wgXFxcIkluY2x1ZGUgYWxsIHN5bWJvbHMgaW4ga2FsbHN5bXNcXFwiXFxuMjExOTpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBLQUxMU1lNU1xcbjIxMjA6XFx0XFx0aGVscFxcbjIxMjE6XFx0XFx0ICBOb3JtYWxseSBrYWxsc3ltcyBvbmx5IGNvbnRhaW5zIHRoZSBzeW1ib2xzIG9mIGZ1bmN0aW9ucyBmb3IgbmljZXJcXG4yMTIyOlxcdFxcdCAgT09QUyBtZXNzYWdlcyBhbmQgYmFja3RyYWNlcyAoaS5lLiwgc3ltYm9scyBmcm9tIHRoZSB0ZXh0IGFuZCBpbml0dGV4dFxcbjIxMjM6XFx0XFx0ICBzZWN0aW9ucykuIFRoaXMgaXMgc3VmZmljaWVudCBmb3IgbW9zdCBjYXNlcy4gQW5kIG9ubHkgaWYgeW91IHdhbnQgdG9cXG4yMTI0OlxcdFxcdCAgZW5hYmxlIGtlcm5lbCBsaXZlIHBhdGNoaW5nLCBvciBvdGhlciBsZXNzIGNvbW1vbiB1c2UgY2FzZXMgKGUuZy4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjIyLjc2MTMyMjc0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzM0MzkxMzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgS2VybmVsIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIEknbSBsb29raW5nIGZvciBzcGVjaWZpYyBlbnRyeXBvaW50cywgbm90IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBNeSBwcmlvcml0eSBpcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBuZXQvY29yZS9kZXYuY2AgbW9kdWxlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIEkgZm91bmQgdGhlIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGZ1bmN0aW9uLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCBhbmQgaXNuJ3Qgc3RhdGljLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZS4gSSd2ZSBhbHNvIGNoZWNrZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZCBvciBhZGRlZC4gSSB3ZW50IHRocm91Z2ggdGhlIGVudGlyZSBkaWZmLCBub3RpbmcgYWxsIGNoYW5nZWQgZnVuY3Rpb25zIGFuZCBmaWxlcywgaW5jbHVkaW5nIGlubGluZSBmdW5jdGlvbnMgYW5kIHN0YXRpYyBoZWxwZXJzLCBtYWtpbmcgc3VyZSB0byBjb25zaWRlciBldmVyeXRoaW5nLiBUaGlzIGluY2x1ZGVzIGByY3VfZG9fYmF0Y2hgLCBgaGFuZGxlX3NvZnRpcnFzYCwgYW5kIG90aGVycywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cbkkgd2FudCB0byBiZSB0aG9yb3VnaCBoZXJlLiBJJ3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBhZ2FpbiB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGUgcGF0Y2gsIGluY2x1ZGluZyB0aG9zZSBpbiBgbmV0L3NvY2tldC5jYCBhbmQgZWxzZXdoZXJlLiBJJ20gZm9jdXNpbmcgb24gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgYXMgaXQgc3RhbmRzIG91dCBhcyB0aGUgbWFpbiBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGludHJvZHVjZWQuIEl0IHNlZW1zIHBlcmZlY3RseSBhbGlnbmVkIHdpdGggbXkgY3JpdGVyaWEuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXBwZWFyIHRvIGJlIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCwgYEtBTExTWU1TYCwgYW5kIHRoZWlyIGRlcGVuZGVuY2llczogYERFQlVHX0tFUk5FTGAgYW5kIGBORVRgLiBJIG1hZGUgc3VyZSB0byBjaGVjayB0aGUgaWZkZWZzIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AgYXJlIHRoZSBwcmltYXJ5IGd1YXJkcyBmb3IgdGhlIG5ldyBjb2RlLiBJIHRoaW5rIEkndmUgaWRlbnRpZmllZCB0aGUgY29tcGxldGUgc2V0IG9mIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLlxuXG5JcyB0aGlzIGNvZGUgYWN0dWFsbHkgd29ydGh5IG9mIGZ1enppbmc/IEJhc2VkIG9uIG15IHJldmlldywgeWVzLCBhYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljLCBtYW5hZ2luZyBuZXRkZXZpY2UgcmVmZXJlbmNlcyB3aXRoIGFuIGluLWtlcm5lbCB0cmFjZSBidWZmZXIsIGluY2x1ZGluZyByYXcgc3BpbmxvY2tzLCBSQ1UgbGlzdCBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSBjb250cm9sLCBhbmQgc3ltYm9sIG5hbWUgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIG9wZXJhdGlvbnMuIEl0IGlzbid0IGp1c3QgZGVjb3JhdGl2ZSBsb2dnaW5nOyBpdCBpbnRyb2R1Y2VzIG5ldyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2sgcHJvdGVjdGlvbi4gVGhpcyBuZXcgY29kZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc2VyaW91cyByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaXNzdWVzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgdGhlcmUgYXJlIGNsZWFybHkgcmlza3Mgd29ydGggZXhwbG9yaW5nLlxuXG5FdmVyeXRoaW5nIGlzIHZlcmlmaWVkLCBhbmQgSSdtIHJlYWR5IHRvIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTc3LCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzozNi4xMDUyMzkxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTI5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCIsXG4gICAgXCJLQUxMU1lNU1wiLFxuICAgIFwiREVCVUdfS0VSTkVMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYXZlX25ldGRldl90cmFjZV9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIixcbiAgICBcIkRFQlVHX0tFUk5FTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhIG5ldHdvcmsgZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFjZSBidWZmZXIgdHJhY2tpbmcgbWVjaGFuaXNtIHVuZGVyIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSIGFuZCBDT05GSUdfS0FMTFNZTVMuIEl0IHNhdmVzIHN0YWNrIHRyYWNlcyBvbiBfX2Rldl9ob2xkKCkgYW5kIF9fZGV2X3B1dCgpLCBtYW5hZ2luZyBhbiBSQ1UgbGlzdCBvZiB0cmFjZSBidWZmZXJzIHdpdGggYSByYXcgc3BpbmxvY2sgYW5kIG1lbW9yeSBjb21wYXJpc29ucywgd2hpY2ggYWZmZWN0cyBjb3JlIG5ldHdvcmsgZGV2aWNlIGxpZmVjeWNsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzozNi4xODAxNzQ1MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjAwNjAxOTEwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjM2LjE4MDYyMTYyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MjAwNTU2ODI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbi1rZXJuZWwgbmV0X2RldmljZSByZWZlcmVuY2UgY291bnQgdHJhY2tpbmcvZGVidWdnaW5nIG1lY2hhbmlzbSB1c2luZyBhIHN0YXRpYyB0cmFjZSBidWZmZXIgbGlzdCBhbmQgc3RhY2sgdHJhY2UgY2FwdHVyZXMuIFxcblxcbjEuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIGV0Yy4pOyBhbGwgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cgdmlhIHByaW50ay9zdGFja190cmFjZV9wcmludC5cXG4yLiBBbGwgdHJhY2UgYnVmZmVycyBhbmQgc3RhY2sgYXJyYXlzIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCAoc3RhdGljIEJTUyBidWZmZXIgcG9vbCBhbmQgemVyb2VkIHN0YWNrIGJ1ZmZlcnMpIG9yIGV4cGxpY2l0bHkgd3JpdHRlbiB1cCB0byB0aGUgY291bnQgcmV0dXJuZWQgYnkgc3RhY2tfdHJhY2Vfc2F2ZSgpIGJlZm9yZSBhbnkgcmVhZHMgb3IgY29tcGFyaXNvbnMuXFxuMy4gTGVuZ3RoIHBhcmFtZXRlcnMgKG5yX2VudHJpZXMsIHRyaW1tZWRfZW50cmllcykgYXJlIHN0cmljdGx5IG1haW50YWluZWQgc3VjaCB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgc3RhY2sgdHJhY2UgZW50cmllcyBhcmUgZXZlciBhY2Nlc3NlZCBieSBtZW1jbXAsIG1lbW1vdmUsIGFuZCBzdGFja190cmFjZV9wcmludC5cXG40LiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIFJDVS9yYXcgc3BpbmxvY2sgdXNhZ2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3YmI5YzljZDQ0OTdlZmYyODQ2M2VhMjA1ZjE2NTI0MWMwYjE1OGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNToyMjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4N2NhZmM5MzJlOWU2Li5kNTE4MzM4Y2QwNzQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxNTMsNiArMjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcbiAgKlx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xuICAqXHRtb3ZlcyBvdXQuXG4rICpcbisgKlx0QG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLlxuICAqL1xuIFxuIHN0cnVjdCBuZXRfZGV2aWNlIHtcbkBAIC0yMzEyLDYgKzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXG4gXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK1x0c3RydWN0IGxpc3RfaGVhZFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xuKyNlbmRpZlxuIFxuIFx0dW5zaWduZWQgaW50XHRcdG9wZXJzdGF0ZTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0bGlua19tb2RlO1xuQEAgLTQ0OTgsOSArNDUwMywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiB2b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2RlYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuQEAgLTQ1MTIsNiArNDUyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfaW5jKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xuaW5kZXggOTY4NDhmYzFmMDJiOC4uMjBjNGM5MjcwOGI4YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xuQEAgLTI1NjYsNiArMjU2NiwxMCBAQCBzdGF0aWMgYm9vbCByY3VfZG9fYmF0Y2hfY2hlY2tfdGltZShsb25nIGNvdW50LCBsb25nIHRsaW1pdCxcbiBcdCAgICAgICBsb2NhbF9jbG9jaygpIFx1MDAzZT0gdGxpbWl0O1xuIH1cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZVxuICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtXHUwMDNlYmxpbWl0LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jXG5pbmRleCA3OTgwYTRhMjMyZjlmLi5hZDk4ODk1NjMyODgwIDEwMDY0NFxuLS0tIGEva2VybmVsL3NvZnRpcnEuY1xuKysrIGIva2VybmVsL3NvZnRpcnEuY1xuQEAgLTU5OSw2ICs1OTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX3NvZnRpcnFfZW5kKGJvb2wgaW5faGFyZGlycSkgeyB9XG4gI2VuZGlmXG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpO1xuKyNlbmRpZlxuK1xuIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgKyBNQVhfU09GVElSUV9USU1FO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuY1xuaW5kZXggM2MwMzRjYmM1YmIzMC4uNjBkYWFlMWM2ZjE3ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC93b3JrcXVldWUuY1xuKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jXG5AQCAtMzI1OSw2ICszMjU5LDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuKyNlbmRpZlxuK1xuIC8qKlxuICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrXG4gICogQHdvcmtlcjogc2VsZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDM4MzM2ODU4YzE2OGYuLjkzYTc1OTRkNTg2ZTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTYzOSw2ICsxMTYzOSwxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbisjZW5kaWZcbitcbiBpbnQgbmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDtcbiBcbiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMVxuQEAgLTExNzIxLDYgKzExNzI5LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFx0XHRcdFx0cHJfZW1lcmcoXCJ1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcXG5cIixcbiBcdFx0XHRcdFx0IGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7XG4gXHRcdFx0XHRyZWZfdHJhY2tlcl9kaXJfcHJpbnQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMCk7XG4rXHRcdFx0XHRkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbkBAIC0xMjEyMSw2ICsxMjEzMCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdGRldi1cdTAwM2Vwcml2X2xlbiA9IHNpemVvZl9wcml2O1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbisjZW5kaWZcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcIm5ldGRldlwiKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7XG5AQCAtMTIyMjMsNiArMTIyMzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gZnJlZV9wY3B1OlxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIGZyZWVfZGV2OlxuICNlbmRpZlxuIFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyKTtcbkBAIC0xMjI5Miw2ICsxMjMwNSw3IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZWNvcmVfc3RhdHMpO1xuIFx0ZGV2LVx1MDAzZWNvcmVfc3RhdHMgPSBOVUxMO1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXhkcF9idWxrcSk7XG5AQCAtMTM0MTgsNiArMTM0MzIsMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuIFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4gfTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcbisjZW5kaWZcbitcbiAvKlxuICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxuQEAgLTEzNDI2LDYgKzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJjID0gLUVOT01FTTtcbiBcbitcdG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpO1xuIFx0QlVHX09OKCFkZXZfYm9vdF9waGFzZSk7XG4gXG4gXHRuZXRfZGV2X3N0cnVjdF9jaGVjaygpO1xuQEAgLTEzNTI5LDMgKzEzNTUwLDI1NCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XG4rXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcbisjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxuK3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRhdG9taWNfdCBjb3VudDtcbitcdGludCB0cmltbWVkX2VudHJpZXM7XG4rXHRpbnQgbnJfZW50cmllcztcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XG4rfSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG4rc3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitcbitzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpKyspXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcbitcbitzdGF0aWMgaW50IHRyaW1fbmV0ZGV2X3RyYWNlKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIGludCBucl9lbnRyaWVzKVxuK3tcbitcdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XG4rXHRjaGFyICpjcDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdHNwcmludF9zeW1ib2xfbm9fb2Zmc2V0KGJ1ZmZlciwgZW50cmllc1tpXSk7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJyAnKTtcbitcdFx0aWYgKGNwKVxuK1x0XHRcdCpjcCA9ICdcXDAnO1xuK1x0XHRpZiAoYnVmZmVyWzBdID09ICdwJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJwcm9jZXNzX29uZV93b3JrXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnaycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwia3N5c191bnNoYXJlXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwic29ja19zZW5kbXNnX25vc2VjXCIpIHx8XG4rXHRcdFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcInNvY2tfcmVjdm1zZ19ub3NlY1wiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ3InKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcInJjdV9kb19iYXRjaFwiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ18nKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcIl9fc3lzX2JpbmRcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zb2NrX3JlbGVhc2VcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYnBmXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJkb19zb2NrX3NldHNvY2tvcHRcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBucl9lbnRyaWVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wO1xuK1x0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcbitcbitcdC8qIFVwZGF0ZSB0cmltbWVkX2VudHJpZXMgZmllbGQuIERvIG5vdCBtb2RpZnkgbnJfZW50cmllcyBmaWVsZFxuK1x0ICogaW4gY2FzZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBpcyBjYWxsZWQgYWdhaW4uXG4rXHQgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHRpZiAocHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9PSBwdHItXHUwMDNlbnJfZW50cmllcylcbitcdFx0XHRwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2Vucl9lbnRyaWVzKTtcbitcdH1cbitcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyB1c2luZyB0cmltbWVkX2VudHJpZXMgZmllbGQuICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuK1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnB0ci1cdTAwM2Vjb3VudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHRtcCA9IHB0cjtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UodG1wLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0KSB7XG4rXHRcdFx0aWYgKHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgIT0gdG1wLVx1MDAzZXRyaW1tZWRfZW50cmllcyB8fFxuK1x0XHRcdCAgICBtZW1jbXAocHRyLVx1MDAzZWVudHJpZXMsIHRtcC1cdTAwM2VlbnRyaWVzLFxuK1x0XHRcdFx0ICAgcHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHRcdGlmICghY291bnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBNb3ZlIGNvdW50IGZyb20gbm9uLWZpcnN0IGVudHJ5IHRvIGZpcnN0IGVudHJ5LiAqL1xuK1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0YXRvbWljX3N1Yihjb3VudCwgXHUwMDI2dG1wLVx1MDAzZWNvdW50KTtcbitcdFx0fVxuK1x0XHQvKiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzXG4rXHRcdCAqIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcdC8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuK1x0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdGlmICghY291bnQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdC8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZVxuK1x0XHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXG4rXHRcdCAqL1xuK1x0XHRwb3MrKztcbitcdFx0YmFsYW5jZSArPSBjb3VudDtcbitcdFx0cHJfaW5mbyhcIkNhbGwgdHJhY2UgZm9yICVzWyVkXSAlK2QgYXRcXG5cIiwgZGV2LVx1MDAzZW5hbWUsIHBvcywgY291bnQpO1xuK1x0XHRzdGFja190cmFjZV9wcmludChwdHItXHUwMDNlZW50cmllcywgcHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcywgNCk7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1x0aWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZClcbitcdFx0cHJfaW5mbyhcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxuXCIsIGRldi1cdTAwM2VuYW1lLCBwb3MsIGJhbGFuY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5XG4rXHQgKiBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbm8gbW9yZSBfX2Rldl9wdXQoKS9fX2Rldl9ob2xkKCkgY2FsbCBjYW4gYmUgbWFkZS5cbitcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxuK1x0ICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTtcbitcdFx0bGlzdF9kZWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzW0FSUkFZX1NJWkUocHRyLVx1MDAzZWVudHJpZXMpXTtcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xuK1x0aWYgKGluX25taSgpKVxuK1x0XHRyZXR1cm47XG4rXHQvKiBHZXQgc3RhY2sgdHJhY2VzLiAqL1xuK1x0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyksIDEpO1xuK1x0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxuK1x0ICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJ3QgdHJpbSB0cmFjZXNcbitcdCAqIG9mIHByb2Nlc3MgY29udGV4dCB3aGVuIHRyeWluZyB0byBjb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcy5cbitcdCAqXG4rXHQgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC5cbitcdCAqL1xuK1x0aWYgKGluX3NvZnRpcnEoKSkge1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdFx0aWYgKGVudHJpZXNbaV0gXHUwMDNlPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGVudHJpZXNbaV0gXHUwMDNjIGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHtcbitcdFx0XHRcdG5yX2VudHJpZXMgPSBpICsgMTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0LyogQ29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgYXQgYmVzdC1lZmZvcnQgYmFzaXMuIFNpbmNlIGR1cGxpY2F0ZWQgZW50cmllc1xuK1x0ICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJ3QgdXNlIGxvY2sgaGVyZS5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbitcdFx0XHRhdG9taWNfYWRkKGRlbHRhLCBcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0fVxuK1x0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXG4rXHQgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy5cbitcdCAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXJcbitcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXG4rXHQgKi9cbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdC8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovXG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cHRyLVx1MDAzZWNvdW50LCBkZWx0YSk7XG4rXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdFx0cHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9IG5yX2VudHJpZXM7XG4rXHRcdG1lbW1vdmUocHRyLVx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuK1x0XHQvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqL1xuK1x0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZwdHItXHUwMDNlbGlzdCwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCA9IHRydWU7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rRVhQT1JUX1NZTUJPTChzYXZlX25ldGRldl90cmFjZV9idWZmZXIpO1xuK1xuK3N0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB7XG4rXHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcbitcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247XG4rfTtcbitcbisvKiBSZXNvbHZlIGFkZHJlc3Mgb2YgaGFuZGxlX3NvZnRpcnFzKCkgYW5kIGNhY2hlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBsb29raW5nIHVwXG4rICoga2FsbHN5bXMgZXZlcnkgdGltZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdO1xuK1x0aW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpO1xuK1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbitcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplO1xuK1x0Y2hhciAqY3A7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKykge1xuK1x0XHRzcHJpbnRfc3ltYm9sKGJ1ZmZlciwgZW50cmllc1tpXSk7XG4rXHRcdGlmIChzdHJuY21wKGJ1ZmZlciwgXCJoYW5kbGVfc29mdGlycXNcIiwgMTUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRjcCA9IHN0cmNocihidWZmZXIsICcrJyk7XG4rXHRcdGlmICghY3AgfHwgc3NjYW5mKGNwLCBcIislbHgvJWx4XCIsIFx1MDAyNm9mZnNldCwgXHUwMDI2c2l6ZSkgIT0gMilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gZW50cmllc1tpXSAtIG9mZnNldDtcbitcdFx0ZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyArIHNpemU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y29tcGxldGUoXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cdTAwM2Vjb21wbGV0aW9uKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB0YztcbitcbitcdHRpbWVyX3NldHVwX29uX3N0YWNrKFx1MDAyNnRjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRjLmNvbXBsZXRpb24pO1xuK1x0LyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqL1xuK1x0bW9kX3RpbWVyKFx1MDAyNnRjLnRpbWVyLCBqaWZmaWVzKTtcbitcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi9cbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4rXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi9cbitcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRjLnRpbWVyKTtcbitcdHRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soXHUwMDI2dGMudGltZXIpO1xuK31cbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IGMwNWQ4NmU2M2FiZjcuLmIzZGRjYzI4M2NiYmMgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbisrKyBiL25ldC9zb2NrZXQuY1xuQEAgLTcyMyw3ICs3MjMsMTEgQEAgc3RydWN0IHNvY2tldCAqc29ja19hbGxvYyh2b2lkKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpO1xuIFxuLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbmRpZlxuK3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFxuQEAgLTc5NSw3ICs3OTksMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCxcbiBcdHRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbHNlXG4raW5saW5lXG4rI2VuZGlmXG4raW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXNlbmRtc2csIGluZXQ2X3NlbmRtc2csXG4gXHRcdFx0XHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxuQEAgLTExNDUsOCArMTE1NSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZlxuIFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICAgIGludCBmbGFncylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2Vsc2VcbitpbmxpbmVcbisjZW5kaWZcbitpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKVxuIHtcbiBcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2VyZWN2bXNnLFxuIFx0XHRcdFx0ICAgICBpbmV0Nl9yZWN2bXNnLFxuQEAgLTI2NTMsOSArMjY2OCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLFxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZW5kaWZcbitpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0ICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyAyMF1cbiBcdFx0XHRcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzozNi4xODA2MjM3MDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyMDA1NTQ1NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoLCBmb2N1c2VkIG9uIHRyYWNpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBvcGVyYXRpb25zLCBkb2Vzbid0IGluaGVyZW50bHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgbGV0J3MgdmVyaWZ5LlxuXG5GaXJzdCwgSSBzZWUgdGhlIHBhdGNoIGFkZHMgYSBkZWJ1Z2dpbmcgbWVjaGFuaXNtLCBtb2RpZnlpbmcgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3QgYW5kIHVwZGF0aW5nIGNvcmUgZnVuY3Rpb25zIHRvIHRyYWNrIHJlZmVyZW5jZSBjb3VudHMuIEtleSBjaGFuZ2VzIGludm9sdmUgYWRkaW5nIGEgdHJhY2UgYnVmZmVyIGxpc3QsIG1vZGlmeWluZyBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgLCBhbmQgYW5ub3RhdGluZyBmdW5jdGlvbnMgd2l0aCBgbm9pbmxpbmVgLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0YCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLCBldGMuXG5cblRoZSBjcml0aWNhbCBhcmVhIHRvIGV2YWx1YXRlIGZvciBLTVNBTiBpcyBhbnkgcmVhZCBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGlzIG5ldyB0cmFjZSBidWZmZXIgaXMgdXNlZC4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSB2YXJpYWJsZXMgdXNlZCBmb3IgbWVtb3J5LlxuXG5BZnRlciBkaXZpbmcgaW50byBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmNgLCBhbmQgYG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdGAsIEkgc2VlIG5vIG9idmlvdXMgaXNzdWVzLiBgc3RhY2tfdHJhY2Vfc2F2ZWAgcG9wdWxhdGVzIHRoZSBzdGFjayB0cmFjZSwgYW5kIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBhcmUgY2FyZWZ1bGx5IGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiByZXR1cm5lZCBlbnRyaWVzIChgbnJfZW50cmllc2AgYW5kIGB0cmltbWVkX2VudHJpZXNgKS4gVGhlIHN0YXRpYyBhcnJheSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gQlNTLiBDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgb3IgYW55dGhpbmcgZWxzZSB0aGF0IHdvdWxkIGV4cG9zZSBrZXJuZWwgbWVtb3J5LiBFdmVuIHRoZSBjYWxsIHRvIGBzcHJpbnRfc3ltYm9sX25vX29mZnNldGAgdXNlcyBpbml0aWFsaXplZCBidWZmZXJzLlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBzdGFja190cmFjZV9zYXZlYCBjb3JyZWN0bHkgc2V0cyB0aGUgZW50cmllcywgYW5kIGV2ZXJ5IG9wZXJhdGlvbiBpcyBib3VuZGVkIGNvcnJlY3RseS4gVGhlIHVzZSBvZiBSQ1Ugd2l0aCBgbWVtY21wYCBhbmQgYG1lbW1vdmVgIGFyZSBhbGwgY29uc3RyYWluZWQgYnkgdGhlIHBvcHVsYXRlZCBudW1iZXIgb2YgZW50cmllcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYXZvaWRzIGV4cG9zaW5nIGtlcm5lbCBkYXRhIHRvIHVzZXItc3BhY2UuXG5cblllcywgdGhlcmUgY291bGQgYmUgcmFjZSBjb25kaXRpb25zIG9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGJ1dCB0aG9zZSBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLCBub3QgS01TQU4uXG5cbkluIHN1bW1hcnksIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgZWZmb3J0IGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgcHJvY2VlZC4gSSdsbCBzYW5pdHkgY2hlY2sgdGhpcyBjb25jbHVzaW9uIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjoyNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6MzA6MjguMTg2MTcyMzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW4ta2VybmVsIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nL2RlYnVnZ2luZyBtZWNoYW5pc20gdXNpbmcgYSBzdGF0aWMgdHJhY2UgYnVmZmVyIGxpc3QgYW5kIHN0YWNrIHRyYWNlIGNhcHR1cmVzLiBcXG5cXG4xLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBldGMuKTsgYWxsIG91dHB1dCBpcyBwcmludGVkIHRvIHRoZSBrZXJuZWwgbG9nIHZpYSBwcmludGsvc3RhY2tfdHJhY2VfcHJpbnQuXFxuMi4gQWxsIHRyYWNlIGJ1ZmZlcnMgYW5kIHN0YWNrIGFycmF5cyBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgKHN0YXRpYyBCU1MgYnVmZmVyIHBvb2wgYW5kIHplcm9lZCBzdGFjayBidWZmZXJzKSBvciBleHBsaWNpdGx5IHdyaXR0ZW4gdXAgdG8gdGhlIGNvdW50IHJldHVybmVkIGJ5IHN0YWNrX3RyYWNlX3NhdmUoKSBiZWZvcmUgYW55IHJlYWRzIG9yIGNvbXBhcmlzb25zLlxcbjMuIExlbmd0aCBwYXJhbWV0ZXJzIChucl9lbnRyaWVzLCB0cmltbWVkX2VudHJpZXMpIGFyZSBzdHJpY3RseSBtYWludGFpbmVkIHN1Y2ggdGhhdCBvbmx5IGluaXRpYWxpemVkIHN0YWNrIHRyYWNlIGVudHJpZXMgYXJlIGV2ZXIgYWNjZXNzZWQgYnkgbWVtY21wLCBtZW1tb3ZlLCBhbmQgc3RhY2tfdHJhY2VfcHJpbnQuXFxuNC4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24sIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyaXNpbmcgZnJvbSBSQ1UvcmF3IHNwaW5sb2NrIHVzYWdlIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXFxuXFxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxcbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cXG4zLiBMZW5ndGggcGFyYW1ldGVycyAobnJfZW50cmllcywgdHJpbW1lZF9lbnRyaWVzKSBhcmUgc3RyaWN0bHkgbWFpbnRhaW5lZCBzdWNoIHRoYXQgb25seSBpbml0aWFsaXplZCBzdGFjayB0cmFjZSBlbnRyaWVzIGFyZSBldmVyIGFjY2Vzc2VkIGJ5IG1lbWNtcCwgbWVtbW92ZSwgYW5kIHN0YWNrX3RyYWNlX3ByaW50LlxcbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfn6k2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 15:08:14 +0000 UTC FinishedAt: 2026-08-29 15:30:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS", "DEBUG_KERNEL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS", "DEBUG_KERNEL", "NET" ], "series_id": "2631749c-606d-45e0-a2dd-d5d8768368ba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "save_netdev_trace_buffer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OywKICAgICYjMzQ7REVCVUdfS0VSTkVMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW4ta2VybmVsIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nL2RlYnVnZ2luZyBtZWNoYW5pc20gdXNpbmcgYSBzdGF0aWMgdHJhY2UgYnVmZmVyIGxpc3QgYW5kIHN0YWNrIHRyYWNlIGNhcHR1cmVzLiBcblxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxuMi4gQWxsIHRyYWNlIGJ1ZmZlcnMgYW5kIHN0YWNrIGFycmF5cyBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgKHN0YXRpYyBCU1MgYnVmZmVyIHBvb2wgYW5kIHplcm9lZCBzdGFjayBidWZmZXJzKSBvciBleHBsaWNpdGx5IHdyaXR0ZW4gdXAgdG8gdGhlIGNvdW50IHJldHVybmVkIGJ5IHN0YWNrX3RyYWNlX3NhdmUoKSBiZWZvcmUgYW55IHJlYWRzIG9yIGNvbXBhcmlzb25zLlxuMy4gTGVuZ3RoIHBhcmFtZXRlcnMgKG5yX2VudHJpZXMsIHRyaW1tZWRfZW50cmllcykgYXJlIHN0cmljdGx5IG1haW50YWluZWQgc3VjaCB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgc3RhY2sgdHJhY2UgZW50cmllcyBhcmUgZXZlciBhY2Nlc3NlZCBieSBtZW1jbXAsIG1lbW1vdmUsIGFuZCBzdGFja190cmFjZV9wcmludC5cbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2JiOWM5Y2Q0NDk3ZWZmMjg0NjNlYTIwNWYxNjUyNDFjMGIxNThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6MjI6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg3Y2FmYzkzMmU5ZTYuLmQ1MTgzMzhjZDA3NDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMjE1Myw2ICYjNDM7MjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcbiAgKlx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xuICAqXHRtb3ZlcyBvdXQuXG4mIzQzOyAqXG4mIzQzOyAqXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXG4gICovXG4gXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xuQEAgLTIzMTIsNiAmIzQzOzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXG4gXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcbiAjZW5kaWZcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XG4mIzQzOyNlbmRpZlxuIFxuIFx0dW5zaWduZWQgaW50XHRcdG9wZXJzdGF0ZTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0bGlua19tb2RlO1xuQEAgLTQ0OTgsOSAmIzQzOzQ1MDMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl9uaXRfYWN0aXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpZiAoZGV2KSB7XG4mIzQzO1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfZGVjKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5AQCAtNDUxMiw2ICYjNDM7NDUyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbiYjNDM7XHRcdHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIDEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2luYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmNcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLjIwYzRjOTI3MDhiOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmNcbkBAIC0yNTY2LDYgJiM0MzsyNTY2LDEwIEBAIHN0YXRpYyBib29sIHJjdV9kb19iYXRjaF9jaGVja190aW1lKGxvbmcgY291bnQsIGxvbmcgdGxpbWl0LFxuIFx0ICAgICAgIGxvY2FsX2Nsb2NrKCkgXHUwMDNlPSB0bGltaXQ7XG4gfVxuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZVxuICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtXHUwMDNlYmxpbWl0LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jXG5pbmRleCA3OTgwYTRhMjMyZjlmLi5hZDk4ODk1NjMyODgwIDEwMDY0NFxuLS0tIGEva2VybmVsL3NvZnRpcnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuY1xuQEAgLTU5OSw2ICYjNDM7NTk5LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3NvZnRpcnFfc3RhcnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuICNlbmRpZlxuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyAmIzQzOyBNQVhfU09GVElSUV9USU1FO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuY1xuaW5kZXggM2MwMzRjYmM1YmIzMC4uNjBkYWFlMWM2ZjE3ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC93b3JrcXVldWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jXG5AQCAtMzI1OSw2ICYjNDM7MzI1OSwxMCBAQCBzdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyoqXG4gICogcHJvY2Vzc19vbmVfd29yayAtIHByb2Nlc3Mgc2luZ2xlIHdvcmtcbiAgKiBAd29ya2VyOiBzZWxmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggMzgzMzY4NThjMTY4Zi4uOTNhNzU5NGQ1ODZlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTExNjM5LDYgJiM0MzsxMTYzOSwxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0MztzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xuIFxuICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxXG5AQCAtMTE3MjEsNiAmIzQzOzExNzI5LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFx0XHRcdFx0cHJfZW1lcmcoXCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcbiBcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9wcmludChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEwKTtcbiYjNDM7XHRcdFx0XHRkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbkBAIC0xMjEyMSw2ICYjNDM7MTIxMzAsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXG4gXHRkZXYtXHUwMDNlcHJpdl9sZW4gPSBzaXplb2ZfcHJpdjtcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbiYjNDM7I2VuZGlmXG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXCYjMzQ7bmV0ZGV2XCYjMzQ7KTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7XG5AQCAtMTIyMjMsNiAmIzQzOzEyMjM1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIGZyZWVfcGNwdTpcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiYjNDM7XHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gZnJlZV9kZXY6XG4gI2VuZGlmXG4gXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuQEAgLTEyMjkyLDYgJiM0MzsxMjMwNSw3IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuJiM0MztcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2Vjb3JlX3N0YXRzKTtcbiBcdGRldi1cdTAwM2Vjb3JlX3N0YXRzID0gTlVMTDtcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2V4ZHBfYnVsa3EpO1xuQEAgLTEzNDE4LDYgJiM0MzsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IGJhY2tsb2dfbmFwaV9zZXR1cCxcbiB9O1xuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qXG4gICogICAgICAgVGhpcyBpcyBjYWxsZWQgc2luZ2xlIHRocmVhZGVkIGR1cmluZyBib290LCBzbyBubyBuZWVkXG4gICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXG5AQCAtMTM0MjYsNiAmIzQzOzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJjID0gLUVOT01FTTtcbiBcbiYjNDM7XHRuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTtcbiBcdEJVR19PTighZGV2X2Jvb3RfcGhhc2UpO1xuIFxuIFx0bmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTtcbkBAIC0xMzUyOSwzICYjNDM7MTM1NTAsMjU0IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIH1cbiBcbiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxuJiM0MztzdGF0aWMgc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRhdG9taWNfdCBjb3VudDtcbiYjNDM7XHRpbnQgdHJpbW1lZF9lbnRyaWVzO1xuJiM0MztcdGludCBucl9lbnRyaWVzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XG4mIzQzO30gbmV0ZGV2X3RyYWNlX2J1ZmZlcltORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkVdO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XG4mIzQzO3N0YXRpYyBib29sIG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xuJiM0MztcdGNoYXIgKmNwO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3ByaW50X3N5bWJvbF9ub19vZmZzZXQoYnVmZmVyLCBlbnRyaWVzW2ldKTtcbiYjNDM7XHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspO1xuJiM0MztcdFx0aWYgKGNwKVxuJiM0MztcdFx0XHQqY3AgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0aWYgKGJ1ZmZlclswXSA9PSAmIzM5O3AmIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O3Byb2Nlc3Nfb25lX3dvcmtcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O2smIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O2tzeXNfdW5zaGFyZVwmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGkgJiM0MzsgMTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCYjMzQ7c29ja19zZW5kbXNnX25vc2VjXCYjMzQ7KSB8fFxuJiM0MztcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwmIzM0O3NvY2tfcmVjdm1zZ19ub3NlY1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGkgJiM0MzsgMTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ciYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCYjMzQ7cmN1X2RvX2JhdGNoXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtfJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtfX3N5c19iaW5kXCYjMzQ7KSB8fFxuJiM0MztcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwmIzM0O19fc29ja19yZWxlYXNlXCYjMzQ7KSB8fFxuJiM0MztcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwmIzM0O19fc3lzX2JwZlwmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGkgJiM0MzsgMTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCYjMzQ7ZG9fc29ja19zZXRzb2Nrb3B0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbnJfZW50cmllcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wO1xuJiM0MztcdGludCBjb3VudCwgYmFsYW5jZSA9IDAsIHBvcyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSB0cmltbWVkX2VudHJpZXMgZmllbGQuIERvIG5vdCBtb2RpZnkgbnJfZW50cmllcyBmaWVsZFxuJiM0MztcdCAqIGluIGNhc2Ugc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgaXMgY2FsbGVkIGFnYWluLlxuJiM0MztcdCAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7XG4mIzQzO1x0XHRpZiAocHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9PSBwdHItXHUwMDNlbnJfZW50cmllcylcbiYjNDM7XHRcdFx0cHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9IHRyaW1fbmV0ZGV2X3RyYWNlKHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcyk7XG4mIzQzO1x0fVxuJiM0MztcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyB1c2luZyB0cmltbWVkX2VudHJpZXMgZmllbGQuICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuJiM0MztcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbiYjNDM7XHRcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR0bXAgPSBwdHI7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdFx0aWYgKHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgIT0gdG1wLVx1MDAzZXRyaW1tZWRfZW50cmllcyB8fFxuJiM0MztcdFx0XHQgICAgbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCB0bXAtXHUwMDNlZW50cmllcyxcbiYjNDM7XHRcdFx0XHQgICBwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuJiM0MztcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGlmICghY291bnQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4mIzQzO1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGF0b21pY19zdWIoY291bnQsIFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzXG4mIzQzO1x0XHQgKiBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1x0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4mIzQzO1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkge1xuJiM0MztcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuJiM0MztcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuJiM0MztcdFx0aWYgKCFjb3VudClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHQvKiBSZXBvcnQgdGhpcyBlbnRyeS4gSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2VcbiYjNDM7XHRcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG9zJiM0MzsmIzQzOztcbiYjNDM7XHRcdGJhbGFuY2UgJiM0Mzs9IGNvdW50O1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtDYWxsIHRyYWNlIGZvciAlc1slZF0gJSYjNDM7ZCBhdFxcblwmIzM0OywgZGV2LVx1MDAzZW5hbWUsIHBvcywgY291bnQpO1xuJiM0MztcdFx0c3RhY2tfdHJhY2VfcHJpbnQocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMsIDQpO1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O2JhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxuXCYjMzQ7LCBkZXYtXHUwMDNlbmFtZSwgcG9zLCBiYWxhbmNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5XG4mIzQzO1x0ICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuXG4mIzQzO1x0ICogVGhlcmVmb3JlLCBubyBtb3JlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGNhbGwgd2lsbCBiZSBtYWRlLCBhbmQgd2UgY2FuXG4mIzQzO1x0ICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4mIzQzO1x0XHRwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdH1cbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuJiM0MztcdGludCBucl9lbnRyaWVzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xuJiM0MztcdGlmIChpbl9ubWkoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQvKiBHZXQgc3RhY2sgdHJhY2VzLiAqL1xuJiM0MztcdG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUocHRyLVx1MDAzZWVudHJpZXMpLCAxKTtcbiYjNDM7XHQvKiBUcmltIHRyYWNlcyBvZiBwcm9jZXNzIGNvbnRleHQgbm93IGlmIGNhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgZm9yXG4mIzQzO1x0ICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJiMzOTt0IHRyaW0gdHJhY2VzXG4mIzQzO1x0ICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQXZvaWQga2FsbHN5bXMgbG9va3VwLCBieSB1c2luZyBjYWNoZWQgYWRkcmVzcyByZXNvbHZlZCB1cG9uIGJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGluX3NvZnRpcnEoKSkge1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKGVudHJpZXNbaV0gXHUwMDNlPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBlbnRyaWVzW2ldIFx1MDAzYyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzKSB7XG4mIzQzO1x0XHRcdFx0bnJfZW50cmllcyA9IGkgJiM0MzsgMTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXG4mIzQzO1x0ICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuJiM0MztcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFtZW1jbXAocHRyLVx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7XG4mIzQzO1x0XHRcdGF0b21pY19hZGQoZGVsdGEsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvclxuJiM0MztcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxuJiM0MztcdCAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXJcbiYjNDM7XHQgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkge1xuJiM0MztcdFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cbiYjNDM7XHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZwdHItXHUwMDNlY291bnQsIGRlbHRhKTtcbiYjNDM7XHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbiYjNDM7XHRcdHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuJiM0MztcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHQvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqL1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbiYjNDM7ICoga2FsbHN5bXMgZXZlcnkgdGltZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTtcbiYjNDM7XHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4mIzQzO1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTtcbiYjNDM7XHRjaGFyICpjcDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbiYjNDM7XHRcdGlmIChzdHJuY21wKGJ1ZmZlciwgXCYjMzQ7aGFuZGxlX3NvZnRpcnFzXCYjMzQ7LCAxNSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspO1xuJiM0MztcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwmIzM0OyYjNDM7JWx4LyVseFwmIzM0OywgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XG4mIzQzO1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICYjNDM7IHNpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGUoXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cdTAwM2Vjb21wbGV0aW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuJiM0MztcbiYjNDM7XHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqL1xuJiM0MztcdG1vZF90aW1lcihcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuJiM0MztcdHRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soXHUwMDI2dGMudGltZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IGMwNWQ4NmU2M2FiZjcuLmIzZGRjYzI4M2NiYmMgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuY1xuQEAgLTcyMyw3ICYjNDM7NzIzLDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZClcbiB9XG4gRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jKTtcbiBcbi1zdGF0aWMgdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MztzdGF0aWNcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7bm9pbmxpbmVcbiYjNDM7I2VuZGlmXG4mIzQzO3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFxuQEAgLTc5NSw3ICYjNDM7Nzk5LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsXG4gXHR0cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHNrLCByZXQsIDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKVxuJiM0MztzdGF0aWNcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7bm9pbmxpbmVcbiYjNDM7I2Vsc2VcbiYjNDM7aW5saW5lXG4mIzQzOyNlbmRpZlxuJiM0MztpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlc2VuZG1zZywgaW5ldDZfc2VuZG1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldF9zZW5kbXNnLCBzb2NrLCBtc2csXG5AQCAtMTE0NSw4ICYjNDM7MTE1NSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZlxuIFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICAgIGludCBmbGFncylcbiYjNDM7c3RhdGljXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO25vaW5saW5lXG4mIzQzOyNlbHNlXG4mIzQzO2lubGluZVxuJiM0MzsjZW5kaWZcbiYjNDM7aW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlcmVjdm1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldDZfcmVjdm1zZyxcbkBAIC0yNjUzLDkgJiM0MzsyNjY4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9tc2doZHJfZnJvbV91c2VyKHN0cnVjdCBtc2doZHIgKmttc2csXG4gXHRyZXR1cm4gZXJyIFx1MDAzYyAwID8gZXJyIDogMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4mIzQzO3N0YXRpY1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0Mztub2lubGluZVxuJiM0MzsjZW5kaWZcbiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4mIzQzO1x0XHQgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF1cbiBcdFx0XHRcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiYjMzQ7LAogICAgJiMzNDtLQUxMU1lNUyYjMzQ7LAogICAgJiMzNDtERUJVR19LRVJORUwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgYSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2UgY291bnQgdHJhY2UgYnVmZmVyIHRyYWNraW5nIG1lY2hhbmlzbSB1bmRlciBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiBhbmQgQ09ORklHX0tBTExTWU1TLiBJdCBzYXZlcyBzdGFjayB0cmFjZXMgb24gX19kZXZfaG9sZCgpIGFuZCBfX2Rldl9wdXQoKSwgbWFuYWdpbmcgYW4gUkNVIGxpc3Qgb2YgdHJhY2UgYnVmZmVycyB3aXRoIGEgcmF3IHNwaW5sb2NrIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMsIHdoaWNoIGFmZmVjdHMgY29yZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3YmI5YzljZDQ0OTdlZmYyODQ2M2VhMjA1ZjE2NTI0MWMwYjE1OGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNToyMjo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDg3Y2FmYzkzMmU5ZTYuLmQ1MTgzMzhjZDA3NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjE1Myw2ICYjNDM7MjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgogICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbwogICoJbW92ZXMgb3V0LgomIzQzOyAqCiYjNDM7ICoJQG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlIHsKQEAgLTIzMTIsNiAmIzQzOzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkKIAljb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wczsKICNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCW5ldGRldl90cmFjZV9idWZmZXJfbGlzdDsKJiM0MzsjZW5kaWYKIAogCXVuc2lnbmVkIGludAkJb3BlcnN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCWxpbmtfbW9kZTsKQEAgLTQ0OTgsOSAmIzQzOzQ1MDMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl9uaXRfYWN0aXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7dm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2KSB7CiYjNDM7CQlzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9kZWMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKQEAgLTQ1MTIsNiAmIzQzOzQ1MjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIDEpOwogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAkJdGhpc19jcHVfaW5jKCpkZXYtJmd0O3BjcHVfcmVmY250KTsKICNlbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jCmluZGV4IDk2ODQ4ZmMxZjAyYjguLjIwYzRjOTI3MDhiOGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jCkBAIC0yNTY2LDYgJiM0MzsyNTY2LDEwIEBAIHN0YXRpYyBib29sIHJjdV9kb19iYXRjaF9jaGVja190aW1lKGxvbmcgY291bnQsIGxvbmcgdGxpbWl0LAogCSAgICAgICBsb2NhbF9jbG9jaygpICZndDs9IHRsaW1pdDsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogSW52b2tlIGFueSBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBtYWRlIGl0IHRvIHRoZSBlbmQgb2YgdGhlaXIgZ3JhY2UKICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtJmd0O2JsaW1pdC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDc5ODBhNGEyMzJmOWYuLmFkOTg4OTU2MzI4ODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTk5LDYgJiM0Mzs1OTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH0KICNlbmRpZgogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAzYzAzNGNiYzViYjMwLi42MGRhYWUxYzZmMTdmIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMjU5LDYgJiM0MzszMjU5LDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29yawogICogQHdvcmtlcjogc2VsZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAzODMzNjg1OGMxNjhmLi45M2E3NTk0ZDU4NmUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTE2MzksNiAmIzQzOzExNjM5LDE0IEBAIGludCBuZXRkZXZfcmVmY250X3JlYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTsKIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0MztzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwOwogCiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMQpAQCAtMTE3MjEsNiAmIzQzOzExNzI5LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogCQkJCXByX2VtZXJnKCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXG4mIzM0OywKIAkJCQkJIGRldi0mZ3Q7bmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOwogCQkJCXJlZl90cmFja2VyX2Rpcl9wcmludCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEwKTsKJiM0MzsJCQkJZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiAJCQl9CiAKIAkJCXdhcm5pbmdfdGltZSA9IGppZmZpZXM7CkBAIC0xMjEyMSw2ICYjNDM7MTIxMzAsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAKIAlkZXYtJmd0O3ByaXZfbGVuID0gc2l6ZW9mX3ByaXY7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7CiYjNDM7I2VuZGlmCiAJcmVmX3RyYWNrZXJfZGlyX2luaXQoJmFtcDtkZXYtJmd0O3JlZmNudF90cmFja2VyLCAxMjgsICYjMzQ7bmV0ZGV2JiMzNDspOwogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7CkBAIC0xMjIyMyw2ICYjNDM7MTIyMzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsCiBmcmVlX3BjcHU6CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7cGNwdV9yZWZjbnQpOwomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiBmcmVlX2RldjoKICNlbmRpZgogCXJlZl90cmFja2VyX2Rpcl9leGl0KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlcik7CkBAIC0xMjI5Miw2ICYjNDM7MTIzMDUsNyBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCk7CiAJZGV2LSZndDtwY3B1X3JlZmNudCA9IE5VTEw7CiAjZW5kaWYKJiM0MzsJZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7Y29yZV9zdGF0cyk7CiAJZGV2LSZndDtjb3JlX3N0YXRzID0gTlVMTDsKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3hkcF9idWxrcSk7CkBAIC0xMzQxOCw2ICYjNDM7MTM0MzIsMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0gewogCS5zZXR1cAkJCT0gYmFja2xvZ19uYXBpX3NldHVwLAogfTsKIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTsKJiM0MzsjZW5kaWYKJiM0MzsKIC8qCiAgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWQKICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLgpAQCAtMTM0MjYsNiAmIzQzOzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB7CiAJaW50IGksIHJjID0gLUVOT01FTTsKIAomIzQzOwluZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTsKIAlCVUdfT04oIWRldl9ib290X3BoYXNlKTsKIAogCW5ldF9kZXZfc3RydWN0X2NoZWNrKCk7CkBAIC0xMzUyOSwzICYjNDM7MTM1NTAsMjU0IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKQogfQogCiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0MzsKJiM0MzsjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OAomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJYXRvbWljX3QgY291bnQ7CiYjNDM7CWludCB0cmltbWVkX2VudHJpZXM7CiYjNDM7CWludCBucl9lbnRyaWVzOwomIzQzOwl1bnNpZ25lZCBsb25nIGVudHJpZXNbMjBdOwomIzQzO30gbmV0ZGV2X3RyYWNlX2J1ZmZlcltORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkVdOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2spOwomIzQzO3N0YXRpYyBib29sIG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpJiM0MzsmIzQzOykKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsICZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHRyaW1fbmV0ZGV2X3RyYWNlKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIGludCBucl9lbnRyaWVzKQomIzQzO3sKJiM0MzsJY2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2xfbm9fb2Zmc2V0KGJ1ZmZlciwgZW50cmllc1tpXSk7CiYjNDM7CQljcCA9IHN0cmNocihidWZmZXIsICYjMzk7ICYjMzk7KTsKJiM0MzsJCWlmIChjcCkKJiM0MzsJCQkqY3AgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlpZiAoYnVmZmVyWzBdID09ICYjMzk7cCYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3Byb2Nlc3Nfb25lX3dvcmsmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O2smIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtrc3lzX3Vuc2hhcmUmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O3MmIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3NlbmRtc2dfbm9zZWMmIzM0OykgfHwKJiM0MzsJCQkgICAgIXN0cmNtcChidWZmZXIsICYjMzQ7c29ja19yZWN2bXNnX25vc2VjJiMzNDspKQomIzQzOwkJCQlyZXR1cm4gaSAmIzQzOyAxOwomIzQzOwkJfSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtyJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cmN1X2RvX2JhdGNoJiMzNDspKQomIzQzOwkJCQlyZXR1cm4gaSAmIzQzOyAxOwomIzQzOwkJfSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtfJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7X19zeXNfYmluZCYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3NvY2tfcmVsZWFzZSYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19icGYmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG5yX2VudHJpZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0ciwgKnRtcDsKJiM0MzsJaW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDsKJiM0MzsKJiM0MzsJLyogVXBkYXRlIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gRG8gbm90IG1vZGlmeSBucl9lbnRyaWVzIGZpZWxkCiYjNDM7CSAqIGluIGNhc2Ugc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgaXMgY2FsbGVkIGFnYWluLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQlpZiAocHRyLSZndDt0cmltbWVkX2VudHJpZXMgPT0gcHRyLSZndDtucl9lbnRyaWVzKQomIzQzOwkJCXB0ci0mZ3Q7dHJpbW1lZF9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMpOwomIzQzOwl9CiYjNDM7CS8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyB1c2luZyB0cmltbWVkX2VudHJpZXMgZmllbGQuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJLyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqLwomIzQzOwkJaWYgKCFhdG9taWNfcmVhZCgmYW1wO3B0ci0mZ3Q7Y291bnQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJdG1wID0gcHRyOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UodG1wLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0KSB7CiYjNDM7CQkJaWYgKHB0ci0mZ3Q7dHJpbW1lZF9lbnRyaWVzICE9IHRtcC0mZ3Q7dHJpbW1lZF9lbnRyaWVzIHx8CiYjNDM7CQkJICAgIG1lbWNtcChwdHItJmd0O2VudHJpZXMsIHRtcC0mZ3Q7ZW50cmllcywKJiM0MzsJCQkJICAgcHRyLSZndDt0cmltbWVkX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJCWlmICghY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovCiYjNDM7CQkJYXRvbWljX2FkZChjb3VudCwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlhdG9taWNfc3ViKGNvdW50LCAmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJfQomIzQzOwkJLyogSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcwomIzQzOwkJICogY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJLyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQljb3VudCA9IGF0b21pY19yZWFkKCZhbXA7cHRyLSZndDtjb3VudCk7CiYjNDM7CQlpZiAoIWNvdW50KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJLyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlCiYjNDM7CQkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuCiYjNDM7CQkgKi8KJiM0MzsJCXBvcyYjNDM7JiM0Mzs7CiYjNDM7CQliYWxhbmNlICYjNDM7PSBjb3VudDsKJiM0MzsJCXByX2luZm8oJiMzNDtDYWxsIHRyYWNlIGZvciAlc1slZF0gJSYjNDM7ZCBhdFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBjb3VudCk7CiYjNDM7CQlzdGFja190cmFjZV9wcmludChwdHItJmd0O2VudHJpZXMsIHB0ci0mZ3Q7dHJpbW1lZF9lbnRyaWVzLCA0KTsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwl9CiYjNDM7CWlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7YmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcbiYjMzQ7LCBkZXYtJmd0O25hbWUsIHBvcywgYmFsYW5jZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi0mZ3Q7cGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5CiYjNDM7CSAqIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCBubyBtb3JlIF9fZGV2X3B1dCgpL19fZGV2X2hvbGQoKSBjYWxsIGNhbiBiZSBtYWRlLgomIzQzOwkgKiBUaGVyZWZvcmUsIG5vIG1vcmUgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgY2FsbCB3aWxsIGJlIG1hZGUsIGFuZCB3ZSBjYW4KJiM0MzsJICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC4KJiM0MzsJICovCiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwl3aGlsZSAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCXB0ciA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7cHRyLSZndDtsaXN0KTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyOwomIzQzOwl1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpXTsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CS8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqLwomIzQzOwlpZiAoaW5fbm1pKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CS8qIEdldCBzdGFjayB0cmFjZXMuICovCiYjNDM7CW5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUocHRyLSZndDtlbnRyaWVzKSwgMSk7CiYjNDM7CS8qIFRyaW0gdHJhY2VzIG9mIHByb2Nlc3MgY29udGV4dCBub3cgaWYgY2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBmb3IKJiM0MzsJICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJiMzOTt0IHRyaW0gdHJhY2VzCiYjNDM7CSAqIG9mIHByb2Nlc3MgY29udGV4dCB3aGVuIHRyeWluZyB0byBjb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcy4KJiM0MzsJICoKJiM0MzsJICogQXZvaWQga2FsbHN5bXMgbG9va3VwLCBieSB1c2luZyBjYWNoZWQgYWRkcmVzcyByZXNvbHZlZCB1cG9uIGJvb3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW5fc29mdGlycSgpKSB7CiYjNDM7CQlpbnQgaTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChlbnRyaWVzW2ldICZndDs9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIGVudHJpZXNbaV0gJmx0OyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzKSB7CiYjNDM7CQkJCW5yX2VudHJpZXMgPSBpICYjNDM7IDE7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwkvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzCiYjNDM7CSAqIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcsIHdlIGRvbiYjMzk7dCB1c2UgbG9jayBoZXJlLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQlpZiAocHRyLSZndDtucl9lbnRyaWVzID09IG5yX2VudHJpZXMgJmFtcDsmYW1wOwomIzQzOwkJICAgICFtZW1jbXAocHRyLSZndDtlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkgewomIzQzOwkJCWF0b21pY19hZGQoZGVsdGEsICZhbXA7cHRyLSZndDtjb3VudCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIEFkZCBhIG5ldyBlbnRyeS4gV2UgZG9uJiMzOTt0IHJlLWNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIHdpdGggbG9jayBoZWxkLCBmb3IKJiM0MzsJICogZHVwbGljYXRlZCBlbnRyaWVzIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcuCiYjNDM7CSAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXIKJiM0MzsJICogcmF3IHNwaW5sb2NrIGFscmVhZHkgaGVsZC4KJiM0MzsJICovCiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7CiYjNDM7CQkvKiBSZW1vdmUgb25lIGVudHJ5IGZyb20gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0IGFuZCBpbml0aWFsaXplIGl0LiAqLwomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7cHRyLSZndDtsaXN0KTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtwdHItJmd0O2NvdW50LCBkZWx0YSk7CiYjNDM7CQlwdHItJmd0O25yX2VudHJpZXMgPSBucl9lbnRyaWVzOwomIzQzOwkJcHRyLSZndDt0cmltbWVkX2VudHJpZXMgPSBucl9lbnRyaWVzOwomIzQzOwkJbWVtbW92ZShwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzOwkJLyogQXBwZW5kIGl0IGluIFJDVSBtYW5uZXIsIGZvciByZWFkZXJzIGFyZSBsb2NrbGVzcy4gKi8KJiM0MzsJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cHRyLSZndDtsaXN0LCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7CiYjNDM7CiYjNDM7c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHsKJiM0MzsJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiYjNDM7CXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBSZXNvbHZlIGFkZHJlc3Mgb2YgaGFuZGxlX3NvZnRpcnFzKCkgYW5kIGNhY2hlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBsb29raW5nIHVwCiYjNDM7ICoga2FsbHN5bXMgZXZlcnkgdGltZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07CiYjNDM7CWludCBucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpLCAxKTsKJiM0MzsJY2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7CiYjNDM7CWNoYXIgKmNwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzcHJpbnRfc3ltYm9sKGJ1ZmZlciwgZW50cmllc1tpXSk7CiYjNDM7CQlpZiAoc3RybmNtcChidWZmZXIsICYjMzQ7aGFuZGxlX3NvZnRpcnFzJiMzNDssIDE1KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsmIzQzOyYjMzk7KTsKJiM0MzsJCWlmICghY3AgfHwgc3NjYW5mKGNwLCAmIzM0OyYjNDM7JWx4LyVseCYjMzQ7LCAmYW1wO29mZnNldCwgJmFtcDtzaXplKSAhPSAyKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gZW50cmllc1tpXSAtIG9mZnNldDsKJiM0MzsJCWVuZF9vZl9oYW5kbGVfc29mdGlycXMgPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgJiM0Mzsgc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWNvbXBsZXRlKCZhbXA7Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS0mZ3Q7Y29tcGxldGlvbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB0YzsKJiM0MzsKJiM0MzsJdGltZXJfc2V0dXBfb25fc3RhY2soJmFtcDt0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7dGMuY29tcGxldGlvbik7CiYjNDM7CS8qIFNjaGVkdWxlIGEgY2FsbCB0byBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKS4gKi8KJiM0MzsJbW9kX3RpbWVyKCZhbXA7dGMudGltZXIsIGppZmZpZXMpOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBiZSBjYWxsZWQuICovCiYjNDM7CXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovCiYjNDM7CXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7dGMudGltZXIpOwomIzQzOwl0aW1lcl9kZXN0cm95X29uX3N0YWNrKCZhbXA7dGMudGltZXIpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCBjMDVkODZlNjNhYmY3Li5iM2RkY2MyODNjYmJjIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NvY2tldC5jCkBAIC03MjMsNyAmIzQzOzcyMywxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpCiB9CiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpOwogCi1zdGF0aWMgdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7dm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcyA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpOwogCkBAIC03OTUsNyAmIzQzOzc5OSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LAogCXRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZWxzZQomIzQzO2lubGluZQomIzQzOyNlbmRpZgomIzQzO2ludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3NlbmRtc2csIGluZXQ2X3NlbmRtc2csCiAJCQkJICAgICBpbmV0X3NlbmRtc2csIHNvY2ssIG1zZywKQEAgLTExNDUsOCAmIzQzOzExNTUsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGYKIAl0cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHNrLCByZXQsIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCQkgICAgIGludCBmbGFncykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncykKIHsKIAlpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLSZndDtvcHMpLSZndDtyZWN2bXNnLAogCQkJCSAgICAgaW5ldDZfcmVjdm1zZywKQEAgLTI2NTMsOSAmIzQzOzI2NjgsMTIgQEAgc3RhdGljIGludCBjb3B5X21zZ2hkcl9mcm9tX3VzZXIoc3RydWN0IG1zZ2hkciAqa21zZywKIAlyZXR1cm4gZXJyICZsdDsgMCA/IGVyciA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsCi0JCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywKLQkJCSAgIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbmRpZgomIzQzO2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQogewogCXVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiM0MzsgMjBdCiAJCQkJX19hbGlnbmVkKHNpemVvZihfX2tlcm5lbF9zaXplX3QpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDg1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEZWJ1ZyBQYXRjaCBmb3IgTmV0ZGV2IFJlZmNvdW50IFRyYWNraW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnIG9yIGRpYWdub3N0aWMgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgdHJhY2tpbmcgcmVmZXJlbmNlIGNvdW50cyBvbiBuZXR3b3JrIGRldmljZXMuIEl0IHNlZW1zIHRvIGJlIGEgcHJvYWN0aXZlIG1lYXN1cmUgdG8gY2F0Y2ggbWVtb3J5IGxlYWtzIG9yIG90aGVyIHJlZmNvdW50LXJlbGF0ZWQgaXNzdWVzLCBwb3RlbnRpYWxseSBmb3IgdXNlIHdpdGggdG9vbHMgbGlrZSBzeXprYWxsZXIuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcywgaXMgdGhpcyBqdXN0ICYjMzQ7ZGVjb3JhdGl2ZSYjMzQ7IGxpa2UgbG9nZ2luZyBvciB0cmFjaW5nIHRoYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lIG1lbnRpb25zPyBIb3dldmVyLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyB0d28gbmV3IGZ1bmN0aW9uczogYG5ldGRldl90cmFjZV9idWZmZXJfbGlzdGAgYW5kIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLiBJdCBhcHBlYXJzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byBjcml0aWNhbCBwb2ludHMgd2l0aGluIHRoZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUg4oCTIHNwZWNpZmljYWxseSwgZXZlcnkgY2FsbCB0byBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIOKAkyBwcm92aWRlZCB0aGF0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIGBDT05GSUdfS0FMTFNZTVNgKSBhcmUgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdpbGwgYWZmZWN0IGV4ZWN1dGlvbiBhbmQgaXMgbm90IGRlY29yYXRpdmUuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gYSBiaXQuIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQgdXNlcyBgc3RhY2tfdHJhY2Vfc2F2ZWAgdG8gY2FwdHVyZSBhIHN0YWNrIHRyYWNlLCB3aGljaCBpcyBhIGJpZyBoaW50IHRoYXQgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aGVyZSBhIGRldmljZSBpcyBiZWluZyBoZWxkIG9yIHJlbGVhc2VkLiBUaGlzIHRyYWNlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIGZpeGVkLXNpemUgYnVmZmVyLCBgbmV0ZGV2X3RyYWNlX2J1ZmZlclszMjc2OF1gLiBJIG5vdGUgdGhlIHByZXNlbmNlIG9mIHNwaW5sb2NrcyAoYHJhd19zcGluX2xvY2tfaXJxc2F2ZWApIGFuZCBSQ1UgdHJhdmVyc2FsLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgbG9naWMuIFRoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyBmb3IgbGlzdCBtYW5pcHVsYXRpb24sIGVyYXNpbmcsIGFuZCBkdW1waW5nIG9mIGJ1ZmZlciBkYXRhLiBUaGUgZmFjdCB0aGF0IHRoZSBzdGFjayB0cmFjZSBpcyBzYXZlZCBvbiBldmVyeSBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIG1ha2VzIHRoaXMgYSBwb3RlbnRpYWxseSBoaWdoLW92ZXJoZWFkIG9wZXJhdGlvbiBpZiBpdCYjMzk7cyBydW5uaW5nIGFsbCB0aGUgdGltZSEKClRoZXJlIGFyZSBzb21lIG5vaW5saW5lIGFubm90YXRpb25zIGFkZGVkIHRvIHNldmVyYWwgZnVuY3Rpb25zIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVpciBwdXJwb3NlIGlzIGluIHRoaXMgY29udGV4dC4KClRoZSBtb3N0IGltcG9ydGFudCBzdGVwIGlzIHRvIHNlYXJjaCBmb3IgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCB0byBzZWUgaWYgdGhpcyBpcyBhbiBlbnRpcmVseSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgaWYgaXQmIzM5O3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guCgpJIGJlbGlldmUgdGhpcyBpcyBnb2luZyB0byBiZSBtYXJrZWQgYXMgd29ydGh5IG9mIGZ1enppbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNjA9c3RydWN0IG5ldF9kZXZpY2Uge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMxNi0jZW5kaWZcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjMxNzojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzE4LVx0c3RydWN0IGxpc3RfaGVhZFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUwND12b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUwNS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUwNjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTA3LXZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTM2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTM5LXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDU0MDojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDU0MS1cdHJlZl90cmFja2VyX2FsbG9jKFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlciwgZ2ZwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQ1NDg9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTUwLXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDU1MTojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDU1Mi1cdHJlZmNvdW50X2RlYyhcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIubm9fdHJhY2tlcik7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTU3PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTU5LXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDU2MDojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDU2MS1cdHJlZl90cmFja2VyX2ZyZWUoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaC01LVxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmg6NjojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oLTctdHlwZWRlZiBzdHJ1Y3QgcmVmX3RyYWNrZXIgKm5ldGRldmljZV90cmFja2VyO1xuLS1cbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZz00MD1DT05GSUdfVUJTQU5fVU5SRUFDSEFCTEU9eVxuLS1cbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZy00My0jXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc6NDQ6Q09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVI9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTQ1LUNPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVI9eVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTI1NTg9c3RhdGljIGJvb2wgcmN1X2RvX2JhdGNoX2NoZWNrX3RpbWUobG9uZyBjb3VudCwgbG9uZyB0bGltaXQsXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMjU2OC1cbmtlcm5lbC9yY3UvdHJlZS5jOjI1Njk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC9yY3UvdHJlZS5jLTI1NzAtc3RhdGljIG5vaW5saW5lIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKTtcbi0tXG5rZXJuZWwvc29mdGlycS5jPTU5OT1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuLS1cbmtlcm5lbC9zb2Z0aXJxLmMtNjAxLVxua2VybmVsL3NvZnRpcnEuYzo2MDI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC9zb2Z0aXJxLmMtNjAzLXN0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jPTMyNDQ9c3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy0zMjYxLVxua2VybmVsL3dvcmtxdWV1ZS5jOjMyNjI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC93b3JrcXVldWUuYy0zMjYzLXN0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTItXG5uZXQvS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy00LVx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1wmIzM0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExNjQwPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbm5ldC9jb3JlL2Rldi5jLTExNjQxLVxubmV0L2NvcmUvZGV2LmM6MTE2NDI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTExNjQzLXN0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjEwMz1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxMzItXG5uZXQvY29yZS9kZXYuYzoxMjEzMzojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTIxMzQtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzQyNz1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTM0MzQtXG5uZXQvY29yZS9kZXYuYzoxMzQzNTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTM0MzYtc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzU1Mj1zdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbm5ldC9jb3JlL2Rldi5jLTEzNTUzLVxubmV0L2NvcmUvZGV2LmM6MTM1NTQ6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTEzNTU1LVxuLS1cbm5ldC9zb2NrZXQuYz03MjY9c3RhdGljXG5uZXQvc29ja2V0LmM6NzI3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtNzI4LW5vaW5saW5lXG4tLVxubmV0L3NvY2tldC5jPTgwMj1zdGF0aWNcbm5ldC9zb2NrZXQuYzo4MDM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy04MDQtbm9pbmxpbmVcbi0tXG5uZXQvc29ja2V0LmM9MTE1OD1zdGF0aWNcbm5ldC9zb2NrZXQuYzoxMTU5OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtMTE2MC1ub2lubGluZVxuLS1cbm5ldC9zb2NrZXQuYz0yNjcxPXN0YXRpY1xubmV0L3NvY2tldC5jOjI2NzI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy0yNjczLW5vaW5saW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gYG5ldC9LY29uZmlnLmRlYnVnYCBhbmQgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2s6CgoqKkFuYWx5emluZyBOZXR3b3JrIERldmljZSBSZWZlcmVuY2UgQ291bnRpbmcgRGVidWdnaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHplcm8gaW4gb24gaG93IHRvIGVuYWJsZSBvciBjb25maWd1cmUgdGhpcyBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgZmVhdHVyZS4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IHBvaW50cyB0byBgbmV0L0tjb25maWcuZGVidWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZGVidWdnaW5nIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIHN1YnN5c3RlbXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgYSByZWZlcmVuY2UgY291bnQgdHJhY2tlci4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoZSBuZXR3b3JraW5nIHNwYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdGhlcmUuIElzIGl0IGEgZGlyZWN0IGVuYWJsZS9kaXNhYmxlLCBvciBhcmUgdGhlcmUgZGlmZmVyZW50IGxldmVscyBvZiB2ZXJib3NpdHkgb3IgZGV0YWlsPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlbGF0ZWQga2VybmVsIHBhcmFtZXRlcnMgSSBzaG91bGQgY2hlY2sgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoPyBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBJIGNvdWxkIHBvdGVudGlhbGx5IHVzZSB0aGlzIHRyYWNrZXIgdG8gZGVidWcgYSB0cmlja3kgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IGlzc3VlIEkmIzM5O20gd29ya2luZyBvbi4gVGhlIHNwZWNpZmljcyBvZiB0aGUgaXNzdWUgbWlnaHQgZ3VpZGUgbWUgZnVydGhlciwgYnV0IEkgbmVlZCBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmaXJzdC4gU28sIGBuZXQvS2NvbmZpZy5kZWJ1Z2AgaXQgaXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldCBkZXZpY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAgNjpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gICA3Olx0XHRkZWZhdWx0IG5cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIGRldmljZSByZWZlcmVuY2VzLlxuICAxMDpcdFx0ICBUaGlzIGFkZHMgbWVtb3J5IGFuZCBjcHUgY29zdHMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxuICAxMzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAxNTpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gIDE2Olx0XHRkZWZhdWx0IG5cbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIG5ldG5zIHJlZmVyZW5jZXMuXG4gIDE5Olx0XHQgIFRoaXMgYWRkcyBtZW1vcnkgYW5kIGNwdSBjb3N0cy5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgREVCVUdfTkVUXG4gIDIyOlx0XHRib29sIFwmIzM0O0FkZCBnZW5lcmljIG5ldHdvcmtpbmcgZGVidWdcJiMzNDtcbiAgMjM6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBORVRcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgRW5hYmxlIGV4dHJhIHNhbml0eSBjaGVja3MgaW4gbmV0d29ya2luZy5cbiAgMjY6XHRcdCAgVGhpcyBpcyBtb3N0bHkgdXNlZCBieSBmdXp6ZXJzLCBidXQgaXMgc2FmZSB0byBzZWxlY3QuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIERFQlVHX05FVF9TTUFMTF9SVE5MXG4gIDI5Olx0XHRib29sIFwmIzM0O0FkZCBleHRyYSBwZXItbmV0bnMgbXV0ZXggaW5zaWRlIFJUTkxcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIxMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDczOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIFRpbWUqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGVzZSBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGd1aWRlbGluZXMgYXJlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGNoZWNrIGZvciBtb2RpZmljYXRpb25zIHRoYXQgYXJlICphY3R1YWxseSogaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIElmIGl0JiMzOTtzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGxvZ2dpbmcsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBzdHVmZiwgdGhlbiBpdCYjMzk7cyBhIG5vLWdvLiBCdXQsIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsICphbmQqIEkgY2FuIHZlcmlmeSBpdCYjMzk7cyBleGVjdXRhYmxlLCB0aGVuIGl0JiMzOTtzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhpcyBzcGVjaWZpYyBwYXRjaC4gSG9sZCBvbiwgd2hhdCBleGFjdGx5ICpkaWQqIGl0IGRvIGFnYWluPyBBaCB5ZXMsIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCwgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYCBhcmUgY2FsbGluZyBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYC4gQW5kIGdldCB0aGlzLCBpdCBpcyBjYWxsZWQgZXZlcnkgc2luZ2xlIHRpbWUgYW55IG5ldHdvcmsgZGV2aWNlIGlzIHRvdWNoZWQhIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIGRvaW5nIGEgYnVuY2ggb2YgaW50ZXJlc3RpbmcgdGhpbmdzOiBpdCBpcyBhbGxvY2F0aW5nIGZyb20gYSBnbG9iYWwgcmluZy9idWZmZXIsIHVzaW5nIHJhdyBzcGlubG9ja3MsIHNhdmluZyBzdGFjayB0cmFjZXMsIGNvbXBhcmluZyBzdHVmZiB1c2luZyBgbWVtY21wYCwgdXBkYXRpbmcgYXRvbWljIGNvdW50ZXJzLCBhbmQgYWRkaW5nIHRvIGEgbGlua2VkIGxpc3QgYGRldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0YC4gV2hlbiBuZXRkZXZpY2VzIGFyZSBmcmVlZCBvciBkdW1wZWQgKHdoaWNoIGhhcHBlbnMgaW4gcGxhY2VzIGxpa2UgYG5ldGRldl93YWl0X2FsbHJlZnNfYW55YCwgYGFsbG9jX25ldGRldl9tcXNgLCBgZnJlZV9uZXRkZXZgKSwgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgIG9yIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgIGdldCBjYWxsZWQuIEFsc28sIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgIGlzIGRvaW5nIHRpbWVyIHNldHVwIGFuZCBjb21wbGV0aW9uIGR1cmluZyBgbmV0X2Rldl9pbml0YC4KClRoaXMgaXMgZnVuY3Rpb25hbGx5IHJlbGV2YW50LiBJIHNlZSB0cmFjaW5nIGJ1ZmZlciBtYW5hZ2VtZW50LCBsaW5rZWQgbGlzdCBtYW5pcHVsYXRpb24gdW5kZXIgY29uY3VycmVuY3ksIGFuZCByYXcgc3BpbmxvY2tzIGluIGludGVycnVwdC9zb2Z0aXJxL3Byb2Nlc3MgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBjaGFuZ2VzIQoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZDogYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AuIE9rLCBsZXQmIzM5O3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIEFoLCBmcm9tIGBuZXQvS2NvbmZpZy5kZWJ1Z2AsIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgLCBgU1RBQ0tUUkFDRV9TVVBQT1JUYCwgYW5kIGBORVRgLCBhbmQgaXQgYWxzbyBgc2VsZWN0YHMgYFJFRl9UUkFDS0VSYC4gQW5kIGBDT05GSUdfS0FMTFNZTVNgLi4uIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGFnYWluIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBkZXBlbmRzIG9uLgoKR2l2ZW4gdGhpcywgdGhpcyAqaXMqIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGNvcmUga2VybmVsIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLQUxMU1lNUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MjA4Nj1jb25maWcgQ0FDSEVTVEFUX1NZU0NBTExcbi0tXG5pbml0L0tjb25maWctMjA5NS1cbmluaXQvS2NvbmZpZzoyMDk2OmNvbmZpZyBLQUxMU1lNU1xuaW5pdC9LY29uZmlnLTIwOTctXHRib29sIFwmIzM0O0xvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wc1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWctMjEwMy1cbmluaXQvS2NvbmZpZzoyMTA0OmNvbmZpZyBLQUxMU1lNU19TRUxGVEVTVFxuaW5pdC9LY29uZmlnLTIxMDUtXHRib29sIFwmIzM0O1Rlc3QgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2Ugb2Yga2FsbHN5bXNcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMjExNi1cbmluaXQvS2NvbmZpZzoyMTE3OmNvbmZpZyBLQUxMU1lNU19BTExcbmluaXQvS2NvbmZpZy0yMTE4LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGFsbCBzeW1ib2xzIGluIGthbGxzeW1zXCYjMzQ7XG4tLVxua2VybmVsL2tzeW1zX2NvbW1vbi5jLTMtICoga3N5bXNfY29tbW9uLmM6IEEgc3BsaXQgb2Yga2VybmVsL2thbGxzeW1zLmNcbmtlcm5lbC9rc3ltc19jb21tb24uYzo0OiAqIENvbnRhaW5zIGEgZmV3IGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5hdGlvbnMgaW5kZXBlbmRlbnQgb2YgY29uZmlnIEtBTExTWU1TLlxua2VybmVsL2tzeW1zX2NvbW1vbi5jLTUtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZSBmb3IgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYSBiaXQgZGVlcGVyLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGFyb3VuZCBsaW5lIDIwOTYuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHNwb3QgdG8gYmVnaW4gZXhwbG9yaW5nIHRoZSBzZXR0aW5ncyB0aGF0IGFyZSB1c2VkIGR1cmluZyBlYXJseSBzeXN0ZW0gc3RhcnR1cCwgYW5kIGxpa2VseSBzb21lIG9mIHRoZSBjb3JlIGRlZmF1bHRzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHNwZWNpZmljIG9wdGlvbnMgYXJlIGJlaW5nIHNldCBvciBpbmZsdWVuY2VkIGVhcmx5IG9uLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHBhcnNpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA5MDpcdFx0ICBFbmFibGUgdGhlIGNhY2hlc3RhdCBzeXN0ZW0gY2FsbCwgd2hpY2ggcXVlcmllcyB0aGUgcGFnZSBjYWNoZVxuMjA5MTpcdFx0ICBzdGF0aXN0aWNzIG9mIGEgZmlsZSAobnVtYmVyIG9mIGNhY2hlZCBwYWdlcywgZGlydHkgcGFnZXMsXG4yMDkyOlx0XHQgIHBhZ2VzIG1hcmtlZCBmb3Igd3JpdGViYWNrLCAocmVjZW50bHkpIGV2aWN0ZWQgcGFnZXMpLlxuMjA5MzpcdFxuMjA5NDpcdFx0ICBJZiB1bnN1cmUgc2F5IFkgaGVyZS5cbjIwOTU6XHRcbjIwOTY6XHRjb25maWcgS0FMTFNZTVNcbjIwOTc6XHRcdGJvb2wgXCYjMzQ7TG9hZCBhbGwgc3ltYm9scyBmb3IgZGVidWdnaW5nL2tzeW1vb3BzXCYjMzQ7IGlmIEVYUEVSVFxuMjA5ODpcdFx0ZGVmYXVsdCB5XG4yMDk5Olx0XHRoZWxwXG4yMTAwOlx0XHQgIFNheSBZIGhlcmUgdG8gbGV0IHRoZSBrZXJuZWwgcHJpbnQgb3V0IHN5bWJvbGljIGNyYXNoIGluZm9ybWF0aW9uIGFuZFxuMjEwMTpcdFx0ICBzeW1ib2xpYyBzdGFjayBiYWNrdHJhY2VzLiBUaGlzIGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXG4yMTAyOlx0XHQgIHNvbWV3aGF0LCBhcyBhbGwgc3ltYm9scyBoYXZlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuXG4yMTAzOlx0XG4yMTA0Olx0Y29uZmlnIEtBTExTWU1TX1NFTEZURVNUXG4yMTA1Olx0XHRib29sIFwmIzM0O1Rlc3QgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2Ugb2Yga2FsbHN5bXNcJiMzNDtcbjIxMDY6XHRcdGRlcGVuZHMgb24gS0FMTFNZTVNcbjIxMDc6XHRcdGRlZmF1bHQgblxuMjEwODpcdFx0aGVscFxuMjEwOTpcdFx0ICBUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlIG9mIHNvbWUgaW50ZXJmYWNlcywgc3VjaCBhc1xuMjExMDpcdFx0ICBrYWxsc3ltc19sb29rdXBfbmFtZS4gSXQgYWxzbyBjYWxjdWxhdGVzIHRoZSBjb21wcmVzc2lvbiByYXRlIG9mIHRoZVxuMjExMTpcdFx0ICBrYWxsc3ltcyBjb21wcmVzc2lvbiBhbGdvcml0aG0gZm9yIHRoZSBjdXJyZW50IHN5bWJvbCBzZXQuXG4yMTEyOlx0XG4yMTEzOlx0XHQgIFN0YXJ0IHNlbGYtdGVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHN5c3RlbSBzdGFydHVwLiBTdWdnZXN0IGV4ZWN1dGluZ1xuMjExNDpcdFx0ICBcJiMzNDtkbWVzZyB8IGdyZXAga2FsbHN5bXNfc2VsZnRlc3RcJiMzNDsgdG8gY29sbGVjdCB0ZXN0IHJlc3VsdHMuIFwmIzM0O2ZpbmlzaFwmIzM0OyBpc1xuMjExNTpcdFx0ICBkaXNwbGF5ZWQgaW4gdGhlIGxhc3QgbGluZSwgaW5kaWNhdGluZyB0aGF0IHRoZSB0ZXN0IGlzIGNvbXBsZXRlLlxuMjExNjpcdFxuMjExNzpcdGNvbmZpZyBLQUxMU1lNU19BTExcbjIxMTg6XHRcdGJvb2wgXCYjMzQ7SW5jbHVkZSBhbGwgc3ltYm9scyBpbiBrYWxsc3ltc1wmIzM0O1xuMjExOTpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IEtBTExTWU1TXG4yMTIwOlx0XHRoZWxwXG4yMTIxOlx0XHQgIE5vcm1hbGx5IGthbGxzeW1zIG9ubHkgY29udGFpbnMgdGhlIHN5bWJvbHMgb2YgZnVuY3Rpb25zIGZvciBuaWNlclxuMjEyMjpcdFx0ICBPT1BTIG1lc3NhZ2VzIGFuZCBiYWNrdHJhY2VzIChpLmUuLCBzeW1ib2xzIGZyb20gdGhlIHRleHQgYW5kIGluaXR0ZXh0XG4yMTIzOlx0XHQgIHNlY3Rpb25zKS4gVGhpcyBpcyBzdWZmaWNpZW50IGZvciBtb3N0IGNhc2VzLiBBbmQgb25seSBpZiB5b3Ugd2FudCB0b1xuMjEyNDpcdFx0ICBlbmFibGUga2VybmVsIGxpdmUgcGF0Y2hpbmcsIG9yIG90aGVyIGxlc3MgY29tbW9uIHVzZSBjYXNlcyAoZS5nLixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NzcKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMTM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgS2VybmVsIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGtlcm5lbCBmdW5jdGlvbnMgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gSSYjMzk7bSBsb29raW5nIGZvciBzcGVjaWZpYyBlbnRyeXBvaW50cywgbm90IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBNeSBwcmlvcml0eSBpcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbmV0L2NvcmUvZGV2LmNgIG1vZHVsZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBJIGZvdW5kIHRoZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBmdW5jdGlvbi4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAsIGFuZCBpc24mIzM5O3Qgc3RhdGljLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQuIEkgd2VudCB0aHJvdWdoIHRoZSBlbnRpcmUgZGlmZiwgbm90aW5nIGFsbCBjaGFuZ2VkIGZ1bmN0aW9ucyBhbmQgZmlsZXMsIGluY2x1ZGluZyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBzdGF0aWMgaGVscGVycywgbWFraW5nIHN1cmUgdG8gY29uc2lkZXIgZXZlcnl0aGluZy4gVGhpcyBpbmNsdWRlcyBgcmN1X2RvX2JhdGNoYCwgYGhhbmRsZV9zb2Z0aXJxc2AsIGFuZCBvdGhlcnMsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKSSB3YW50IHRvIGJlIHRob3JvdWdoIGhlcmUuIEkmIzM5O3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBhZ2FpbiB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGUgcGF0Y2gsIGluY2x1ZGluZyB0aG9zZSBpbiBgbmV0L3NvY2tldC5jYCBhbmQgZWxzZXdoZXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGFzIGl0IHN0YW5kcyBvdXQgYXMgdGhlIG1haW4gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBpbnRyb2R1Y2VkLiBJdCBzZWVtcyBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIG15IGNyaXRlcmlhLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXBwZWFyIHRvIGJlIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCwgYEtBTExTWU1TYCwgYW5kIHRoZWlyIGRlcGVuZGVuY2llczogYERFQlVHX0tFUk5FTGAgYW5kIGBORVRgLiBJIG1hZGUgc3VyZSB0byBjaGVjayB0aGUgaWZkZWZzIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AgYXJlIHRoZSBwcmltYXJ5IGd1YXJkcyBmb3IgdGhlIG5ldyBjb2RlLiBJIHRoaW5rIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGNvbXBsZXRlIHNldCBvZiByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4KCklzIHRoaXMgY29kZSBhY3R1YWxseSB3b3J0aHkgb2YgZnV6emluZz8gQmFzZWQgb24gbXkgcmV2aWV3LCB5ZXMsIGFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMsIG1hbmFnaW5nIG5ldGRldmljZSByZWZlcmVuY2VzIHdpdGggYW4gaW4ta2VybmVsIHRyYWNlIGJ1ZmZlciwgaW5jbHVkaW5nIHJhdyBzcGlubG9ja3MsIFJDVSBsaXN0IG1hbmFnZW1lbnQsIGNvbmN1cnJlbmN5IGNvbnRyb2wsIGFuZCBzeW1ib2wgbmFtZSBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucy4gSXQgaXNuJiMzOTt0IGp1c3QgZGVjb3JhdGl2ZSBsb2dnaW5nOyBpdCBpbnRyb2R1Y2VzIG5ldyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2sgcHJvdGVjdGlvbi4gVGhpcyBuZXcgY29kZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc2VyaW91cyByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaXNzdWVzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgdGhlcmUgYXJlIGNsZWFybHkgcmlza3Mgd29ydGggZXhwbG9yaW5nLgoKRXZlcnl0aGluZyBpcyB2ZXJpZmllZCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OywKICAgICYjMzQ7REVCVUdfS0VSTkVMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OywKICAgICYjMzQ7REVCVUdfS0VSTkVMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXG5cbjEuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIGV0Yy4pOyBhbGwgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cgdmlhIHByaW50ay9zdGFja190cmFjZV9wcmludC5cbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cbjMuIExlbmd0aCBwYXJhbWV0ZXJzIChucl9lbnRyaWVzLCB0cmltbWVkX2VudHJpZXMpIGFyZSBzdHJpY3RseSBtYWludGFpbmVkIHN1Y2ggdGhhdCBvbmx5IGluaXRpYWxpemVkIHN0YWNrIHRyYWNlIGVudHJpZXMgYXJlIGV2ZXIgYWNjZXNzZWQgYnkgbWVtY21wLCBtZW1tb3ZlLCBhbmQgc3RhY2tfdHJhY2VfcHJpbnQuXG40LiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIFJDVS9yYXcgc3BpbmxvY2sgdXNhZ2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiYjljOWNkNDQ5N2VmZjI4NDYzZWEyMDVmMTY1MjQxYzBiMTU4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE1OjIyOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggODdjYWZjOTMyZTllNi4uZDUxODMzOGNkMDc0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yMTUzLDYgJiM0MzsyMTUzLDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHsKICAqCiAgKglGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvCiAgKgltb3ZlcyBvdXQuCiYjNDM7ICoKJiM0MzsgKglAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuCiAgKi8KIAogc3RydWN0IG5ldF9kZXZpY2UgewpAQCAtMjMxMiw2ICYjNDM7MjMxNCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKQogCWNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzOwogI2VuZGlmCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OwomIzQzOyNlbmRpZgogCiAJdW5zaWduZWQgaW50CQlvcGVyc3RhdGU7CiAJdW5zaWduZWQgY2hhcgkJbGlua19tb2RlOwpAQCAtNDQ5OCw5ICYjNDM7NDUwMywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJCXRoaXNfY3B1X2RlYygqZGV2LSZndDtwY3B1X3JlZmNudCk7CiAjZWxzZQpAQCAtNDUxMiw2ICYjNDM7NDUyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldikgewomIzQzOwkJc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9pbmMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmMKaW5kZXggOTY4NDhmYzFmMDJiOC4uMjBjNGM5MjcwOGI4YyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmMKQEAgLTI1NjYsNiAmIzQzOzI1NjYsMTAgQEAgc3RhdGljIGJvb2wgcmN1X2RvX2JhdGNoX2NoZWNrX3RpbWUobG9uZyBjb3VudCwgbG9uZyB0bGltaXQsCiAJICAgICAgIGxvY2FsX2Nsb2NrKCkgJmd0Oz0gdGxpbWl0OwogfQogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKJiM0MzsjZW5kaWYKJiM0MzsKIC8qCiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQogICogcGVyaW9kLiAgVGhyb3R0bGUgYXMgc3BlY2lmaWVkIGJ5IHJkcC0mZ3Q7YmxpbWl0LgpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggNzk4MGE0YTIzMmY5Zi4uYWQ5ODg5NTYzMjg4MCAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc29mdGlycS5jCkBAIC01OTksNiAmIzQzOzU5OSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfQogI2VuZGlmCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpOwomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKQogewogCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyAmIzQzOyBNQVhfU09GVElSUV9USU1FOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDNjMDM0Y2JjNWJiMzAuLjYwZGFhZTFjNmYxN2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTMyNTksNiAmIzQzOzMyNTksMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrCiAgKiBAd29ya2VyOiBzZWxmCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLjkzYTc1OTRkNTg2ZTMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMTYzOSw2ICYjNDM7MTE2MzksMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7CiAKICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxCkBAIC0xMTcyMSw2ICYjNDM7MTE3MjksNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJCQkJcHJfZW1lcmcoJiMzNDt1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcbiYjMzQ7LAogCQkJCQkgZGV2LSZndDtuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7CiAJCQkJcmVmX3RyYWNrZXJfZGlyX3ByaW50KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlciwgMTApOwomIzQzOwkJCQlkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIAkJCX0KIAogCQkJd2FybmluZ190aW1lID0gamlmZmllczsKQEAgLTEyMTIxLDYgJiM0MzsxMjEzMCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIAogCWRldi0mZ3Q7cHJpdl9sZW4gPSBzaXplb2ZfcHJpdjsKIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTsKJiM0MzsjZW5kaWYKIAlyZWZfdHJhY2tlcl9kaXJfaW5pdCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEyOCwgJiMzNDtuZXRkZXYmIzM0Oyk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCWRldi0mZ3Q7cGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTsKQEAgLTEyMjIzLDYgJiM0MzsxMjIzNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIGZyZWVfcGNwdToKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCk7CiYjNDM7CWVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIGZyZWVfZGV2OgogI2VuZGlmCiAJcmVmX3RyYWNrZXJfZGlyX2V4aXQoJmFtcDtkZXYtJmd0O3JlZmNudF90cmFja2VyKTsKQEAgLTEyMjkyLDYgJiM0MzsxMjMwNSw3IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gTlVMTDsKICNlbmRpZgomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiAJZnJlZV9wZXJjcHUoZGV2LSZndDtjb3JlX3N0YXRzKTsKIAlkZXYtJmd0O2NvcmVfc3RhdHMgPSBOVUxMOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7eGRwX2J1bGtxKTsKQEAgLTEzNDE4LDYgJiM0MzsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7CiAJLnNldHVwCQkJPSBiYWNrbG9nX25hcGlfc2V0dXAsCiB9OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9OwomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZAogICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuCkBAIC0xMzQyNiw2ICYjNDM7MTM0NDYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCiYjNDM7CW5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpOwogCUJVR19PTighZGV2X2Jvb3RfcGhhc2UpOwogCiAJbmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTsKQEAgLTEzNTI5LDMgJiM0MzsxMzU1MCwyNTQgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB9CiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwomIzQzOyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlhdG9taWNfdCBjb3VudDsKJiM0MzsJaW50IHRyaW1tZWRfZW50cmllczsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07CiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07CiYjNDM7c3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7CiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO25ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwljaGFyICpjcDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ByaW50X3N5bWJvbF9ub19vZmZzZXQoYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspOwomIzQzOwkJaWYgKGNwKQomIzQzOwkJCSpjcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCWlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cHJvY2Vzc19vbmVfd29yayYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ayYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2tzeXNfdW5zaGFyZSYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3NvY2tfc2VuZG1zZ19ub3NlYyYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWMmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O3ImIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtyY3VfZG9fYmF0Y2gmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19iaW5kJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc29ja19yZWxlYXNlJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc3lzX2JwZiYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gbnJfZW50cmllczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wOwomIzQzOwlpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwOwomIzQzOwomIzQzOwkvKiBVcGRhdGUgdHJpbW1lZF9lbnRyaWVzIGZpZWxkLiBEbyBub3QgbW9kaWZ5IG5yX2VudHJpZXMgZmllbGQKJiM0MzsJICogaW4gY2FzZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBpcyBjYWxsZWQgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O3RyaW1tZWRfZW50cmllcyA9PSBwdHItJmd0O25yX2VudHJpZXMpCiYjNDM7CQkJcHRyLSZndDt0cmltbWVkX2VudHJpZXMgPSB0cmltX25ldGRldl90cmFjZShwdHItJmd0O2VudHJpZXMsIHB0ci0mZ3Q7bnJfZW50cmllcyk7CiYjNDM7CX0KJiM0MzsJLyogTWVyZ2UgZHVwbGljYXRlZCBlbnRyaWVzIHVzaW5nIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LAomIzQzOwkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQlpZiAoIWF0b21pY19yZWFkKCZhbXA7cHRyLSZndDtjb3VudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl0bXAgPSBwdHI7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QpIHsKJiM0MzsJCQlpZiAocHRyLSZndDt0cmltbWVkX2VudHJpZXMgIT0gdG1wLSZndDt0cmltbWVkX2VudHJpZXMgfHwKJiM0MzsJCQkgICAgbWVtY21wKHB0ci0mZ3Q7ZW50cmllcywgdG1wLSZndDtlbnRyaWVzLAomIzQzOwkJCQkgICBwdHItJmd0O3RyaW1tZWRfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCQljb3VudCA9IGF0b21pY19yZWFkKCZhbXA7dG1wLSZndDtjb3VudCk7CiYjNDM7CQkJaWYgKCFjb3VudCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJLyogTW92ZSBjb3VudCBmcm9tIG5vbi1maXJzdCBlbnRyeSB0byBmaXJzdCBlbnRyeS4gKi8KJiM0MzsJCQlhdG9taWNfYWRkKGNvdW50LCAmYW1wO3B0ci0mZ3Q7Y291bnQpOwomIzQzOwkJCWF0b21pY19zdWIoY291bnQsICZhbXA7dG1wLSZndDtjb3VudCk7CiYjNDM7CQl9CiYjNDM7CQkvKiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzCiYjNDM7CQkgKiBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LgomIzQzOwkJICovCiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQomIzQzOwkvKiBSZXBvcnQgYWxsIGVudHJpZXMgZm9yIHRoaXMgZGV2aWNlLiAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCWNvdW50ID0gYXRvbWljX3JlYWQoJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCWlmICghY291bnQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKiBSZXBvcnQgdGhpcyBlbnRyeS4gSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2UKJiM0MzsJCSAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJcG9zJiM0MzsmIzQzOzsKJiM0MzsJCWJhbGFuY2UgJiM0Mzs9IGNvdW50OwomIzQzOwkJcHJfaW5mbygmIzM0O0NhbGwgdHJhY2UgZm9yICVzWyVkXSAlJiM0MztkIGF0XG4mIzM0OywgZGV2LSZndDtuYW1lLCBwb3MsIGNvdW50KTsKJiM0MzsJCXN0YWNrX3RyYWNlX3ByaW50KHB0ci0mZ3Q7ZW50cmllcywgcHRyLSZndDt0cmltbWVkX2VudHJpZXMsIDQpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJaWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtiYWxhbmNlIGFzIG9mICVzWyVkXSBpcyAlZFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBiYWxhbmNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCkgd2FzIGFscmVhZHkKJiM0MzsJICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuCiYjNDM7CSAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhbgomIzQzOwkgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkgewomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3B0ci0mZ3Q7bGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci0mZ3Q7ZW50cmllcyldOwomIzQzOwlpbnQgbnJfZW50cmllczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovCiYjNDM7CWlmIChpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJLyogR2V0IHN0YWNrIHRyYWNlcy4gKi8KJiM0MzsJbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpLCAxKTsKJiM0MzsJLyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvcgomIzQzOwkgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXMKJiM0MzsJICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLgomIzQzOwkgKgomIzQzOwkgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC4KJiM0MzsJICovCiYjNDM7CWlmIChpbl9zb2Z0aXJxKCkpIHsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGVudHJpZXNbaV0gJmd0Oz0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZW50cmllc1tpXSAmbHQ7IGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHsKJiM0MzsJCQkJbnJfZW50cmllcyA9IGkgJiM0MzsgMTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXMKJiM0MzsJICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O25yX2VudHJpZXMgPT0gbnJfZW50cmllcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CiYjNDM7CQkJYXRvbWljX2FkZChkZWx0YSwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJLyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvcgomIzQzOwkgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy4KJiM0MzsJICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlcgomIzQzOwkgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCS8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovCiYjNDM7CQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3B0ci0mZ3Q7Y291bnQsIGRlbHRhKTsKJiM0MzsJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQlwdHItJmd0O3RyaW1tZWRfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQltZW1tb3ZlKHB0ci0mZ3Q7ZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQkvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqLwomIzQzOwkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXAKJiM0MzsgKiBrYWxsc3ltcyBldmVyeSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTsKJiM0MzsJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWlmIChzdHJuY21wKGJ1ZmZlciwgJiMzNDtoYW5kbGVfc29mdGlycXMmIzM0OywgMTUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJY3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspOwomIzQzOwkJaWYgKCFjcCB8fCBzc2NhbmYoY3AsICYjMzQ7JiM0MzslbHgvJWx4JiMzNDssICZhbXA7b2Zmc2V0LCAmYW1wO3NpemUpICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0OwomIzQzOwkJZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmIzQzOyBzaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY29tcGxldGUoJmFtcDtjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLSZndDtjb21wbGV0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjOwomIzQzOwomIzQzOwl0aW1lcl9zZXR1cF9vbl9zdGFjaygmYW1wO3RjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqLwomIzQzOwltb2RfdGltZXIoJmFtcDt0Yy50aW1lciwgamlmZmllcyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi8KJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO3RjLmNvbXBsZXRpb24pOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0Yy50aW1lcik7CiYjNDM7CXRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soJmFtcDt0Yy50aW1lcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGMwNWQ4NmU2M2FiZjcuLmIzZGRjYzI4M2NiYmMgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTcyMyw3ICYjNDM7NzIzLDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCkKIH0KIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZW5kaWYKJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyk7CiAKQEAgLTc5NSw3ICYjNDM7Nzk5LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsCiAJdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJaW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7c2VuZG1zZywgaW5ldDZfc2VuZG1zZywKIAkJCQkgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLApAQCAtMTE0NSw4ICYjNDM7MTE1NSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZgogCXRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgICAgaW50IGZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2Vsc2UKJiM0MztpbmxpbmUKJiM0MzsjZW5kaWYKJiM0MztpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3JlY3Ztc2csCiAJCQkJICAgICBpbmV0Nl9yZWN2bXNnLApAQCAtMjY1Myw5ICYjNDM7MjY2OCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLAogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIH0KIAotc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywKLQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLAotCQkJICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpCiB7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF0KIAkJCQlfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0OAoJCQkJCQkJb3V0cHV0OiAyNjEKCQkJCQkJCXRob3VnaHRzOiAyMzY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2gsIGZvY3VzZWQgb24gdHJhY2luZyBgbmV0X2RldmljZWAgcmVmZXJlbmNlIGNvdW50IG9wZXJhdGlvbnMsIGRvZXNuJiMzOTt0IGluaGVyZW50bHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgbGV0JiMzOTtzIHZlcmlmeS4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20sIG1vZGlmeWluZyB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCBhbmQgdXBkYXRpbmcgY29yZSBmdW5jdGlvbnMgdG8gdHJhY2sgcmVmZXJlbmNlIGNvdW50cy4gS2V5IGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSB0cmFjZSBidWZmZXIgbGlzdCwgbW9kaWZ5aW5nIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAsIGFuZCBhbm5vdGF0aW5nIGZ1bmN0aW9ucyB3aXRoIGBub2lubGluZWAuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXRgLCBgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGV0Yy4KClRoZSBjcml0aWNhbCBhcmVhIHRvIGV2YWx1YXRlIGZvciBLTVNBTiBpcyBhbnkgcmVhZCBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGlzIG5ldyB0cmFjZSBidWZmZXIgaXMgdXNlZC4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSB2YXJpYWJsZXMgdXNlZCBmb3IgbWVtb3J5LgoKQWZ0ZXIgZGl2aW5nIGludG8gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgLCBgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLCBJIHNlZSBubyBvYnZpb3VzIGlzc3Vlcy4gYHN0YWNrX3RyYWNlX3NhdmVgIHBvcHVsYXRlcyB0aGUgc3RhY2sgdHJhY2UsIGFuZCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgYXJlIGNhcmVmdWxseSBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgcmV0dXJuZWQgZW50cmllcyAoYG5yX2VudHJpZXNgIGFuZCBgdHJpbW1lZF9lbnRyaWVzYCkuIFRoZSBzdGF0aWMgYXJyYXkgYG5ldGRldl90cmFjZV9idWZmZXJgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGluIEJTUy4gQ3JpdGljYWxseSwgdGhlcmUgYXJlIG5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIG9yIGFueXRoaW5nIGVsc2UgdGhhdCB3b3VsZCBleHBvc2Uga2VybmVsIG1lbW9yeS4gRXZlbiB0aGUgY2FsbCB0byBgc3ByaW50X3N5bWJvbF9ub19vZmZzZXRgIHVzZXMgaW5pdGlhbGl6ZWQgYnVmZmVycy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBzdGFja190cmFjZV9zYXZlYCBjb3JyZWN0bHkgc2V0cyB0aGUgZW50cmllcywgYW5kIGV2ZXJ5IG9wZXJhdGlvbiBpcyBib3VuZGVkIGNvcnJlY3RseS4gVGhlIHVzZSBvZiBSQ1Ugd2l0aCBgbWVtY21wYCBhbmQgYG1lbW1vdmVgIGFyZSBhbGwgY29uc3RyYWluZWQgYnkgdGhlIHBvcHVsYXRlZCBudW1iZXIgb2YgZW50cmllcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYXZvaWRzIGV4cG9zaW5nIGtlcm5lbCBkYXRhIHRvIHVzZXItc3BhY2UuCgpZZXMsIHRoZXJlIGNvdWxkIGJlIHJhY2UgY29uZGl0aW9ucyBvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBidXQgdGhvc2UgYXJlIGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLgoKSW4gc3VtbWFyeSwgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgZWZmb3J0IGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgYW5kIHByb2NlZWQuIEkmIzM5O2xsIHNhbml0eSBjaGVjayB0aGlzIGNvbmNsdXNpb24gd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXG5cbjEuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIGV0Yy4pOyBhbGwgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cgdmlhIHByaW50ay9zdGFja190cmFjZV9wcmludC5cbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cbjMuIExlbmd0aCBwYXJhbWV0ZXJzIChucl9lbnRyaWVzLCB0cmltbWVkX2VudHJpZXMpIGFyZSBzdHJpY3RseSBtYWludGFpbmVkIHN1Y2ggdGhhdCBvbmx5IGluaXRpYWxpemVkIHN0YWNrIHRyYWNlIGVudHJpZXMgYXJlIGV2ZXIgYWNjZXNzZWQgYnkgbWVtY21wLCBtZW1tb3ZlLCBhbmQgc3RhY2tfdHJhY2VfcHJpbnQuXG40LiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIFJDVS9yYXcgc3BpbmxvY2sgdXNhZ2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW4ta2VybmVsIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nL2RlYnVnZ2luZyBtZWNoYW5pc20gdXNpbmcgYSBzdGF0aWMgdHJhY2UgYnVmZmVyIGxpc3QgYW5kIHN0YWNrIHRyYWNlIGNhcHR1cmVzLiBcblxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxuMi4gQWxsIHRyYWNlIGJ1ZmZlcnMgYW5kIHN0YWNrIGFycmF5cyBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgKHN0YXRpYyBCU1MgYnVmZmVyIHBvb2wgYW5kIHplcm9lZCBzdGFjayBidWZmZXJzKSBvciBleHBsaWNpdGx5IHdyaXR0ZW4gdXAgdG8gdGhlIGNvdW50IHJldHVybmVkIGJ5IHN0YWNrX3RyYWNlX3NhdmUoKSBiZWZvcmUgYW55IHJlYWRzIG9yIGNvbXBhcmlzb25zLlxuMy4gTGVuZ3RoIHBhcmFtZXRlcnMgKG5yX2VudHJpZXMsIHRyaW1tZWRfZW50cmllcykgYXJlIHN0cmljdGx5IG1haW50YWluZWQgc3VjaCB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgc3RhY2sgdHJhY2UgZW50cmllcyBhcmUgZXZlciBhY2Nlc3NlZCBieSBtZW1jbXAsIG1lbW1vdmUsIGFuZCBzdGFja190cmFjZV9wcmludC5cbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyMjo1Ni4xOTU1MjU2OThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5OTA2NzgwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIixcbiAgICBcIkRFQlVHX0tFUk5FTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXFxuXFxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxcbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cXG4zLiBMZW5ndGggcGFyYW1ldGVycyAobnJfZW50cmllcywgdHJpbW1lZF9lbnRyaWVzKSBhcmUgc3RyaWN0bHkgbWFpbnRhaW5lZCBzdWNoIHRoYXQgb25seSBpbml0aWFsaXplZCBzdGFjayB0cmFjZSBlbnRyaWVzIGFyZSBldmVyIGFjY2Vzc2VkIGJ5IG1lbWNtcCwgbWVtbW92ZSwgYW5kIHN0YWNrX3RyYWNlX3ByaW50LlxcbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhIG5ldHdvcmsgZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFjZSBidWZmZXIgdHJhY2tpbmcgbWVjaGFuaXNtIHVuZGVyIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSIGFuZCBDT05GSUdfS0FMTFNZTVMuIEl0IHNhdmVzIHN0YWNrIHRyYWNlcyBvbiBfX2Rldl9ob2xkKCkgYW5kIF9fZGV2X3B1dCgpLCBtYW5hZ2luZyBhbiBSQ1UgbGlzdCBvZiB0cmFjZSBidWZmZXJzIHdpdGggYSByYXcgc3BpbmxvY2sgYW5kIG1lbW9yeSBjb21wYXJpc29ucywgd2hpY2ggYWZmZWN0cyBjb3JlIG5ldHdvcmsgZGV2aWNlIGxpZmVjeWNsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyMjo1Ni4xOTU1MzA2NjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMzUxMDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3YmI5YzljZDQ0OTdlZmYyODQ2M2VhMjA1ZjE2NTI0MWMwYjE1OGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6MjI6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA4N2NhZmM5MzJlOWU2Li5kNTE4MzM4Y2QwNzQ5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTIxNTMsNiArMjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuICAqXFxuICAqXFx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xcbiAgKlxcdG1vdmVzIG91dC5cXG4rICpcXG4rICpcXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXFxuICAqL1xcbiBcXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xcbkBAIC0yMzEyLDYgKzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxcbiBcXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcXG4gI2VuZGlmXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcXG4rI2VuZGlmXFxuIFxcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcGVyc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRsaW5rX21vZGU7XFxuQEAgLTQ0OTgsOSArNDUwMywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbit2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGlmIChkZXYpIHtcXG4rXFx0XFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxcbiBcXHRcXHR0aGlzX2NwdV9kZWMoKmRldi1cXHUwMDNlcGNwdV9yZWZjbnQpO1xcbiAjZWxzZVxcbkBAIC00NTEyLDYgKzQ1MjQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0aWYgKGRldikge1xcbitcXHRcXHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0XFx0dGhpc19jcHVfaW5jKCpkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4gI2Vsc2VcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLjIwYzRjOTI3MDhiOGMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbkBAIC0yNTY2LDYgKzI1NjYsMTAgQEAgc3RhdGljIGJvb2wgcmN1X2RvX2JhdGNoX2NoZWNrX3RpbWUobG9uZyBjb3VudCwgbG9uZyB0bGltaXQsXFxuIFxcdCAgICAgICBsb2NhbF9jbG9jaygpIFxcdTAwM2U9IHRsaW1pdDtcXG4gfVxcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApO1xcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIEludm9rZSBhbnkgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgbWFkZSBpdCB0byB0aGUgZW5kIG9mIHRoZWlyIGdyYWNlXFxuICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtXFx1MDAzZWJsaW1pdC5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmNcXG5pbmRleCA3OTgwYTRhMjMyZjlmLi5hZDk4ODk1NjMyODgwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zb2Z0aXJxLmNcXG4rKysgYi9rZXJuZWwvc29mdGlycS5jXFxuQEAgLTU5OSw2ICs1OTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxcbiAjZW5kaWZcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgTUFYX1NPRlRJUlFfVElNRTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jXFxuaW5kZXggM2MwMzRjYmM1YmIzMC4uNjBkYWFlMWM2ZjE3ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmNcXG4rKysgYi9rZXJuZWwvd29ya3F1ZXVlLmNcXG5AQCAtMzI1OSw2ICszMjU5LDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrXFxuICAqIEB3b3JrZXI6IHNlbGZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDM4MzM2ODU4YzE2OGYuLjkzYTc1OTRkNTg2ZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC0xMTYzOSw2ICsxMTYzOSwxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxcbisjZW5kaWZcXG4rXFxuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xcbiBcXG4gI2RlZmluZSBXQUlUX1JFRlNfTUlOX01TRUNTIDFcXG5AQCAtMTE3MjEsNiArMTE3MjksNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuIFxcdFxcdFxcdFxcdHByX2VtZXJnKFxcXCJ1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCBkZXYtXFx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcXG4gXFx0XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX3ByaW50KFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMCk7XFxuK1xcdFxcdFxcdFxcdGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3YXJuaW5nX3RpbWUgPSBqaWZmaWVzO1xcbkBAIC0xMjEyMSw2ICsxMjEzMCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4gXFxuIFxcdGRldi1cXHUwMDNlcHJpdl9sZW4gPSBzaXplb2ZfcHJpdjtcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rI2VuZGlmXFxuIFxcdHJlZl90cmFja2VyX2Rpcl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJuZXRkZXZcXFwiKTtcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0ZGV2LVxcdTAwM2VwY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpO1xcbkBAIC0xMjIyMyw2ICsxMjIzNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4gZnJlZV9wY3B1OlxcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxcbiBcXHRmcmVlX3BlcmNwdShkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4rXFx0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xcbiBmcmVlX2RldjpcXG4gI2VuZGlmXFxuIFxcdHJlZl90cmFja2VyX2Rpcl9leGl0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyKTtcXG5AQCAtMTIyOTIsNiArMTIzMDUsNyBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNlcGNwdV9yZWZjbnQpO1xcbiBcXHRkZXYtXFx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcXG4gI2VuZGlmXFxuK1xcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcXG4gXFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2Vjb3JlX3N0YXRzKTtcXG4gXFx0ZGV2LVxcdTAwM2Vjb3JlX3N0YXRzID0gTlVMTDtcXG4gXFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2V4ZHBfYnVsa3EpO1xcbkBAIC0xMzQxOCw2ICsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XFxuIFxcdC5zZXR1cFxcdFxcdFxcdD0gYmFja2xvZ19uYXBpX3NldHVwLFxcbiB9O1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcXG4rI2VuZGlmXFxuK1xcbiAvKlxcbiAgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWRcXG4gICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXFxuQEAgLTEzNDI2LDYgKzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IGksIHJjID0gLUVOT01FTTtcXG4gXFxuK1xcdG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpO1xcbiBcXHRCVUdfT04oIWRldl9ib290X3BoYXNlKTtcXG4gXFxuIFxcdG5ldF9kZXZfc3RydWN0X2NoZWNrKCk7XFxuQEAgLTEzNTI5LDMgKzEzNTUwLDI1NCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcXG4gfVxcbiBcXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XFxuK1xcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK1xcbisjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxcbitzdGF0aWMgc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdGF0b21pY190IGNvdW50O1xcbitcXHRpbnQgdHJpbW1lZF9lbnRyaWVzO1xcbitcXHRpbnQgbnJfZW50cmllcztcXG4rXFx0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcXG4rfSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XFxuK3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcXG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xcbitcXG4rc3RhdGljIGludCBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkrKylcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rcHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xcbitcXG4rc3RhdGljIGludCB0cmltX25ldGRldl90cmFjZSh1bnNpZ25lZCBsb25nICplbnRyaWVzLCBpbnQgbnJfZW50cmllcylcXG4re1xcbitcXHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xcbitcXHRjaGFyICpjcDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdHNwcmludF9zeW1ib2xfbm9fb2Zmc2V0KGJ1ZmZlciwgZW50cmllc1tpXSk7XFxuK1xcdFxcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJyAnKTtcXG4rXFx0XFx0aWYgKGNwKVxcbitcXHRcXHRcXHQqY3AgPSAnXFxcXDAnO1xcbitcXHRcXHRpZiAoYnVmZmVyWzBdID09ICdwJykge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJwcm9jZXNzX29uZV93b3JrXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpICsgMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ2snKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcImtzeXNfdW5zaGFyZVxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdzJykge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJzb2NrX3NlbmRtc2dfbm9zZWNcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXN0cmNtcChidWZmZXIsIFxcXCJzb2NrX3JlY3Ztc2dfbm9zZWNcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncicpIHtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcXFwicmN1X2RvX2JhdGNoXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpICsgMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ18nKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcIl9fc3lzX2JpbmRcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXN0cmNtcChidWZmZXIsIFxcXCJfX3NvY2tfcmVsZWFzZVxcXCIpIHx8XFxuK1xcdFxcdFxcdCAgICAhc3RyY21wKGJ1ZmZlciwgXFxcIl9fc3lzX2JwZlxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcImRvX3NvY2tfc2V0c29ja29wdFxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gbnJfZW50cmllcztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0ciwgKnRtcDtcXG4rXFx0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcXG4rXFxuK1xcdC8qIFVwZGF0ZSB0cmltbWVkX2VudHJpZXMgZmllbGQuIERvIG5vdCBtb2RpZnkgbnJfZW50cmllcyBmaWVsZFxcbitcXHQgKiBpbiBjYXNlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGlzIGNhbGxlZCBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxcbitcXHRcXHRcXHRcXHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcXG4rXFx0XFx0aWYgKHB0ci1cXHUwMDNldHJpbW1lZF9lbnRyaWVzID09IHB0ci1cXHUwMDNlbnJfZW50cmllcylcXG4rXFx0XFx0XFx0cHRyLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgPSB0cmltX25ldGRldl90cmFjZShwdHItXFx1MDAzZWVudHJpZXMsIHB0ci1cXHUwMDNlbnJfZW50cmllcyk7XFxuK1xcdH1cXG4rXFx0LyogTWVyZ2UgZHVwbGljYXRlZCBlbnRyaWVzIHVzaW5nIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXFxuK1xcdFxcdFxcdFxcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xcbitcXHRcXHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXFxuK1xcdFxcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNnB0ci1cXHUwMDNlY291bnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dG1wID0gcHRyO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAocHRyLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgIT0gdG1wLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgfHxcXG4rXFx0XFx0XFx0ICAgIG1lbWNtcChwdHItXFx1MDAzZWVudHJpZXMsIHRtcC1cXHUwMDNlZW50cmllcyxcXG4rXFx0XFx0XFx0XFx0ICAgcHRyLVxcdTAwM2V0cmltbWVkX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xcbitcXHRcXHRcXHRjb3VudCA9IGF0b21pY19yZWFkKFxcdTAwMjZ0bXAtXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0aWYgKCFjb3VudClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXFxuK1xcdFxcdFxcdGF0b21pY19hZGQoY291bnQsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0YXRvbWljX3N1Yihjb3VudCwgXFx1MDAyNnRtcC1cXHUwMDNlY291bnQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXNcXG4rXFx0XFx0ICogY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcdC8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxcbitcXHRcXHRcXHRcXHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcXG4rXFx0XFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xcbitcXHRcXHRjb3VudCA9IGF0b21pY19yZWFkKFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0aWYgKCFjb3VudClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdC8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZVxcbitcXHRcXHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwb3MrKztcXG4rXFx0XFx0YmFsYW5jZSArPSBjb3VudDtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiQ2FsbCB0cmFjZSBmb3IgJXNbJWRdICUrZCBhdFxcXFxuXFxcIiwgZGV2LVxcdTAwM2VuYW1lLCBwb3MsIGNvdW50KTtcXG4rXFx0XFx0c3RhY2tfdHJhY2VfcHJpbnQocHRyLVxcdTAwM2VlbnRyaWVzLCBwdHItXFx1MDAzZXRyaW1tZWRfZW50cmllcywgNCk7XFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcdGlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpXFxuK1xcdFxcdHByX2luZm8oXFxcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0LyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcXG4rXFx0ICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuXFxuK1xcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxcbitcXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxcbitcXHQgKi9cXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci1cXHUwMDNlZW50cmllcyldO1xcbitcXHRpbnQgbnJfZW50cmllcztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xcbitcXHRpZiAoaW5fbm1pKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LyogR2V0IHN0YWNrIHRyYWNlcy4gKi9cXG4rXFx0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXFx1MDAzZWVudHJpZXMpLCAxKTtcXG4rXFx0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxcbitcXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xcbitcXHQgKiBvZiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0cnlpbmcgdG8gY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxcbitcXHQgKi9cXG4rXFx0aWYgKGluX3NvZnRpcnEoKSkge1xcbitcXHRcXHRpbnQgaTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKGVudHJpZXNbaV0gXFx1MDAzZT0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBlbnRyaWVzW2ldIFxcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xcbitcXHRcXHRcXHRcXHRucl9lbnRyaWVzID0gaSArIDE7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXFxuK1xcdCAqIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcsIHdlIGRvbid0IHVzZSBsb2NrIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcXG4rXFx0XFx0XFx0XFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XFxuK1xcdFxcdGlmIChwdHItXFx1MDAzZW5yX2VudHJpZXMgPT0gbnJfZW50cmllcyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW1lbWNtcChwdHItXFx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7XFxuK1xcdFxcdFxcdGF0b21pY19hZGQoZGVsdGEsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXFxuK1xcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxcbitcXHQgKiBCdXQgd2UgdXNlIHJhdyBzcGlubG9jayBoZXJlIGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzb21lIG90aGVyXFxuK1xcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXFxuK1xcdCAqL1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRyLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHRyLVxcdTAwM2Vjb3VudCwgZGVsdGEpO1xcbitcXHRcXHRwdHItXFx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xcbitcXHRcXHRwdHItXFx1MDAzZXRyaW1tZWRfZW50cmllcyA9IG5yX2VudHJpZXM7XFxuK1xcdFxcdG1lbW1vdmUocHRyLVxcdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rXFx0XFx0LyogQXBwZW5kIGl0IGluIFJDVSBtYW5uZXIsIGZvciByZWFkZXJzIGFyZSBsb2NrbGVzcy4gKi9cXG4rXFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNnB0ci1cXHUwMDNlbGlzdCwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7XFxuK1xcbitzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3Qge1xcbitcXHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcXG4rXFx0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcXG4rfTtcXG4rXFxuKy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcXG4rICoga2FsbHN5bXMgZXZlcnkgdGltZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07XFxuK1xcdGludCBucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpLCAxKTtcXG4rXFx0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcXG4rXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7XFxuK1xcdGNoYXIgKmNwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0c3ByaW50X3N5bWJvbChidWZmZXIsIGVudHJpZXNbaV0pO1xcbitcXHRcXHRpZiAoc3RybmNtcChidWZmZXIsIFxcXCJoYW5kbGVfc29mdGlycXNcXFwiLCAxNSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRjcCA9IHN0cmNocihidWZmZXIsICcrJyk7XFxuK1xcdFxcdGlmICghY3AgfHwgc3NjYW5mKGNwLCBcXFwiKyVseC8lbHhcXFwiLCBcXHUwMDI2b2Zmc2V0LCBcXHUwMDI2c2l6ZSkgIT0gMilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XFxuK1xcdFxcdGVuZF9vZl9oYW5kbGVfc29mdGlycXMgPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgKyBzaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjb21wbGV0ZShcXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cXHUwMDNlY29tcGxldGlvbik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgdGM7XFxuK1xcbitcXHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcXHUwMDI2dGMudGltZXIsIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYywgMCk7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2dGMuY29tcGxldGlvbik7XFxuK1xcdC8qIFNjaGVkdWxlIGEgY2FsbCB0byBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKS4gKi9cXG4rXFx0bW9kX3RpbWVyKFxcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XFxuK1xcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi9cXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2dGMuY29tcGxldGlvbik7XFxuK1xcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGNvbXBsZXRlLiAqL1xcbitcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2dGMudGltZXIpO1xcbitcXHR0aW1lcl9kZXN0cm95X29uX3N0YWNrKFxcdTAwMjZ0Yy50aW1lcik7XFxuK31cXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCBjMDVkODZlNjNhYmY3Li5iM2RkY2MyODNjYmJjIDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC03MjMsNyArNzIzLDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpO1xcbiBcXG4tc3RhdGljIHZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2VuZGlmXFxuK3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4gXFxuQEAgLTc5NSw3ICs3OTksMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCxcXG4gXFx0dHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2Vsc2VcXG4raW5saW5lXFxuKyNlbmRpZlxcbitpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcXG4ge1xcbiBcXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVxcdTAwM2VvcHMpLVxcdTAwM2VzZW5kbXNnLCBpbmV0Nl9zZW5kbXNnLFxcbiBcXHRcXHRcXHRcXHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxcbkBAIC0xMTQ1LDggKzExNTUsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGZcXG4gXFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLVxcdFxcdFxcdFxcdCAgICAgaW50IGZsYWdzKVxcbitzdGF0aWNcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitub2lubGluZVxcbisjZWxzZVxcbitpbmxpbmVcXG4rI2VuZGlmXFxuK2ludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlcmVjdm1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICBpbmV0Nl9yZWN2bXNnLFxcbkBAIC0yNjUzLDkgKzI2NjgsMTIgQEAgc3RhdGljIGludCBjb3B5X21zZ2hkcl9mcm9tX3VzZXIoc3RydWN0IG1zZ2hkciAqa21zZyxcXG4gXFx0cmV0dXJuIGVyciBcXHUwMDNjIDAgPyBlcnIgOiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLFxcbi1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcyxcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxcbitzdGF0aWNcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitub2lubGluZVxcbisjZW5kaWZcXG4raW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdCAgICBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBjaGFyIGN0bFtzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgMjBdXFxuIFxcdFxcdFxcdFxcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjIyOjU2LjU5OTc3Njg2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc5NTgwMzk0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcIixcbiAgICBcIktBTExTWU1TXCIsXG4gICAgXCJERUJVR19LRVJORUxcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2UgY291bnQgdHJhY2UgYnVmZmVyIHRyYWNraW5nIG1lY2hhbmlzbSB1bmRlciBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiBhbmQgQ09ORklHX0tBTExTWU1TLiBJdCBzYXZlcyBzdGFjayB0cmFjZXMgb24gX19kZXZfaG9sZCgpIGFuZCBfX2Rldl9wdXQoKSwgbWFuYWdpbmcgYW4gUkNVIGxpc3Qgb2YgdHJhY2UgYnVmZmVycyB3aXRoIGEgcmF3IHNwaW5sb2NrIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMsIHdoaWNoIGFmZmVjdHMgY29yZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDdiYjljOWNkNDQ5N2VmZjI4NDYzZWEyMDVmMTY1MjQxYzBiMTU4YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjIyOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg3Y2FmYzkzMmU5ZTYuLmQ1MTgzMzhjZDA3NDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMjE1Myw2ICsyMTUzLDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlxuICAqXHRGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvXG4gICpcdG1vdmVzIG91dC5cbisgKlxuKyAqXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXG4gICovXG4gXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xuQEAgLTIzMTIsNiArMjMxNCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbiBcdGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzO1xuICNlbmRpZlxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XG4rI2VuZGlmXG4gXG4gXHR1bnNpZ25lZCBpbnRcdFx0b3BlcnN0YXRlO1xuIFx0dW5zaWduZWQgY2hhclx0XHRsaW5rX21vZGU7XG5AQCAtNDQ5OCw5ICs0NTAzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfbml0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH1cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfZGVjKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5AQCAtNDUxMiw2ICs0NTI0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0XHR0aGlzX2NwdV9pbmMoKmRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA5Njg0OGZjMWYwMmI4Li4yMGM0YzkyNzA4YjhjIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjU2Niw2ICsyNTY2LDEwIEBAIHN0YXRpYyBib29sIHJjdV9kb19iYXRjaF9jaGVja190aW1lKGxvbmcgY291bnQsIGxvbmcgdGxpbWl0LFxuIFx0ICAgICAgIGxvY2FsX2Nsb2NrKCkgXHUwMDNlPSB0bGltaXQ7XG4gfVxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKTtcbisjZW5kaWZcbitcbiAvKlxuICAqIEludm9rZSBhbnkgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgbWFkZSBpdCB0byB0aGUgZW5kIG9mIHRoZWlyIGdyYWNlXG4gICogcGVyaW9kLiAgVGhyb3R0bGUgYXMgc3BlY2lmaWVkIGJ5IHJkcC1cdTAwM2VibGltaXQuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmNcbmluZGV4IDc5ODBhNGEyMzJmOWYuLmFkOTg4OTU2MzI4ODAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc29mdGlycS5jXG4rKysgYi9rZXJuZWwvc29mdGlycS5jXG5AQCAtNTk5LDYgKzU5OSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cbiAjZW5kaWZcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIE1BWF9TT0ZUSVJRX1RJTUU7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jXG5pbmRleCAzYzAzNGNiYzViYjMwLi42MGRhYWUxYzZmMTdmIDEwMDY0NFxuLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jXG4rKysgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbkBAIC0zMjU5LDYgKzMyNTksMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rI2VuZGlmXG4rXG4gLyoqXG4gICogcHJvY2Vzc19vbmVfd29yayAtIHByb2Nlc3Mgc2luZ2xlIHdvcmtcbiAgKiBAd29ya2VyOiBzZWxmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggMzgzMzY4NThjMTY4Zi4uOTNhNzU5NGQ1ODZlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTExNjM5LDYgKzExNjM5LDE0IEBAIGludCBuZXRkZXZfcmVmY250X3JlYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxuKyNlbmRpZlxuK1xuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xuIFxuICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxXG5AQCAtMTE3MjEsNiArMTE3MjksNyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4gXHRcdFx0XHRwcl9lbWVyZyhcInVucmVnaXN0ZXJfbmV0ZGV2aWNlOiB3YWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZS4gVXNhZ2UgY291bnQgPSAlZFxcblwiLFxuIFx0XHRcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcbiBcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9wcmludChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEwKTtcbitcdFx0XHRcdGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3YXJuaW5nX3RpbWUgPSBqaWZmaWVzO1xuQEAgLTEyMTIxLDYgKzEyMTMwLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIFxuIFx0ZGV2LVx1MDAzZXByaXZfbGVuID0gc2l6ZW9mX3ByaXY7XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuKyNlbmRpZlxuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0ZGV2XCIpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcbkBAIC0xMjIyMyw2ICsxMjIzNSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBmcmVlX3BjcHU6XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4rXHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gZnJlZV9kZXY6XG4gI2VuZGlmXG4gXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuQEAgLTEyMjkyLDYgKzEyMzA1LDcgQEAgdm9pZCBmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiBcdGRldi1cdTAwM2VwY3B1X3JlZmNudCA9IE5VTEw7XG4gI2VuZGlmXG4rXHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlY29yZV9zdGF0cyk7XG4gXHRkZXYtXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNleGRwX2J1bGtxKTtcbkBAIC0xMzQxOCw2ICsxMzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IGJhY2tsb2dfbmFwaV9zZXR1cCxcbiB9O1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbisjZWxzZVxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9O1xuKyNlbmRpZlxuK1xuIC8qXG4gICogICAgICAgVGhpcyBpcyBjYWxsZWQgc2luZ2xlIHRocmVhZGVkIGR1cmluZyBib290LCBzbyBubyBuZWVkXG4gICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXG5AQCAtMTM0MjYsNiArMTM0NDYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB7XG4gXHRpbnQgaSwgcmMgPSAtRU5PTUVNO1xuIFxuK1x0bmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KCk7XG4gXHRCVUdfT04oIWRldl9ib290X3BoYXNlKTtcbiBcbiBcdG5ldF9kZXZfc3RydWN0X2NoZWNrKCk7XG5AQCAtMTM1MjksMyArMTM1NTAsMjU0IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIH1cbiBcbiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbitcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK1xuKyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4XG4rc3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbitcdGF0b21pY190IGNvdW50O1xuK1x0aW50IHRyaW1tZWRfZW50cmllcztcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcbit9IG5ldGRldl90cmFjZV9idWZmZXJbTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFXTtcbitzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcbitzdGF0aWMgYm9vbCBuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkrKylcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rcHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXG4re1xuK1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbitcdGNoYXIgKmNwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0c3ByaW50X3N5bWJvbF9ub19vZmZzZXQoYnVmZmVyLCBlbnRyaWVzW2ldKTtcbitcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnICcpO1xuK1x0XHRpZiAoY3ApXG4rXHRcdFx0KmNwID0gJ1xcMCc7XG4rXHRcdGlmIChidWZmZXJbMF0gPT0gJ3AnKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcInByb2Nlc3Nfb25lX3dvcmtcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdrJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJrc3lzX3Vuc2hhcmVcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdzJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJzb2NrX3NlbmRtc2dfbm9zZWNcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwic29ja19yZWN2bXNnX25vc2VjXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncicpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwicmN1X2RvX2JhdGNoXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnXycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYmluZFwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3NvY2tfcmVsZWFzZVwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3N5c19icGZcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcImRvX3NvY2tfc2V0c29ja29wdFwiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIG5yX2VudHJpZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XG4rXHRpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwO1xuK1xuK1x0LyogVXBkYXRlIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gRG8gbm90IG1vZGlmeSBucl9lbnRyaWVzIGZpZWxkXG4rXHQgKiBpbiBjYXNlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGlzIGNhbGxlZCBhZ2Fpbi5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdGlmIChwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzID09IHB0ci1cdTAwM2Vucl9lbnRyaWVzKVxuK1x0XHRcdHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgPSB0cmltX25ldGRldl90cmFjZShwdHItXHUwMDNlZW50cmllcywgcHRyLVx1MDAzZW5yX2VudHJpZXMpO1xuK1x0fVxuK1x0LyogTWVyZ2UgZHVwbGljYXRlZCBlbnRyaWVzIHVzaW5nIHRyaW1tZWRfZW50cmllcyBmaWVsZC4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0dG1wID0gcHRyO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0bXAsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QpIHtcbitcdFx0XHRpZiAocHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyAhPSB0bXAtXHUwMDNldHJpbW1lZF9lbnRyaWVzIHx8XG4rXHRcdFx0ICAgIG1lbWNtcChwdHItXHUwMDNlZW50cmllcywgdG1wLVx1MDAzZWVudHJpZXMsXG4rXHRcdFx0XHQgICBwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0aWYgKCFjb3VudClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4rXHRcdFx0YXRvbWljX2FkZChjb3VudCwgXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0XHRhdG9taWNfc3ViKGNvdW50LCBcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHR9XG4rXHRcdC8qIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXNcbitcdFx0ICogY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1x0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGNvdW50ID0gYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0aWYgKCFjb3VudClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXG4rXHRcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdHBvcysrO1xuK1x0XHRiYWxhbmNlICs9IGNvdW50O1xuK1x0XHRwcl9pbmZvKFwiQ2FsbCB0cmFjZSBmb3IgJXNbJWRdICUrZCBhdFxcblwiLCBkZXYtXHUwMDNlbmFtZSwgcG9zLCBjb3VudCk7XG4rXHRcdHN0YWNrX3RyYWNlX3ByaW50KHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzLCA0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHR9XG4rXHRpZiAoIW5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkKVxuK1x0XHRwcl9pbmZvKFwiYmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcXG5cIiwgZGV2LVx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcbitcdCAqIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCBubyBtb3JlIF9fZGV2X3B1dCgpL19fZGV2X2hvbGQoKSBjYWxsIGNhbiBiZSBtYWRlLlxuK1x0ICogVGhlcmVmb3JlLCBubyBtb3JlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGNhbGwgd2lsbCBiZSBtYWRlLCBhbmQgd2UgY2FuXG4rXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxuK1x0ICovXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XG4rXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuK1x0aW50IG5yX2VudHJpZXM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovXG4rXHRpZiAoaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdC8qIEdldCBzdGFjayB0cmFjZXMuICovXG4rXHRucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKSwgMSk7XG4rXHQvKiBUcmltIHRyYWNlcyBvZiBwcm9jZXNzIGNvbnRleHQgbm93IGlmIGNhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgZm9yXG4rXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xuK1x0ICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLlxuK1x0ICpcbitcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxuK1x0ICovXG4rXHRpZiAoaW5fc29mdGlycSgpKSB7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0XHRpZiAoZW50cmllc1tpXSBcdTAwM2U9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgZW50cmllc1tpXSBcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xuK1x0XHRcdFx0bnJfZW50cmllcyA9IGkgKyAxO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXG4rXHQgKiBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLCB3ZSBkb24ndCB1c2UgbG9jayBoZXJlLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzID09IG5yX2VudHJpZXMgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkge1xuK1x0XHRcdGF0b21pY19hZGQoZGVsdGEsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXHQvKiBBZGQgYSBuZXcgZW50cnkuIFdlIGRvbid0IHJlLWNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIHdpdGggbG9jayBoZWxkLCBmb3JcbitcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxuK1x0ICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlclxuK1x0ICogcmF3IHNwaW5sb2NrIGFscmVhZHkgaGVsZC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNnB0ci1cdTAwM2VsaXN0KTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZwdHItXHUwMDNlY291bnQsIGRlbHRhKTtcbitcdFx0cHRyLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuK1x0XHRwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdC8qIEFwcGVuZCBpdCBpbiBSQ1UgbWFubmVyLCBmb3IgcmVhZGVycyBhcmUgbG9ja2xlc3MuICovXG4rXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbitcdH0gZWxzZSB7XG4rXHRcdG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTtcbitcdH1cbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7XG4rXG4rc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHtcbitcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xuK1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbit9O1xuK1xuKy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbisgKiBrYWxsc3ltcyBldmVyeSB0aW1lLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07XG4rXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4rXHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7XG4rXHRjaGFyICpjcDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbitcdFx0aWYgKHN0cm5jbXAoYnVmZmVyLCBcImhhbmRsZV9zb2Z0aXJxc1wiLCAxNSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJysnKTtcbitcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwiKyVseC8lbHhcIiwgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0O1xuK1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICsgc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjb21wbGV0ZShcdTAwMjZjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLVx1MDAzZWNvbXBsZXRpb24pO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuK1xuK1x0dGltZXJfc2V0dXBfb25fc3RhY2soXHUwMDI2dGMudGltZXIsIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYywgMCk7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4rXHQvKiBTY2hlZHVsZSBhIGNhbGwgdG8gbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkuICovXG4rXHRtb2RfdGltZXIoXHUwMDI2dGMudGltZXIsIGppZmZpZXMpO1xuK1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuK1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZ0Yy5jb21wbGV0aW9uKTtcbitcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGNvbXBsZXRlLiAqL1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuK1x0dGltZXJfZGVzdHJveV9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lcik7XG4rfVxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xuaW5kZXggYzA1ZDg2ZTYzYWJmNy4uYjNkZGNjMjgzY2JiYyAxMDA2NDRcbi0tLSBhL25ldC9zb2NrZXQuY1xuKysrIGIvbmV0L3NvY2tldC5jXG5AQCAtNzIzLDcgKzcyMywxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpXG4gfVxuIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7XG4gXG4tc3RhdGljIHZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2VuZGlmXG4rdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcyA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyk7XG4gXG5AQCAtNzk1LDcgKzc5OSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LFxuIFx0dHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2Vsc2VcbitpbmxpbmVcbisjZW5kaWZcbitpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlc2VuZG1zZywgaW5ldDZfc2VuZG1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldF9zZW5kbXNnLCBzb2NrLCBtc2csXG5AQCAtMTE0NSw4ICsxMTU1LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19yZWN2X2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsIGludCBmXG4gXHR0cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHNrLCByZXQsIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHRcdCAgICAgaW50IGZsYWdzKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZWxzZVxuK2lubGluZVxuKyNlbmRpZlxuK2ludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXJlY3Ztc2csXG4gXHRcdFx0XHQgICAgIGluZXQ2X3JlY3Ztc2csXG5AQCAtMjY1Myw5ICsyNjY4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9tc2doZHJfZnJvbV91c2VyKHN0cnVjdCBtc2doZHIgKmttc2csXG4gXHRyZXR1cm4gZXJyIFx1MDAzYyAwID8gZXJyIDogMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcyxcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbmRpZlxuK2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHQgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIDIwXVxuIFx0XHRcdFx0X19hbGlnbmVkKHNpemVvZihfX2tlcm5lbF9zaXplX3QpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjIyOjU2LjU5OTc3ODI3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODMyODY3Mjc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEZWJ1ZyBQYXRjaCBmb3IgTmV0ZGV2IFJlZmNvdW50IFRyYWNraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBkZWJ1ZyBvciBkaWFnbm9zdGljIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IHRyYWNraW5nIHJlZmVyZW5jZSBjb3VudHMgb24gbmV0d29yayBkZXZpY2VzLiBJdCBzZWVtcyB0byBiZSBhIHByb2FjdGl2ZSBtZWFzdXJlIHRvIGNhdGNoIG1lbW9yeSBsZWFrcyBvciBvdGhlciByZWZjb3VudC1yZWxhdGVkIGlzc3VlcywgcG90ZW50aWFsbHkgZm9yIHVzZSB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcywgaXMgdGhpcyBqdXN0IFwiZGVjb3JhdGl2ZVwiIGxpa2UgbG9nZ2luZyBvciB0cmFjaW5nIHRoYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lIG1lbnRpb25zPyBIb3dldmVyLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggYWRkcyB0d28gbmV3IGZ1bmN0aW9uczogYG5ldGRldl90cmFjZV9idWZmZXJfbGlzdGAgYW5kIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLiBJdCBhcHBlYXJzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byBjcml0aWNhbCBwb2ludHMgd2l0aGluIHRoZSBuZXR3b3JrIGRldmljZSBsaWZlY3ljbGUg4oCTIHNwZWNpZmljYWxseSwgZXZlcnkgY2FsbCB0byBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIOKAkyBwcm92aWRlZCB0aGF0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIGBDT05GSUdfS0FMTFNZTVNgKSBhcmUgZW5hYmxlZC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgd2lsbCBhZmZlY3QgZXhlY3V0aW9uIGFuZCBpcyBub3QgZGVjb3JhdGl2ZS5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gYSBiaXQuIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQgdXNlcyBgc3RhY2tfdHJhY2Vfc2F2ZWAgdG8gY2FwdHVyZSBhIHN0YWNrIHRyYWNlLCB3aGljaCBpcyBhIGJpZyBoaW50IHRoYXQgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aGVyZSBhIGRldmljZSBpcyBiZWluZyBoZWxkIG9yIHJlbGVhc2VkLiBUaGlzIHRyYWNlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIGZpeGVkLXNpemUgYnVmZmVyLCBgbmV0ZGV2X3RyYWNlX2J1ZmZlclszMjc2OF1gLiBJIG5vdGUgdGhlIHByZXNlbmNlIG9mIHNwaW5sb2NrcyAoYHJhd19zcGluX2xvY2tfaXJxc2F2ZWApIGFuZCBSQ1UgdHJhdmVyc2FsLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgbG9naWMuIFRoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyBmb3IgbGlzdCBtYW5pcHVsYXRpb24sIGVyYXNpbmcsIGFuZCBkdW1waW5nIG9mIGJ1ZmZlciBkYXRhLiBUaGUgZmFjdCB0aGF0IHRoZSBzdGFjayB0cmFjZSBpcyBzYXZlZCBvbiBldmVyeSBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgIG1ha2VzIHRoaXMgYSBwb3RlbnRpYWxseSBoaWdoLW92ZXJoZWFkIG9wZXJhdGlvbiBpZiBpdCdzIHJ1bm5pbmcgYWxsIHRoZSB0aW1lIVxuXG5UaGVyZSBhcmUgc29tZSBub2lubGluZSBhbm5vdGF0aW9ucyBhZGRlZCB0byBzZXZlcmFsIGZ1bmN0aW9ucyBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVpciBwdXJwb3NlIGlzIGluIHRoaXMgY29udGV4dC5cblxuVGhlIG1vc3QgaW1wb3J0YW50IHN0ZXAgaXMgdG8gc2VhcmNoIGZvciBgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGVudGlyZWx5IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBpZiBpdCdzIGFscmVhZHkgcGFydCBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBnb2luZyB0byBiZSBtYXJrZWQgYXMgd29ydGh5IG9mIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNDo1NC45Mjg0NTQyODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTAxMDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE2MD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMTYtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzE3OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMTgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUwND12b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MDUtXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo0NTA2OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MDctdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUzNj1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTM5LXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1NDA6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTQxLVxcdHJlZl90cmFja2VyX2FsbG9jKFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyLCBnZnApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTUwLXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1NTE6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTUyLVxcdHJlZmNvdW50X2RlYyhcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlci5ub190cmFja2VyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDU1Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3RyYWNrZXJfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTU5LXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1NjA6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00NTYxLVxcdHJlZl90cmFja2VyX2ZyZWUoXFx1MDAyNmRldi1cXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmgtNS1cXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaDo2OiNpZmRlZiBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlxcbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oLTctdHlwZWRlZiBzdHJ1Y3QgcmVmX3RyYWNrZXIgKm5ldGRldmljZV90cmFja2VyO1xcbi0tXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTQwPUNPTkZJR19VQlNBTl9VTlJFQUNIQUJMRT15XFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNDMtI1xcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZzo0NDpDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUj15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTQ1LUNPTkZJR19ORVRfTlNfUkVGQ05UX1RSQUNLRVI9eVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MjU1OD1zdGF0aWMgYm9vbCByY3VfZG9fYmF0Y2hfY2hlY2tfdGltZShsb25nIGNvdW50LCBsb25nIHRsaW1pdCxcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTI1NjgtXFxua2VybmVsL3JjdS90cmVlLmM6MjU2OTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxua2VybmVsL3JjdS90cmVlLmMtMjU3MC1zdGF0aWMgbm9pbmxpbmUgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApO1xcbi0tXFxua2VybmVsL3NvZnRpcnEuYz01OTk9c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cXG4tLVxcbmtlcm5lbC9zb2Z0aXJxLmMtNjAxLVxcbmtlcm5lbC9zb2Z0aXJxLmM6NjAyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5rZXJuZWwvc29mdGlycS5jLTYwMy1zdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpO1xcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jPTMyNDQ9c3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTMyNjEtXFxua2VybmVsL3dvcmtxdWV1ZS5jOjMyNjI6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmtlcm5lbC93b3JrcXVldWUuYy0zMjYzLXN0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxubmV0L0tjb25maWcuZGVidWctMi1cXG5uZXQvS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxubmV0L0tjb25maWcuZGVidWctNC1cXHRib29sIFxcXCJFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExNjQwPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcXG5uZXQvY29yZS9kZXYuYy0xMTY0MS1cXG5uZXQvY29yZS9kZXYuYzoxMTY0MjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L2NvcmUvZGV2LmMtMTE2NDMtc3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIxMDM9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxMzItXFxubmV0L2NvcmUvZGV2LmM6MTIxMzM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9jb3JlL2Rldi5jLTEyMTM0LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzQyNz1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzQzNC1cXG5uZXQvY29yZS9kZXYuYzoxMzQzNTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L2NvcmUvZGV2LmMtMTM0MzYtc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzNTUyPXN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpO1xcbm5ldC9jb3JlL2Rldi5jLTEzNTUzLVxcbm5ldC9jb3JlL2Rldi5jOjEzNTU0OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvY29yZS9kZXYuYy0xMzU1NS1cXG4tLVxcbm5ldC9zb2NrZXQuYz03MjY9c3RhdGljXFxubmV0L3NvY2tldC5jOjcyNzojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L3NvY2tldC5jLTcyOC1ub2lubGluZVxcbi0tXFxubmV0L3NvY2tldC5jPTgwMj1zdGF0aWNcXG5uZXQvc29ja2V0LmM6ODAzOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtODA0LW5vaW5saW5lXFxuLS1cXG5uZXQvc29ja2V0LmM9MTE1OD1zdGF0aWNcXG5uZXQvc29ja2V0LmM6MTE1OTojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L3NvY2tldC5jLTExNjAtbm9pbmxpbmVcXG4tLVxcbm5ldC9zb2NrZXQuYz0yNjcxPXN0YXRpY1xcbm5ldC9zb2NrZXQuYzoyNjcyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtMjY3My1ub2lubGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNDo1Ni44MzM0NzIzODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ4Njk1ODU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiBgbmV0L0tjb25maWcuZGVidWdgIGFuZCBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIERldmljZSBSZWZlcmVuY2UgQ291bnRpbmcgRGVidWdnaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgemVybyBpbiBvbiBob3cgdG8gZW5hYmxlIG9yIGNvbmZpZ3VyZSB0aGlzIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBmZWF0dXJlLiBNeSBpbnR1aXRpb24gaW1tZWRpYXRlbHkgcG9pbnRzIHRvIGBuZXQvS2NvbmZpZy5kZWJ1Z2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgZGVidWdnaW5nIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIHN1YnN5c3RlbXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgYSByZWZlcmVuY2UgY291bnQgdHJhY2tlci4gSXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gaW4gdGhlIG5ldHdvcmtpbmcgc3BhY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0aGVyZS4gSXMgaXQgYSBkaXJlY3QgZW5hYmxlL2Rpc2FibGUsIG9yIGFyZSB0aGVyZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHZlcmJvc2l0eSBvciBkZXRhaWw/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVsYXRlZCBrZXJuZWwgcGFyYW1ldGVycyBJIHNob3VsZCBjaGVjayB0b28sIGp1c3QgdG8gYmUgdGhvcm91Z2g/IE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IEkgY291bGQgcG90ZW50aWFsbHkgdXNlIHRoaXMgdHJhY2tlciB0byBkZWJ1ZyBhIHRyaWNreSBuZXR3b3JrIGRldmljZSByZWZlcmVuY2UgY291bnQgaXNzdWUgSSdtIHdvcmtpbmcgb24uIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGlzc3VlIG1pZ2h0IGd1aWRlIG1lIGZ1cnRoZXIsIGJ1dCBJIG5lZWQgYSBzb2xpZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZmlyc3QuIFNvLCBgbmV0L0tjb25maWcuZGVidWdgIGl0IGlzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI1OjA3LjMyMDQzMzE2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuICAgNDpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCBuXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEVuYWJsZSBkZWJ1Z2dpbmcgZmVhdHVyZSB0byB0cmFjayBkZXZpY2UgcmVmZXJlbmNlcy5cXG4gIDEwOlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxuICAxMzpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxNTpcXHRcXHRzZWxlY3QgUkVGX1RSQUNLRVJcXG4gIDE2OlxcdFxcdGRlZmF1bHQgblxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBFbmFibGUgZGVidWdnaW5nIGZlYXR1cmUgdG8gdHJhY2sgbmV0bnMgcmVmZXJlbmNlcy5cXG4gIDE5OlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgREVCVUdfTkVUXFxuICAyMjpcXHRcXHRib29sIFxcXCJBZGQgZ2VuZXJpYyBuZXR3b3JraW5nIGRlYnVnXFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIEVuYWJsZSBleHRyYSBzYW5pdHkgY2hlY2tzIGluIG5ldHdvcmtpbmcuXFxuICAyNjpcXHRcXHQgIFRoaXMgaXMgbW9zdGx5IHVzZWQgYnkgZnV6emVycywgYnV0IGlzIHNhZmUgdG8gc2VsZWN0LlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgREVCVUdfTkVUX1NNQUxMX1JUTkxcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkFkZCBleHRyYSBwZXItbmV0bnMgbXV0ZXggaW5zaWRlIFJUTkxcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNTowNy4zMjA0OTcxOTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjc2MTY5MTk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBUaW1lKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGVzZSBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGd1aWRlbGluZXMgYXJlLiBJdCdzIGVzc2VudGlhbGx5IGEgY2hlY2sgZm9yIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmUgKmFjdHVhbGx5KiBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gSWYgaXQncyBqdXN0IGRvY3MsIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciB2ZW5kb3Itc3BlY2lmaWMgc3R1ZmYsIHRoZW4gaXQncyBhIG5vLWdvLiBCdXQsIGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgKmFuZCogSSBjYW4gdmVyaWZ5IGl0J3MgZXhlY3V0YWJsZSwgdGhlbiBpdCdzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2guIEhvbGQgb24sIHdoYXQgZXhhY3RseSAqZGlkKiBpdCBkbyBhZ2Fpbj8gQWggeWVzLCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAsIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAgYXJlIGNhbGxpbmcgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAuIEFuZCBnZXQgdGhpcywgaXQgaXMgY2FsbGVkIGV2ZXJ5IHNpbmdsZSB0aW1lIGFueSBuZXR3b3JrIGRldmljZSBpcyB0b3VjaGVkISBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBpcyBkb2luZyBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIHRoaW5nczogaXQgaXMgYWxsb2NhdGluZyBmcm9tIGEgZ2xvYmFsIHJpbmcvYnVmZmVyLCB1c2luZyByYXcgc3BpbmxvY2tzLCBzYXZpbmcgc3RhY2sgdHJhY2VzLCBjb21wYXJpbmcgc3R1ZmYgdXNpbmcgYG1lbWNtcGAsIHVwZGF0aW5nIGF0b21pYyBjb3VudGVycywgYW5kIGFkZGluZyB0byBhIGxpbmtlZCBsaXN0IGBkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0YC4gV2hlbiBuZXRkZXZpY2VzIGFyZSBmcmVlZCBvciBkdW1wZWQgKHdoaWNoIGhhcHBlbnMgaW4gcGxhY2VzIGxpa2UgYG5ldGRldl93YWl0X2FsbHJlZnNfYW55YCwgYGFsbG9jX25ldGRldl9tcXNgLCBgZnJlZV9uZXRkZXZgKSwgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgIG9yIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgIGdldCBjYWxsZWQuIEFsc28sIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgIGlzIGRvaW5nIHRpbWVyIHNldHVwIGFuZCBjb21wbGV0aW9uIGR1cmluZyBgbmV0X2Rldl9pbml0YC5cblxuVGhpcyBpcyBmdW5jdGlvbmFsbHkgcmVsZXZhbnQuIEkgc2VlIHRyYWNpbmcgYnVmZmVyIG1hbmFnZW1lbnQsIGxpbmtlZCBsaXN0IG1hbmlwdWxhdGlvbiB1bmRlciBjb25jdXJyZW5jeSwgYW5kIHJhdyBzcGlubG9ja3MgaW4gaW50ZXJydXB0L3NvZnRpcnEvcHJvY2VzcyBjb250ZXh0LiBUaGlzIGxvb2tzIGxpa2UgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGNoYW5nZXMhXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZDogYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AuIE9rLCBsZXQncyBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gQWgsIGZyb20gYG5ldC9LY29uZmlnLmRlYnVnYCwgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAsIGBTVEFDS1RSQUNFX1NVUFBPUlRgLCBhbmQgYE5FVGAsIGFuZCBpdCBhbHNvIGBzZWxlY3RgcyBgUkVGX1RSQUNLRVJgLiBBbmQgYENPTkZJR19LQUxMU1lNU2AuLi4gSSdsbCBuZWVkIHRvIHNlYXJjaCB0aGUgS2NvbmZpZyBmaWxlcyBhZ2FpbiB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgZGVwZW5kcyBvbi5cblxuR2l2ZW4gdGhpcywgdGhpcyAqaXMqIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGNvcmUga2VybmVsIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjE0LjkzNzQyMDA1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMxMDIxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLQUxMU1lNU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MjA4Nj1jb25maWcgQ0FDSEVTVEFUX1NZU0NBTExcXG4tLVxcbmluaXQvS2NvbmZpZy0yMDk1LVxcbmluaXQvS2NvbmZpZzoyMDk2OmNvbmZpZyBLQUxMU1lNU1xcbmluaXQvS2NvbmZpZy0yMDk3LVxcdGJvb2wgXFxcIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wc1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWctMjEwMy1cXG5pbml0L0tjb25maWc6MjEwNDpjb25maWcgS0FMTFNZTVNfU0VMRlRFU1RcXG5pbml0L0tjb25maWctMjEwNS1cXHRib29sIFxcXCJUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlIG9mIGthbGxzeW1zXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTIxMTYtXFxuaW5pdC9LY29uZmlnOjIxMTc6Y29uZmlnIEtBTExTWU1TX0FMTFxcbmluaXQvS2NvbmZpZy0yMTE4LVxcdGJvb2wgXFxcIkluY2x1ZGUgYWxsIHN5bWJvbHMgaW4ga2FsbHN5bXNcXFwiXFxuLS1cXG5rZXJuZWwva3N5bXNfY29tbW9uLmMtMy0gKiBrc3ltc19jb21tb24uYzogQSBzcGxpdCBvZiBrZXJuZWwva2FsbHN5bXMuY1xcbmtlcm5lbC9rc3ltc19jb21tb24uYzo0OiAqIENvbnRhaW5zIGEgZmV3IGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5hdGlvbnMgaW5kZXBlbmRlbnQgb2YgY29uZmlnIEtBTExTWU1TLlxcbmtlcm5lbC9rc3ltc19jb21tb24uYy01LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzoxNi44Njg0NDYwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4OTI3NDYyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlIGZvciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYSBiaXQgZGVlcGVyLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGFyb3VuZCBsaW5lIDIwOTYuIFRoYXQncyBhIHJlYXNvbmFibGUgc3BvdCB0byBiZWdpbiBleHBsb3JpbmcgdGhlIHNldHRpbmdzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIGVhcmx5IHN5c3RlbSBzdGFydHVwLCBhbmQgbGlrZWx5IHNvbWUgb2YgdGhlIGNvcmUgZGVmYXVsdHMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBzcGVjaWZpYyBvcHRpb25zIGFyZSBiZWluZyBzZXQgb3IgaW5mbHVlbmNlZCBlYXJseSBvbi4gSXQncyB0aW1lIHRvIHN0YXJ0IHBhcnNpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjIyLjc2MTE5NDE2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwOTA6XFx0XFx0ICBFbmFibGUgdGhlIGNhY2hlc3RhdCBzeXN0ZW0gY2FsbCwgd2hpY2ggcXVlcmllcyB0aGUgcGFnZSBjYWNoZVxcbjIwOTE6XFx0XFx0ICBzdGF0aXN0aWNzIG9mIGEgZmlsZSAobnVtYmVyIG9mIGNhY2hlZCBwYWdlcywgZGlydHkgcGFnZXMsXFxuMjA5MjpcXHRcXHQgIHBhZ2VzIG1hcmtlZCBmb3Igd3JpdGViYWNrLCAocmVjZW50bHkpIGV2aWN0ZWQgcGFnZXMpLlxcbjIwOTM6XFx0XFxuMjA5NDpcXHRcXHQgIElmIHVuc3VyZSBzYXkgWSBoZXJlLlxcbjIwOTU6XFx0XFxuMjA5NjpcXHRjb25maWcgS0FMTFNZTVNcXG4yMDk3OlxcdFxcdGJvb2wgXFxcIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wc1xcXCIgaWYgRVhQRVJUXFxuMjA5ODpcXHRcXHRkZWZhdWx0IHlcXG4yMDk5OlxcdFxcdGhlbHBcXG4yMTAwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBsZXQgdGhlIGtlcm5lbCBwcmludCBvdXQgc3ltYm9saWMgY3Jhc2ggaW5mb3JtYXRpb24gYW5kXFxuMjEwMTpcXHRcXHQgIHN5bWJvbGljIHN0YWNrIGJhY2t0cmFjZXMuIFRoaXMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBrZXJuZWxcXG4yMTAyOlxcdFxcdCAgc29tZXdoYXQsIGFzIGFsbCBzeW1ib2xzIGhhdmUgdG8gYmUgbG9hZGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS5cXG4yMTAzOlxcdFxcbjIxMDQ6XFx0Y29uZmlnIEtBTExTWU1TX1NFTEZURVNUXFxuMjEwNTpcXHRcXHRib29sIFxcXCJUZXN0IHRoZSBiYXNpYyBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlIG9mIGthbGxzeW1zXFxcIlxcbjIxMDY6XFx0XFx0ZGVwZW5kcyBvbiBLQUxMU1lNU1xcbjIxMDc6XFx0XFx0ZGVmYXVsdCBuXFxuMjEwODpcXHRcXHRoZWxwXFxuMjEwOTpcXHRcXHQgIFRlc3QgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2Ugb2Ygc29tZSBpbnRlcmZhY2VzLCBzdWNoIGFzXFxuMjExMDpcXHRcXHQgIGthbGxzeW1zX2xvb2t1cF9uYW1lLiBJdCBhbHNvIGNhbGN1bGF0ZXMgdGhlIGNvbXByZXNzaW9uIHJhdGUgb2YgdGhlXFxuMjExMTpcXHRcXHQgIGthbGxzeW1zIGNvbXByZXNzaW9uIGFsZ29yaXRobSBmb3IgdGhlIGN1cnJlbnQgc3ltYm9sIHNldC5cXG4yMTEyOlxcdFxcbjIxMTM6XFx0XFx0ICBTdGFydCBzZWxmLXRlc3QgYXV0b21hdGljYWxseSBhZnRlciBzeXN0ZW0gc3RhcnR1cC4gU3VnZ2VzdCBleGVjdXRpbmdcXG4yMTE0OlxcdFxcdCAgXFxcImRtZXNnIHwgZ3JlcCBrYWxsc3ltc19zZWxmdGVzdFxcXCIgdG8gY29sbGVjdCB0ZXN0IHJlc3VsdHMuIFxcXCJmaW5pc2hcXFwiIGlzXFxuMjExNTpcXHRcXHQgIGRpc3BsYXllZCBpbiB0aGUgbGFzdCBsaW5lLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRlc3QgaXMgY29tcGxldGUuXFxuMjExNjpcXHRcXG4yMTE3OlxcdGNvbmZpZyBLQUxMU1lNU19BTExcXG4yMTE4OlxcdFxcdGJvb2wgXFxcIkluY2x1ZGUgYWxsIHN5bWJvbHMgaW4ga2FsbHN5bXNcXFwiXFxuMjExOTpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBLQUxMU1lNU1xcbjIxMjA6XFx0XFx0aGVscFxcbjIxMjE6XFx0XFx0ICBOb3JtYWxseSBrYWxsc3ltcyBvbmx5IGNvbnRhaW5zIHRoZSBzeW1ib2xzIG9mIGZ1bmN0aW9ucyBmb3IgbmljZXJcXG4yMTIyOlxcdFxcdCAgT09QUyBtZXNzYWdlcyBhbmQgYmFja3RyYWNlcyAoaS5lLiwgc3ltYm9scyBmcm9tIHRoZSB0ZXh0IGFuZCBpbml0dGV4dFxcbjIxMjM6XFx0XFx0ICBzZWN0aW9ucykuIFRoaXMgaXMgc3VmZmljaWVudCBmb3IgbW9zdCBjYXNlcy4gQW5kIG9ubHkgaWYgeW91IHdhbnQgdG9cXG4yMTI0OlxcdFxcdCAgZW5hYmxlIGtlcm5lbCBsaXZlIHBhdGNoaW5nLCBvciBvdGhlciBsZXNzIGNvbW1vbiB1c2UgY2FzZXMgKGUuZy4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjIyLjc2MTMyMjc0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzM0MzkxMzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgS2VybmVsIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIEknbSBsb29raW5nIGZvciBzcGVjaWZpYyBlbnRyeXBvaW50cywgbm90IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBNeSBwcmlvcml0eSBpcyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBuZXQvY29yZS9kZXYuY2AgbW9kdWxlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIEkgZm91bmQgdGhlIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGZ1bmN0aW9uLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCBhbmQgaXNuJ3Qgc3RhdGljLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZS4gSSd2ZSBhbHNvIGNoZWNrZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZCBvciBhZGRlZC4gSSB3ZW50IHRocm91Z2ggdGhlIGVudGlyZSBkaWZmLCBub3RpbmcgYWxsIGNoYW5nZWQgZnVuY3Rpb25zIGFuZCBmaWxlcywgaW5jbHVkaW5nIGlubGluZSBmdW5jdGlvbnMgYW5kIHN0YXRpYyBoZWxwZXJzLCBtYWtpbmcgc3VyZSB0byBjb25zaWRlciBldmVyeXRoaW5nLiBUaGlzIGluY2x1ZGVzIGByY3VfZG9fYmF0Y2hgLCBgaGFuZGxlX3NvZnRpcnFzYCwgYW5kIG90aGVycywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cbkkgd2FudCB0byBiZSB0aG9yb3VnaCBoZXJlLiBJJ3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBhZ2FpbiB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGUgcGF0Y2gsIGluY2x1ZGluZyB0aG9zZSBpbiBgbmV0L3NvY2tldC5jYCBhbmQgZWxzZXdoZXJlLiBJJ20gZm9jdXNpbmcgb24gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgYXMgaXQgc3RhbmRzIG91dCBhcyB0aGUgbWFpbiBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGludHJvZHVjZWQuIEl0IHNlZW1zIHBlcmZlY3RseSBhbGlnbmVkIHdpdGggbXkgY3JpdGVyaWEuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXBwZWFyIHRvIGJlIGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCwgYEtBTExTWU1TYCwgYW5kIHRoZWlyIGRlcGVuZGVuY2llczogYERFQlVHX0tFUk5FTGAgYW5kIGBORVRgLiBJIG1hZGUgc3VyZSB0byBjaGVjayB0aGUgaWZkZWZzIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgYENPTkZJR19LQUxMU1lNU2AgYXJlIHRoZSBwcmltYXJ5IGd1YXJkcyBmb3IgdGhlIG5ldyBjb2RlLiBJIHRoaW5rIEkndmUgaWRlbnRpZmllZCB0aGUgY29tcGxldGUgc2V0IG9mIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLlxuXG5JcyB0aGlzIGNvZGUgYWN0dWFsbHkgd29ydGh5IG9mIGZ1enppbmc/IEJhc2VkIG9uIG15IHJldmlldywgeWVzLCBhYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljLCBtYW5hZ2luZyBuZXRkZXZpY2UgcmVmZXJlbmNlcyB3aXRoIGFuIGluLWtlcm5lbCB0cmFjZSBidWZmZXIsIGluY2x1ZGluZyByYXcgc3BpbmxvY2tzLCBSQ1UgbGlzdCBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSBjb250cm9sLCBhbmQgc3ltYm9sIG5hbWUgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIG9wZXJhdGlvbnMuIEl0IGlzbid0IGp1c3QgZGVjb3JhdGl2ZSBsb2dnaW5nOyBpdCBpbnRyb2R1Y2VzIG5ldyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2sgcHJvdGVjdGlvbi4gVGhpcyBuZXcgY29kZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc2VyaW91cyByYWNlIGNvbmRpdGlvbnMsIGxvY2sgaXNzdWVzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgdGhlcmUgYXJlIGNsZWFybHkgcmlza3Mgd29ydGggZXhwbG9yaW5nLlxuXG5FdmVyeXRoaW5nIGlzIHZlcmlmaWVkLCBhbmQgSSdtIHJlYWR5IHRvIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTc3LCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzozNi4xMDUyMzkxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTI5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCIsXG4gICAgXCJLQUxMU1lNU1wiLFxuICAgIFwiREVCVUdfS0VSTkVMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYXZlX25ldGRldl90cmFjZV9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgbmV0d29yayBkZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNlIGJ1ZmZlciB0cmFja2luZyBtZWNoYW5pc20gdW5kZXIgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIgYW5kIENPTkZJR19LQUxMU1lNUy4gSXQgc2F2ZXMgc3RhY2sgdHJhY2VzIG9uIF9fZGV2X2hvbGQoKSBhbmQgX19kZXZfcHV0KCksIG1hbmFnaW5nIGFuIFJDVSBsaXN0IG9mIHRyYWNlIGJ1ZmZlcnMgd2l0aCBhIHJhdyBzcGlubG9jayBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLCB3aGljaCBhZmZlY3RzIGNvcmUgbmV0d29yayBkZXZpY2UgbGlmZWN5Y2xlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIixcbiAgICBcIkRFQlVHX0tFUk5FTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhIG5ldHdvcmsgZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFjZSBidWZmZXIgdHJhY2tpbmcgbWVjaGFuaXNtIHVuZGVyIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSIGFuZCBDT05GSUdfS0FMTFNZTVMuIEl0IHNhdmVzIHN0YWNrIHRyYWNlcyBvbiBfX2Rldl9ob2xkKCkgYW5kIF9fZGV2X3B1dCgpLCBtYW5hZ2luZyBhbiBSQ1UgbGlzdCBvZiB0cmFjZSBidWZmZXJzIHdpdGggYSByYXcgc3BpbmxvY2sgYW5kIG1lbW9yeSBjb21wYXJpc29ucywgd2hpY2ggYWZmZWN0cyBjb3JlIG5ldHdvcmsgZGV2aWNlIGxpZmVjeWNsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzozNi4xODAxNzQ1MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjAwNjAxOTEwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjI3OjM2LjE4MDYyMTYyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MjAwNTU2ODI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbi1rZXJuZWwgbmV0X2RldmljZSByZWZlcmVuY2UgY291bnQgdHJhY2tpbmcvZGVidWdnaW5nIG1lY2hhbmlzbSB1c2luZyBhIHN0YXRpYyB0cmFjZSBidWZmZXIgbGlzdCBhbmQgc3RhY2sgdHJhY2UgY2FwdHVyZXMuIFxcblxcbjEuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIGV0Yy4pOyBhbGwgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cgdmlhIHByaW50ay9zdGFja190cmFjZV9wcmludC5cXG4yLiBBbGwgdHJhY2UgYnVmZmVycyBhbmQgc3RhY2sgYXJyYXlzIGFyZSBlaXRoZXIgemVyby1pbml0aWFsaXplZCAoc3RhdGljIEJTUyBidWZmZXIgcG9vbCBhbmQgemVyb2VkIHN0YWNrIGJ1ZmZlcnMpIG9yIGV4cGxpY2l0bHkgd3JpdHRlbiB1cCB0byB0aGUgY291bnQgcmV0dXJuZWQgYnkgc3RhY2tfdHJhY2Vfc2F2ZSgpIGJlZm9yZSBhbnkgcmVhZHMgb3IgY29tcGFyaXNvbnMuXFxuMy4gTGVuZ3RoIHBhcmFtZXRlcnMgKG5yX2VudHJpZXMsIHRyaW1tZWRfZW50cmllcykgYXJlIHN0cmljdGx5IG1haW50YWluZWQgc3VjaCB0aGF0IG9ubHkgaW5pdGlhbGl6ZWQgc3RhY2sgdHJhY2UgZW50cmllcyBhcmUgZXZlciBhY2Nlc3NlZCBieSBtZW1jbXAsIG1lbW1vdmUsIGFuZCBzdGFja190cmFjZV9wcmludC5cXG40LiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIFJDVS9yYXcgc3BpbmxvY2sgdXNhZ2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3YmI5YzljZDQ0OTdlZmYyODQ2M2VhMjA1ZjE2NTI0MWMwYjE1OGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNToyMjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4N2NhZmM5MzJlOWU2Li5kNTE4MzM4Y2QwNzQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxNTMsNiArMjE1Myw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcbiAgKlx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xuICAqXHRtb3ZlcyBvdXQuXG4rICpcbisgKlx0QG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLlxuICAqL1xuIFxuIHN0cnVjdCBuZXRfZGV2aWNlIHtcbkBAIC0yMzEyLDYgKzIzMTQsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXG4gXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK1x0c3RydWN0IGxpc3RfaGVhZFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xuKyNlbmRpZlxuIFxuIFx0dW5zaWduZWQgaW50XHRcdG9wZXJzdGF0ZTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0bGlua19tb2RlO1xuQEAgLTQ0OTgsOSArNDUwMywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiB2b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2RlYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuQEAgLTQ1MTIsNiArNDUyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfaW5jKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xuaW5kZXggOTY4NDhmYzFmMDJiOC4uMjBjNGM5MjcwOGI4YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xuQEAgLTI1NjYsNiArMjU2NiwxMCBAQCBzdGF0aWMgYm9vbCByY3VfZG9fYmF0Y2hfY2hlY2tfdGltZShsb25nIGNvdW50LCBsb25nIHRsaW1pdCxcbiBcdCAgICAgICBsb2NhbF9jbG9jaygpIFx1MDAzZT0gdGxpbWl0O1xuIH1cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZVxuICAqIHBlcmlvZC4gIFRocm90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtXHUwMDNlYmxpbWl0LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jXG5pbmRleCA3OTgwYTRhMjMyZjlmLi5hZDk4ODk1NjMyODgwIDEwMDY0NFxuLS0tIGEva2VybmVsL3NvZnRpcnEuY1xuKysrIGIva2VybmVsL3NvZnRpcnEuY1xuQEAgLTU5OSw2ICs1OTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX3NvZnRpcnFfZW5kKGJvb2wgaW5faGFyZGlycSkgeyB9XG4gI2VuZGlmXG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpO1xuKyNlbmRpZlxuK1xuIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgKyBNQVhfU09GVElSUV9USU1FO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuY1xuaW5kZXggM2MwMzRjYmM1YmIzMC4uNjBkYWFlMWM2ZjE3ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC93b3JrcXVldWUuY1xuKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jXG5AQCAtMzI1OSw2ICszMjU5LDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuKyNlbmRpZlxuK1xuIC8qKlxuICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrXG4gICogQHdvcmtlcjogc2VsZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDM4MzM2ODU4YzE2OGYuLjkzYTc1OTRkNTg2ZTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTYzOSw2ICsxMTYzOSwxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbisjZW5kaWZcbitcbiBpbnQgbmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDtcbiBcbiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMVxuQEAgLTExNzIxLDYgKzExNzI5LDcgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFx0XHRcdFx0cHJfZW1lcmcoXCJ1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcXG5cIixcbiBcdFx0XHRcdFx0IGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7XG4gXHRcdFx0XHRyZWZfdHJhY2tlcl9kaXJfcHJpbnQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMCk7XG4rXHRcdFx0XHRkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbkBAIC0xMjEyMSw2ICsxMjEzMCw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdGRldi1cdTAwM2Vwcml2X2xlbiA9IHNpemVvZl9wcml2O1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbisjZW5kaWZcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcIm5ldGRldlwiKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7XG5AQCAtMTIyMjMsNiArMTIyMzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gZnJlZV9wY3B1OlxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIGZyZWVfZGV2OlxuICNlbmRpZlxuIFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyKTtcbkBAIC0xMjI5Miw2ICsxMjMwNSw3IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZWNvcmVfc3RhdHMpO1xuIFx0ZGV2LVx1MDAzZWNvcmVfc3RhdHMgPSBOVUxMO1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXhkcF9idWxrcSk7XG5AQCAtMTM0MTgsNiArMTM0MzIsMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuIFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4gfTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcbisjZW5kaWZcbitcbiAvKlxuICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxuQEAgLTEzNDI2LDYgKzEzNDQ2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJjID0gLUVOT01FTTtcbiBcbitcdG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpO1xuIFx0QlVHX09OKCFkZXZfYm9vdF9waGFzZSk7XG4gXG4gXHRuZXRfZGV2X3N0cnVjdF9jaGVjaygpO1xuQEAgLTEzNTI5LDMgKzEzNTUwLDI1NCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XG4rXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcbisjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxuK3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRhdG9taWNfdCBjb3VudDtcbitcdGludCB0cmltbWVkX2VudHJpZXM7XG4rXHRpbnQgbnJfZW50cmllcztcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XG4rfSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG4rc3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitcbitzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpKyspXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcbitcbitzdGF0aWMgaW50IHRyaW1fbmV0ZGV2X3RyYWNlKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIGludCBucl9lbnRyaWVzKVxuK3tcbitcdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XG4rXHRjaGFyICpjcDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdHNwcmludF9zeW1ib2xfbm9fb2Zmc2V0KGJ1ZmZlciwgZW50cmllc1tpXSk7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJyAnKTtcbitcdFx0aWYgKGNwKVxuK1x0XHRcdCpjcCA9ICdcXDAnO1xuK1x0XHRpZiAoYnVmZmVyWzBdID09ICdwJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJwcm9jZXNzX29uZV93b3JrXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnaycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwia3N5c191bnNoYXJlXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwic29ja19zZW5kbXNnX25vc2VjXCIpIHx8XG4rXHRcdFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcInNvY2tfcmVjdm1zZ19ub3NlY1wiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ3InKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcInJjdV9kb19iYXRjaFwiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ18nKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcIl9fc3lzX2JpbmRcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zb2NrX3JlbGVhc2VcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYnBmXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJkb19zb2NrX3NldHNvY2tvcHRcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBucl9lbnRyaWVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wO1xuK1x0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcbitcbitcdC8qIFVwZGF0ZSB0cmltbWVkX2VudHJpZXMgZmllbGQuIERvIG5vdCBtb2RpZnkgbnJfZW50cmllcyBmaWVsZFxuK1x0ICogaW4gY2FzZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBpcyBjYWxsZWQgYWdhaW4uXG4rXHQgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHRpZiAocHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9PSBwdHItXHUwMDNlbnJfZW50cmllcylcbitcdFx0XHRwdHItXHUwMDNldHJpbW1lZF9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2Vucl9lbnRyaWVzKTtcbitcdH1cbitcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyB1c2luZyB0cmltbWVkX2VudHJpZXMgZmllbGQuICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuK1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnB0ci1cdTAwM2Vjb3VudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHRtcCA9IHB0cjtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UodG1wLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0KSB7XG4rXHRcdFx0aWYgKHB0ci1cdTAwM2V0cmltbWVkX2VudHJpZXMgIT0gdG1wLVx1MDAzZXRyaW1tZWRfZW50cmllcyB8fFxuK1x0XHRcdCAgICBtZW1jbXAocHRyLVx1MDAzZWVudHJpZXMsIHRtcC1cdTAwM2VlbnRyaWVzLFxuK1x0XHRcdFx0ICAgcHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHRcdGlmICghY291bnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBNb3ZlIGNvdW50IGZyb20gbm9uLWZpcnN0IGVudHJ5IHRvIGZpcnN0IGVudHJ5LiAqL1xuK1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0YXRvbWljX3N1Yihjb3VudCwgXHUwMDI2dG1wLVx1MDAzZWNvdW50KTtcbitcdFx0fVxuK1x0XHQvKiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzXG4rXHRcdCAqIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcdC8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuK1x0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdGlmICghY291bnQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdC8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZVxuK1x0XHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXG4rXHRcdCAqL1xuK1x0XHRwb3MrKztcbitcdFx0YmFsYW5jZSArPSBjb3VudDtcbitcdFx0cHJfaW5mbyhcIkNhbGwgdHJhY2UgZm9yICVzWyVkXSAlK2QgYXRcXG5cIiwgZGV2LVx1MDAzZW5hbWUsIHBvcywgY291bnQpO1xuK1x0XHRzdGFja190cmFjZV9wcmludChwdHItXHUwMDNlZW50cmllcywgcHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcywgNCk7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1x0aWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZClcbitcdFx0cHJfaW5mbyhcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxuXCIsIGRldi1cdTAwM2VuYW1lLCBwb3MsIGJhbGFuY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5XG4rXHQgKiBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbm8gbW9yZSBfX2Rldl9wdXQoKS9fX2Rldl9ob2xkKCkgY2FsbCBjYW4gYmUgbWFkZS5cbitcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxuK1x0ICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTtcbitcdFx0bGlzdF9kZWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzW0FSUkFZX1NJWkUocHRyLVx1MDAzZWVudHJpZXMpXTtcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xuK1x0aWYgKGluX25taSgpKVxuK1x0XHRyZXR1cm47XG4rXHQvKiBHZXQgc3RhY2sgdHJhY2VzLiAqL1xuK1x0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyksIDEpO1xuK1x0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxuK1x0ICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJ3QgdHJpbSB0cmFjZXNcbitcdCAqIG9mIHByb2Nlc3MgY29udGV4dCB3aGVuIHRyeWluZyB0byBjb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcy5cbitcdCAqXG4rXHQgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC5cbitcdCAqL1xuK1x0aWYgKGluX3NvZnRpcnEoKSkge1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdFx0aWYgKGVudHJpZXNbaV0gXHUwMDNlPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGVudHJpZXNbaV0gXHUwMDNjIGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHtcbitcdFx0XHRcdG5yX2VudHJpZXMgPSBpICsgMTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0LyogQ29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgYXQgYmVzdC1lZmZvcnQgYmFzaXMuIFNpbmNlIGR1cGxpY2F0ZWQgZW50cmllc1xuK1x0ICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJ3QgdXNlIGxvY2sgaGVyZS5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbitcdFx0XHRhdG9taWNfYWRkKGRlbHRhLCBcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0fVxuK1x0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXG4rXHQgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy5cbitcdCAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXJcbitcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXG4rXHQgKi9cbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdC8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovXG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cHRyLVx1MDAzZWNvdW50LCBkZWx0YSk7XG4rXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdFx0cHRyLVx1MDAzZXRyaW1tZWRfZW50cmllcyA9IG5yX2VudHJpZXM7XG4rXHRcdG1lbW1vdmUocHRyLVx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuK1x0XHQvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqL1xuK1x0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZwdHItXHUwMDNlbGlzdCwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCA9IHRydWU7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rRVhQT1JUX1NZTUJPTChzYXZlX25ldGRldl90cmFjZV9idWZmZXIpO1xuK1xuK3N0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB7XG4rXHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcbitcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247XG4rfTtcbitcbisvKiBSZXNvbHZlIGFkZHJlc3Mgb2YgaGFuZGxlX3NvZnRpcnFzKCkgYW5kIGNhY2hlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBsb29raW5nIHVwXG4rICoga2FsbHN5bXMgZXZlcnkgdGltZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdO1xuK1x0aW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpO1xuK1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbitcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplO1xuK1x0Y2hhciAqY3A7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKykge1xuK1x0XHRzcHJpbnRfc3ltYm9sKGJ1ZmZlciwgZW50cmllc1tpXSk7XG4rXHRcdGlmIChzdHJuY21wKGJ1ZmZlciwgXCJoYW5kbGVfc29mdGlycXNcIiwgMTUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRjcCA9IHN0cmNocihidWZmZXIsICcrJyk7XG4rXHRcdGlmICghY3AgfHwgc3NjYW5mKGNwLCBcIislbHgvJWx4XCIsIFx1MDAyNm9mZnNldCwgXHUwMDI2c2l6ZSkgIT0gMilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gZW50cmllc1tpXSAtIG9mZnNldDtcbitcdFx0ZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyArIHNpemU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y29tcGxldGUoXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cdTAwM2Vjb21wbGV0aW9uKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB0YztcbitcbitcdHRpbWVyX3NldHVwX29uX3N0YWNrKFx1MDAyNnRjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRjLmNvbXBsZXRpb24pO1xuK1x0LyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqL1xuK1x0bW9kX3RpbWVyKFx1MDAyNnRjLnRpbWVyLCBqaWZmaWVzKTtcbitcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi9cbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4rXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi9cbitcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnRjLnRpbWVyKTtcbitcdHRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soXHUwMDI2dGMudGltZXIpO1xuK31cbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IGMwNWQ4NmU2M2FiZjcuLmIzZGRjYzI4M2NiYmMgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbisrKyBiL25ldC9zb2NrZXQuY1xuQEAgLTcyMyw3ICs3MjMsMTEgQEAgc3RydWN0IHNvY2tldCAqc29ja19hbGxvYyh2b2lkKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpO1xuIFxuLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbmRpZlxuK3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFxuQEAgLTc5NSw3ICs3OTksMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCxcbiBcdHRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbHNlXG4raW5saW5lXG4rI2VuZGlmXG4raW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXNlbmRtc2csIGluZXQ2X3NlbmRtc2csXG4gXHRcdFx0XHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxuQEAgLTExNDUsOCArMTE1NSwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZlxuIFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICAgIGludCBmbGFncylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2Vsc2VcbitpbmxpbmVcbisjZW5kaWZcbitpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKVxuIHtcbiBcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2VyZWN2bXNnLFxuIFx0XHRcdFx0ICAgICBpbmV0Nl9yZWN2bXNnLFxuQEAgLTI2NTMsOSArMjY2OCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLFxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZW5kaWZcbitpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0ICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyAyMF1cbiBcdFx0XHRcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNToyNzozNi4xODA2MjM3MDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyMDA1NTQ1NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoLCBmb2N1c2VkIG9uIHRyYWNpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBvcGVyYXRpb25zLCBkb2Vzbid0IGluaGVyZW50bHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgbGV0J3MgdmVyaWZ5LlxuXG5GaXJzdCwgSSBzZWUgdGhlIHBhdGNoIGFkZHMgYSBkZWJ1Z2dpbmcgbWVjaGFuaXNtLCBtb2RpZnlpbmcgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3QgYW5kIHVwZGF0aW5nIGNvcmUgZnVuY3Rpb25zIHRvIHRyYWNrIHJlZmVyZW5jZSBjb3VudHMuIEtleSBjaGFuZ2VzIGludm9sdmUgYWRkaW5nIGEgdHJhY2UgYnVmZmVyIGxpc3QsIG1vZGlmeWluZyBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgLCBhbmQgYW5ub3RhdGluZyBmdW5jdGlvbnMgd2l0aCBgbm9pbmxpbmVgLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0YCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLCBldGMuXG5cblRoZSBjcml0aWNhbCBhcmVhIHRvIGV2YWx1YXRlIGZvciBLTVNBTiBpcyBhbnkgcmVhZCBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGlzIG5ldyB0cmFjZSBidWZmZXIgaXMgdXNlZC4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSB2YXJpYWJsZXMgdXNlZCBmb3IgbWVtb3J5LlxuXG5BZnRlciBkaXZpbmcgaW50byBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmNgLCBhbmQgYG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdGAsIEkgc2VlIG5vIG9idmlvdXMgaXNzdWVzLiBgc3RhY2tfdHJhY2Vfc2F2ZWAgcG9wdWxhdGVzIHRoZSBzdGFjayB0cmFjZSwgYW5kIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBhcmUgY2FyZWZ1bGx5IGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiByZXR1cm5lZCBlbnRyaWVzIChgbnJfZW50cmllc2AgYW5kIGB0cmltbWVkX2VudHJpZXNgKS4gVGhlIHN0YXRpYyBhcnJheSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gQlNTLiBDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgb3IgYW55dGhpbmcgZWxzZSB0aGF0IHdvdWxkIGV4cG9zZSBrZXJuZWwgbWVtb3J5LiBFdmVuIHRoZSBjYWxsIHRvIGBzcHJpbnRfc3ltYm9sX25vX29mZnNldGAgdXNlcyBpbml0aWFsaXplZCBidWZmZXJzLlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBzdGFja190cmFjZV9zYXZlYCBjb3JyZWN0bHkgc2V0cyB0aGUgZW50cmllcywgYW5kIGV2ZXJ5IG9wZXJhdGlvbiBpcyBib3VuZGVkIGNvcnJlY3RseS4gVGhlIHVzZSBvZiBSQ1Ugd2l0aCBgbWVtY21wYCBhbmQgYG1lbW1vdmVgIGFyZSBhbGwgY29uc3RyYWluZWQgYnkgdGhlIHBvcHVsYXRlZCBudW1iZXIgb2YgZW50cmllcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggYXZvaWRzIGV4cG9zaW5nIGtlcm5lbCBkYXRhIHRvIHVzZXItc3BhY2UuXG5cblllcywgdGhlcmUgY291bGQgYmUgcmFjZSBjb25kaXRpb25zIG9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGJ1dCB0aG9zZSBhcmUgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLCBub3QgS01TQU4uXG5cbkluIHN1bW1hcnksIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgZWZmb3J0IGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgcHJvY2VlZC4gSSdsbCBzYW5pdHkgY2hlY2sgdGhpcyBjb25jbHVzaW9uIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjoyNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6MzA6MjguMTg2MTcyMzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW4ta2VybmVsIG5ldF9kZXZpY2UgcmVmZXJlbmNlIGNvdW50IHRyYWNraW5nL2RlYnVnZ2luZyBtZWNoYW5pc20gdXNpbmcgYSBzdGF0aWMgdHJhY2UgYnVmZmVyIGxpc3QgYW5kIHN0YWNrIHRyYWNlIGNhcHR1cmVzLiBcXG5cXG4xLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBldGMuKTsgYWxsIG91dHB1dCBpcyBwcmludGVkIHRvIHRoZSBrZXJuZWwgbG9nIHZpYSBwcmludGsvc3RhY2tfdHJhY2VfcHJpbnQuXFxuMi4gQWxsIHRyYWNlIGJ1ZmZlcnMgYW5kIHN0YWNrIGFycmF5cyBhcmUgZWl0aGVyIHplcm8taW5pdGlhbGl6ZWQgKHN0YXRpYyBCU1MgYnVmZmVyIHBvb2wgYW5kIHplcm9lZCBzdGFjayBidWZmZXJzKSBvciBleHBsaWNpdGx5IHdyaXR0ZW4gdXAgdG8gdGhlIGNvdW50IHJldHVybmVkIGJ5IHN0YWNrX3RyYWNlX3NhdmUoKSBiZWZvcmUgYW55IHJlYWRzIG9yIGNvbXBhcmlzb25zLlxcbjMuIExlbmd0aCBwYXJhbWV0ZXJzIChucl9lbnRyaWVzLCB0cmltbWVkX2VudHJpZXMpIGFyZSBzdHJpY3RseSBtYWludGFpbmVkIHN1Y2ggdGhhdCBvbmx5IGluaXRpYWxpemVkIHN0YWNrIHRyYWNlIGVudHJpZXMgYXJlIGV2ZXIgYWNjZXNzZWQgYnkgbWVtY21wLCBtZW1tb3ZlLCBhbmQgc3RhY2tfdHJhY2VfcHJpbnQuXFxuNC4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24sIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyaXNpbmcgZnJvbSBSQ1UvcmF3IHNwaW5sb2NrIHVzYWdlIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLWtlcm5lbCBuZXRfZGV2aWNlIHJlZmVyZW5jZSBjb3VudCB0cmFja2luZy9kZWJ1Z2dpbmcgbWVjaGFuaXNtIHVzaW5nIGEgc3RhdGljIHRyYWNlIGJ1ZmZlciBsaXN0IGFuZCBzdGFjayB0cmFjZSBjYXB0dXJlcy4gXFxuXFxuMS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgZXRjLik7IGFsbCBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUga2VybmVsIGxvZyB2aWEgcHJpbnRrL3N0YWNrX3RyYWNlX3ByaW50LlxcbjIuIEFsbCB0cmFjZSBidWZmZXJzIGFuZCBzdGFjayBhcnJheXMgYXJlIGVpdGhlciB6ZXJvLWluaXRpYWxpemVkIChzdGF0aWMgQlNTIGJ1ZmZlciBwb29sIGFuZCB6ZXJvZWQgc3RhY2sgYnVmZmVycykgb3IgZXhwbGljaXRseSB3cml0dGVuIHVwIHRvIHRoZSBjb3VudCByZXR1cm5lZCBieSBzdGFja190cmFjZV9zYXZlKCkgYmVmb3JlIGFueSByZWFkcyBvciBjb21wYXJpc29ucy5cXG4zLiBMZW5ndGggcGFyYW1ldGVycyAobnJfZW50cmllcywgdHJpbW1lZF9lbnRyaWVzKSBhcmUgc3RyaWN0bHkgbWFpbnRhaW5lZCBzdWNoIHRoYXQgb25seSBpbml0aWFsaXplZCBzdGFjayB0cmFjZSBlbnRyaWVzIGFyZSBldmVyIGFjY2Vzc2VkIGJ5IG1lbWNtcCwgbWVtbW92ZSwgYW5kIHN0YWNrX3RyYWNlX3ByaW50LlxcbjQuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gUkNVL3JhdyBzcGlubG9jayB1c2FnZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfn6k2[1] Phase: Succeeded StartedAt: 2026-08-29 15:30:39 +0000 UTC FinishedAt: 2026-08-29 15:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 15:30:39 +0000 UTC FinishedAt: 2026-08-29 15:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2] Phase: Succeeded StartedAt: 2026-08-29 15:30:39 +0000 UTC FinishedAt: 2026-08-29 19:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 15:30:39 +0000 UTC FinishedAt: 2026-08-29 19:09:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 15:30:39 +0000 UTC FinishedAt: 2026-08-29 15:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 15:30:39 +0000 UTC FinishedAt: 2026-08-29 15:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-convert-artifact-1625715375/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 15:30:50 +0000 UTC FinishedAt: 2026-08-29 15:46:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 15:30:50 +0000 UTC FinishedAt: 2026-08-29 15:46:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*809f9a18-4fca-4805-bf4d-78954fdd4b7f,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-workflowfn6k2/series-workflowfn6k2-convert-artifact-1625715375/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": "8a70eacd-c019-4a85-84d6-219c3e2bd7cf", "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-workflowfn6k2/series-workflowfn6k2-build-action-51640437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 15:30:50 +0000 UTC FinishedAt: 2026-08-29 15:46:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*809f9a18-4fca-4805-bf4d-78954fdd4b7f,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-workflowfn6k2/series-workflowfn6k2-convert-artifact-1625715375/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": "8a70eacd-c019-4a85-84d6-219c3e2bd7cf", "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-workflowfn6k2/series-workflowfn6k2-build-action-51640437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 15:46:45 +0000 UTC FinishedAt: 2026-08-29 15:46:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 15:46:45 +0000 UTC FinishedAt: 2026-08-29 15:46:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 15:46:45 +0000 UTC FinishedAt: 2026-08-29 15:46:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 15:46:45 +0000 UTC FinishedAt: 2026-08-29 15:46:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-convert-artifact-830039294/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 15:46:55 +0000 UTC FinishedAt: 2026-08-29 15:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 15:46:55 +0000 UTC FinishedAt: 2026-08-29 15:48:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a70eacd-c019-4a85-84d6-219c3e2bd7cf,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-workflowfn6k2/series-workflowfn6k2-build-action-51640437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 15:48:50 +0000 UTC FinishedAt: 2026-08-29 15:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 15:48:50 +0000 UTC FinishedAt: 2026-08-29 15:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 15:48:50 +0000 UTC FinishedAt: 2026-08-29 16:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 15:48:50 +0000 UTC FinishedAt: 2026-08-29 16:04:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*809f9a18-4fca-4805-bf4d-78954fdd4b7f,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-workflowfn6k2/series-workflowfn6k2-convert-artifact-830039294/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": "444c743f-0e4e-48a2-bc58-4fbf805ada37", "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-workflowfn6k2/series-workflowfn6k2-build-action-3924832594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 15:48:50 +0000 UTC FinishedAt: 2026-08-29 16:04:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*809f9a18-4fca-4805-bf4d-78954fdd4b7f,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-workflowfn6k2/series-workflowfn6k2-convert-artifact-830039294/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": "444c743f-0e4e-48a2-bc58-4fbf805ada37", "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-workflowfn6k2/series-workflowfn6k2-build-action-3924832594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 16:04:57 +0000 UTC FinishedAt: 2026-08-29 16:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 16:04:57 +0000 UTC FinishedAt: 2026-08-29 16:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 16:04:57 +0000 UTC FinishedAt: 2026-08-29 16:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 16:04:57 +0000 UTC FinishedAt: 2026-08-29 16:06:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*444c743f-0e4e-48a2-bc58-4fbf805ada37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-build-action-3924832594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 19:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 19:09:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8a70eacd-c019-4a85-84d6-219c3e2bd7cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*444c743f-0e4e-48a2-bc58-4fbf805ada37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-build-action-51640437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-build-action-3924832594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 16:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 16:06:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-convert-artifact-1548258307/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 16:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 16:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 16:06:51 +0000 UTC FinishedAt: 2026-08-29 16:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 16:07:01 +0000 UTC FinishedAt: 2026-08-29 19:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfn6k2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS","DEBUG_KERNEL","NET"],"series_id":"2631749c-606d-45e0-a2dd-d5d8768368ba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 16:07:01 +0000 UTC FinishedAt: 2026-08-29 19:09:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a70eacd-c019-4a85-84d6-219c3e2bd7cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*444c743f-0e4e-48a2-bc58-4fbf805ada37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-build-action-51640437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-build-action-3924832594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfn6k2/series-workflowfn6k2-convert-artifact-1548258307/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}