Name: series-workflowchvt2 Phase: Succeeded StartedAt: 2026-07-10 03:27:12 +0000 UTC FinishedAt: 2026-07-10 08:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[0] Phase: Succeeded StartedAt: 2026-07-10 03:27:12 +0000 UTC FinishedAt: 2026-07-10 03:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 03:27:12 +0000 UTC FinishedAt: 2026-07-10 03:56:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0850cfd16dca49228fd18f1d12b37157f8c4e8ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "CGROUP_RDMA", "SMC", "INFINIBAND_SRP", "RDMA_RXE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0850cfd16dca49228fd18f1d12b37157f8c4e8ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "CGROUP_RDMA", "SMC", "INFINIBAND_SRP", "RDMA_RXE" ], "series_id": "e90e9b9d-d3f5-434e-ab40-e221903237e3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ib_device_set_netns_put", "rdma_dev_change_netns", "rdma_dev_pick_netns_name", "nldev_set_doit", "rdmacg_device_visible", "smc_pnet_find_ib", "srp_net_namespace", "__alloc_name_id", "rdma_dev_name_in_netns" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1JETUEmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfU1JQJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICAgJiMzNDtzcnBfbmV0X25hbWVzcGFjZSYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNzZhZTlmN2M1NTkzNWZiMWMzOGI4OTg2ZDkwNWQ0ZWVkNTU5ZjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDM6NTU6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuQEAgLTEyLDYgJiM0MzsxMiwxMCBAQCBEZXNjcmlwdGlvbjogXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cbiBcdFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxuIFx0XHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlXG4gXG4mIzQzO1x0XHROb3RlOiBjb25maWdmcyBoYXMgbm8gbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCwgc28gdGhpc1xuJiM0MztcdFx0aW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW5cbiYjNDM7XHRcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cbiYjNDM7XG4gXG4gV2hhdDogXHRcdC9jb25maWcvcmRtYV9jbS9cdTAwM2NoY2FcdTAwM2UvcG9ydHMvXHUwMDNjcG9ydC1udW1cdTAwM2UvZGVmYXVsdF9yb2NlX21vZGVcbiBEYXRlOiBcdFx0Tm92ZW1iZXIgMjksIDIwMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbmluZGV4IDk5MzQ0NmFiNjZkMGZiLi40NTIzYzE4ODRkNjcxNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjc1Miw2ICYjNDM7Mjc1MiwxMyBAQCBSRE1BXG4gVGhlIFwmIzM0O3JkbWFcJiMzNDsgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZlxuIFJETUEgcmVzb3VyY2VzLlxuIFxuJiM0MztXaGVuIFJETUEgZGV2aWNlcyBhcmUgaXNvbGF0ZWQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIChleGNsdXNpdmUgbW9kZSksXG4mIzQzO2RldmljZSBuYW1lcyBhcmUgdW5pcXVlIG9ubHkgd2l0aGluIGEgbmV0d29yayBuYW1lc3BhY2UuIFRoZSBkZXZpY2UgbGluZXNcbiYjNDM7YmVsb3cgYXJlIHRoZXJlZm9yZSBzY29wZWQgdG8gdGhlIHJlYWRpbmcgb3Igd3JpdGluZyBwcm9jZXNzJiMzOTtzIG5ldHdvcmtcbiYjNDM7bmFtZXNwYWNlOiBvbmx5IGRldmljZXMgYWNjZXNzaWJsZSBmcm9tIHRoYXQgbmFtZXNwYWNlIGFyZSBsaXN0ZWQsIGFuZCBhXG4mIzQzO2xpbWl0IGlzIGFwcGxpZWQgdG8gdGhlIGRldmljZSBvZiB0aGF0IG5hbWUgaW4gdGhhdCBuYW1lc3BhY2UuIENvbmZpZ3VyZVxuJiM0MztsaW1pdHMgZnJvbSB0aGUgc2FtZSBuZXR3b3JrIG5hbWVzcGFjZSBhcyB0aGUgd29ya2xvYWRzLlxuJiM0MztcbiBSRE1BIEludGVyZmFjZSBGaWxlc1xuIH5+fn5+fn5+fn5+fn5+fn5+fn5+XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuaW5kZXggMWYwMzdmZTAxNDUwZWYuLjdhMjE2ZWQ0NTE5OWJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG5AQCAtMTcsNiAmIzQzOzE3LDggQEBcbiB2b2lkIGliX2RldmljZV9yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIHtcbiBcdGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmFtZSA9IGRldmljZS1cdTAwM2VuYW1lO1xuJiM0MztcdGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0bnNfc2hhcmVkID0gaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM7XG4mIzQzO1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5ldCwgcmRtYV9kZXZfbmV0KGRldmljZSkpO1xuIFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG5AQCAtMzQsNiAmIzQzOzM2LDE2IEBAIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiBcdHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG4mIzQzO3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0LCBuZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGJvb2wgc2hhcmVkKVxuJiM0Mzt7XG4mIzQzO1x0V1JJVEVfT05DRShkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5ldG5zX3NoYXJlZCwgc2hhcmVkKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcbiBcdFx0XHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdCBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbmluZGV4IDg5MWU1MmFmYjhmNGJhLi5jMzg5ZDRlMzdiNmJjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuQEAgLTY1LDYgJiM0Mzs2NSwxMCBAQCBzdGF0aWMgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCAqdG9fZGV2X3BvcnRfZ3JvdXAoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuIFx0cmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogY29uZmlnZnMgaXMgbm90IG5ldCBuYW1lc3BhY2UgYXdhcmUsIHNvIGEgbmFtZSBzaGFyZWQgYnkgZGV2aWNlcyBpblxuJiM0MzsgKiBkaWZmZXJlbnQgbmFtZXNwYWNlcyByZXNvbHZlcyB0byB0aGUgZmlyc3QgbWF0Y2ggaGVyZS5cbiYjNDM7ICovXG4gc3RhdGljIGJvb2wgZmlsdGVyX2J5X25hbWUoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB2b2lkICpjb29raWUpXG4ge1xuIFx0cmV0dXJuICFzdHJjbXAoZGV2X25hbWUoXHUwMDI2aWJfZGV2LVx1MDAzZWRldiksIGNvb2tpZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuaW5kZXggMTkxMDRjNTQyYjI3MGQuLjljZDY3MWUyZGIyMDQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG5AQCAtMTU2LDYgJiM0MzsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfUkRNQVxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XG4mIzQzO3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpO1xuJiM0Mzt2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGJvb2wgc2hhcmVkKTtcbiBcbiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcbiBcdFx0XHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuQEAgLTE3Myw2ICYjNDM7MTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYm9vbCBzaGFyZWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBpYl9yZG1hY2dfdHJ5X2NoYXJnZShzdHJ1Y3QgaWJfcmRtYWNnX29iamVjdCAqY2dfb2JqLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdCAgICAgICBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxuQEAgLTM1Niw3ICYjNDM7MzY4LDggQEAgdm9pZCBpYl9wb3J0X3VucmVnaXN0ZXJfY2xpZW50X2dyb3VwcyhzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTtcbiBcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpO1xuJiM0MztcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIGludCByZG1hX25sX25ldF9pbml0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xuIHZvaWQgcmRtYV9ubF9uZXRfZXhpdChzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG5pbmRleCBiODE5M2UwNzdhNzQ2Zi4uY2ZmYjBkZTFjMDAxNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0YXRpYyBERUNMQVJFX1JXU0VNKHJkbWFfbmV0c19yd3NlbSk7XG4gYm9vbCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucyA9IHRydWU7XG4gbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5ldG5zX21vZGUsXG4tXHRcdCBcJiMzNDtTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVwmIzM0Oyk7XG4mIzQzO1x0XHQgXCYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiAvKipcbiAgKiByZG1hX2Rldl9hY2Nlc3NfbmV0bnMoKSAtIFJldHVybiB3aGV0aGVyIGFuIHJkbWEgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZFxuICAqXHRcdFx0ICAgICBmcm9tIGEgc3BlY2lmaWVkIG5ldCBuYW1lc3BhY2Ugb3Igbm90LlxuQEAgLTI2OCw3ICYjNDM7MjY4LDggQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpYmRldl9sc21fbmIgPSB7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4tXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KTtcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbiYjNDM7XHRcdFx0XHQgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7XG4gXG4gLyogUG9pbnRlciB0byB0aGUgUkNVIGhlYWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpYl9wb3J0X2RhdGEgYXJyYXkgKi9cbiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7XG5AQCAtMzUxLDEzICYjNDM7MzUyLDE1IEBAIHZvaWQgaWJfZGV2aWNlX3B1dChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4gfVxuIEVYUE9SVF9TWU1CT0woaWJfZGV2aWNlX3B1dCk7XG4gXG4tc3RhdGljIHN0cnVjdCBpYl9kZXZpY2UgKl9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXG4gXHR4YV9mb3JfZWFjaCAoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSlcbi1cdFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKVxuJiM0MztcdFx0aWYgKHJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4gXHRcdFx0cmV0dXJuIGRldmljZTtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTM5NSw3ICYjNDM7Mzk4LDcgQEAgaW50IGliX2RldmljZV9yZW5hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUpKSB7XG4mIzQzO1x0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdH1cbkBAIC00MzUsNyAmIzQzOzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0MzsvKlxuJiM0MzsgKiBQaWNrIGEgZnJlZSBpbmRleCBmb3IgdGhlICYjMzk7JWQmIzM5OyBzdHlsZSBAbmFtZSBwYXR0ZXJuIHdpdGhpbiBuZXQgbmFtZXNwYWNlXG4mIzQzOyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHNcbiYjNDM7ICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuQEAgLTQ0OCw2ICYjNDM7NDU3LDggQEAgc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuIFx0eGFfZm9yX2VhY2ggKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpIHtcbiBcdFx0Y2hhciBidWZbSUJfREVWSUNFX05BTUVfTUFYXTtcbiBcbiYjNDM7XHRcdGlmIChkZXZpY2UgPT0gc2tpcCB8fCAhcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzc2NhbmYoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksIG5hbWUsIFx1MDAyNmkpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSBJTlRfTUFYKVxuQEAgLTQ2MiwxNSAmIzQzOzQ3MywyNyBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR9XG4gXG4gXHRyYyA9IGlkYV9hbGxvYyhcdTAwMjZpbnVzZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0cmMgPSBkZXZfc2V0X25hbWUoXHUwMDI2aWJkZXYtXHUwMDNlZGV2LCBuYW1lLCByYyk7XG4gb3V0OlxuIFx0aWRhX2Rlc3Ryb3koXHUwMDI2aW51c2UpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2FsbG9jX25hbWVfaWQobmV0LCBuYW1lLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiYjNDM7XHRpZCA9IGFsbG9jX25hbWVfaWQocmRtYV9kZXZfbmV0KGliZGV2KSwgbmFtZSk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGlkO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpO1xuQEAgLTEwOTQsNiAmIzQzOzExMTcsNyBAQCBzdGF0aWMgaW50IGFkZF9hbGxfY29tcGF0X2RldnModm9pZClcbiBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcbiB7XG4gXHRzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0O1xuJiM0MztcdHN0cnVjdCBpYl9kZXZpY2UgKmRldjtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC0xMTE2LDYgJiM0MzsxMTQwLDEyIEBAIGludCByZG1hX2NvbXBhdGRldl9zZXQodTggZW5hYmxlKVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiYjNDM7XHQvKiBLZWVwIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UmIzM5O3MgcmRtYSBjZ3JvdXAgdmlzaWJpbGl0eSBpbiBzeW5jLiAqL1xuJiM0MztcdGRvd25fcmVhZChcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHR4YV9mb3JfZWFjaF9tYXJrZWQoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldiwgREVWSUNFX1JFR0lTVEVSRUQpXG4mIzQzO1x0XHRpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoZGV2LCBlbmFibGUpO1xuJiM0MztcdHVwX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1xuIFx0aWYgKGVuYWJsZSlcbiBcdFx0cmV0ID0gYWRkX2FsbF9jb21wYXRfZGV2cygpO1xuIFx0ZWxzZVxuQEAgLTExNTEsOCAmIzQzOzExODEsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gdGhlIE5TIHRoZW4gbW92ZSBpdCBiYWNrIHRvIGluaXQuXG4mIzQzO1x0XHQgKiBQcm92aWRlIGEgZmFsbGJhY2sgcGF0dGVybiBzbyBhIG5hbWUgY29uZmxpY3QgaW4gaW5pdF9uZXRcbiYjNDM7XHRcdCAqIGNhbm5vdCBtYWtlIHRoZSB0ZWFyZG93biBtb3ZlIGZhaWwuXG4gXHRcdCAqL1xuLVx0XHRyZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2ZGV2LVx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xuJiM0MztcdFx0XHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFx1MDAyNmluaXRfbmV0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgTlVMTCwgXCYjMzQ7aWJkZXYlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0V0FSTigxLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIG1vdmUgUkRNQSBkZXZpY2UgJXMgdG8gaW5pdF9uZXQgb24gbmV0bnMgZXhpdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBkZXZfbmFtZShcdTAwMjZkZXYtXHUwMDNlZGV2KSwgcmV0KTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiBcdFx0ZG93bl9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuQEAgLTEyMDYsNyAmIzQzOzEyNDUsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcmRtYV9kZXZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIH1cbiBcbiAvKlxuLSAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoaXMgaXNcbiYjNDM7ICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZVxuJiM0MzsgKiBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIG5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0by4gVGhpcyBpc1xuICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS5cbiAgKi9cbiBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbkBAIC0xMjIzLDcgJiM0MzsxMjYzLDggQEAgc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpIHtcbiYjNDM7XHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdFx0ICAgIHJkbWFfZGV2X25ldChkZXZpY2UpKSkge1xuIFx0XHRyZXQgPSAtRU5GSUxFO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMzIyLDYgJiM0MzsxMzYzLDcgQEAgc3RhdGljIGludCBlbmFibGVfZGV2aWNlX2FuZF9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIFx0ICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlZmNvdW50LCAyKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1x0aWJfZGV2aWNlX3JkbWFjZ19zZXRfbmV0bnNfc2hhcmVkKGRldmljZSwgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpO1xuIFx0eGFfc2V0X21hcmsoXHUwMDI2ZGV2aWNlcywgZGV2aWNlLVx1MDAzZWluZGV4LCBERVZJQ0VfUkVHSVNURVJFRCk7XG4gXG4gXHQvKlxuQEAgLTEzODgsOCAmIzQzOzE0MzAsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiAvKipcbiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlXG4gICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsXG4tICogXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXG4mIzQzOyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJiMzOTtzIG5ldCBuYW1lc3BhY2UuIFRoaXMgbWF5XG4mIzQzOyAqXHQgIGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZVxuJiM0MzsgKlx0ICBwYXNzZWQgZGV2aWNlIG5hbWUuXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxuICAqXHQgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseVxuICAqXHRcdHNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLlxuQEAgLTE2NzAsMTQgJiM0MzsxNzEzLDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCByZG1hX2Rldl9uYW1lX2luX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKnNraXAsIHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4mIzQzO1x0XHRpZiAoZGV2aWNlICE9IHNraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2hvb3NlIHRoZSBuYW1lIEBkZXZpY2Ugc2hvdWxkIHVzZSBpbiBuZXQgbmFtZXNwYWNlIEBuZXQuIEByZXF1ZXN0ZWRfbmFtZVxuJiM0MzsgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZVxuJiM0MzsgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJiMzOTslZCYjMzk7IEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlXG4mIzQzOyAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybixcbiYjNDM7XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbiYjNDM7XHRcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XG4mIzQzO1x0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4mIzQzO1x0XHQqbmV3X25hbWUgPSBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXCYjMzQ7aWJkZXYldVwmIzM0OywgZGV2aWNlLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGJ1ZikpIHtcbiYjNDM7XHRcdCpuZXdfbmFtZSA9IGJ1ZjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBpZDtcbiYjNDM7XHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIGZhbGxiYWNrX3BhdHRlcm4sIGlkKTtcbiYjNDM7XHQqbmV3X25hbWUgPSBidWY7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnRcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcbiAgKiBpbnRvIG5ldC5cbiYjNDM7ICpcbiYjNDM7ICogTmFtaW5nIHJ1bGVzIGFyZSBoYW5kbGVkIGJ5IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSgpLlxuICAqL1xuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbi1cdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pXG4ge1xuJiM0MztcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XG4mIzQzO1x0Y29uc3QgY2hhciAqbmV3X25hbWU7XG4gXHRpbnQgcmV0MiA9IC1FSU5WQUw7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE2OTQsMzAgJiM0MzsxODA2LDY4IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZ1xuJiM0MztcdFx0ICogZG93biwgc28gYSBkb29tZWQgdXNlciBtb3ZlIGRvZXMgbm90IGRpc2FibGUgYSBsaXZlIGRldmljZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHNpemVvZihidWYpLCBcdTAwMjZuZXdfbmFtZSk7XG4mIzQzO1x0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTtcbiBcdGRpc2FibGVfZGV2aWNlKGRldmljZSk7XG4gXG4gXHQvKlxuLVx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cbi1cdCAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLlxuJiM0MztcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXG4mIzQzO1x0ICogbm93IHRoYXQgdGhlIGRldmljZSBpcyBkaXNhYmxlZCwgY2xvc2luZyByYWNlcyB3aXRoIGEgY29uY3VycmVudFxuJiM0MztcdCAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnNcbiYjNDM7XHQgKiBsZXZlbC5cbiBcdCAqL1xuLVx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNm5ld19uYW1lKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xuJiM0MztcdFx0XHRXQVJOKDEsXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7JXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuJiM0MztcdFx0XHRpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIG5ldCk7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIHJlbmFtZV9kb25lO1xuJiM0MztcdH1cbiBcbi1cdGRvd25fcmVhZChcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbi1cdC8qXG4tXHQgKiBDdXJyZW50bHkgcmRtYSBkZXZpY2VzIGFyZSBzeXN0ZW0gd2lkZSB1bmlxdWUuIFNvIHRoZSBkZXZpY2UgbmFtZVxuLVx0ICogaXMgZ3VhcmFudGVlZCBmcmVlIGluIHRoZSBuZXcgbmFtZXNwYWNlLiBQdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlXG4tXHQgKiBhdCB0aGUgc3lzZnMgbGV2ZWwuXG4tXHQgKi9cbi1cdHJldCA9IGRldmljZV9yZW5hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpO1xuLVx0dXBfcmVhZChcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuJiM0MztcdGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKGRldmljZSwgbmV0KTtcbiYjNDM7XHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIG5ld19uYW1lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7JXM6IENvdWxkbiYjMzk7dCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cJiMzNDssXG4tXHRcdFx0IF9fZnVuY19fKTtcbi1cdFx0LyogVHJ5IGFuZCBwdXQgdGhpbmdzIGJhY2sgYW5kIHJlLWVuYWJsZSB0aGUgZGV2aWNlICovXG4tXHRcdHdyaXRlX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xuJiM0MztcdFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcbiYjNDM7XHRcdFx0V0FSTigxLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0OyVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbiYjNDM7XHRcdFx0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBjdXJfbmV0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Ryc2NweShkZXZpY2UtXHUwMDNlbmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdElCX0RFVklDRV9OQU1FX01BWCk7XG4gXHR9XG4mIzQzO3JlbmFtZV9kb25lOlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuIFxuIFx0cmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpO1xuIFx0aWYgKHJldDIpIHtcbkBAIC0xNzQwLDM2ICYjNDM7MTg5MCw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4gfVxuIFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCByZXQ7XG4gXG4gXHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5zX2ZkKTtcbiBcdGlmIChJU19FUlIobmV0KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXCYjMzQ7KTtcbiBcdFx0cmV0ID0gUFRSX0VSUihuZXQpO1xuIFx0XHRnb3RvIG5ldF9lcnI7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FUEVSTTtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZpbmcgYSBkZXZpY2UgdG8gdGhlIG5hbWVzcGFjZSBpdCBhbHJlYWR5IGxpdmVzIGluIGlzIGEgbm8tb3A7IGFcbiYjNDM7XHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcdTAwMjZkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XG4mIzQzO1x0XHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O1VuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbCB0aGUgaWJfY2xpZW50cywgaW5jbHVkaW5nIHV2ZXJicywgYXJlIHJlc2V0IHdoZW4gdGhlIG5hbWVzcGFjZSBpc1xuIFx0ICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG9cbiBcdCAqIHNvbWV0aGluZywgc28gZGlzYXNzb2NpYXRpb24gaXMgbWFuZGF0b3J5LlxuIFx0ICovXG4tXHRpZiAoIWRldi1cdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0IHx8IGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0aWYgKGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGVcJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0RldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcJiMzNDspO1xuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0aWJfZGV2aWNlX3B1dChkZXYpO1xuLVx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0KTtcbiYjNDM7XHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCBuZXQsIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIE5VTEwpO1xuIFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiBcbiBcdHB1dF9uZXQobmV0KTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbmluZGV4IGY1OTljMjRiMzRlODFiLi40NzNiZjk2NjdmODNlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbkBAIC0xMTc3LDYgJiM0MzsxMTc3LDI0IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIWRldmljZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xuJiM0MztcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiYjNDM7XHRcdHUzMiBuc19mZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuJiM0MztcdFx0XHRubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLFxuJiM0MztcdFx0XHRcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuJiM0MztcdFx0XHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuJiM0MztcdFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgbmFtZVswXSA/IG5hbWUgOiBOVUxMLCBleHRhY2spO1xuJiM0MztcdFx0Z290byBwdXRfZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHtcbiBcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiBcbkBAIC0xMTkwLDE0ICYjNDM7MTIwOCw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbi1cdFx0dTMyIG5zX2ZkO1xuLVxuLVx0XHRuc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7XG4tXHRcdGVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7XG4tXHRcdGdvdG8gcHV0X2RvbmU7XG4tXHR9XG4tXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XG4gXHRcdHU4IHVzZV9kaW07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbkBAIC03MDAsNiAmIzQzOzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxuIFx0aWYgKHFwX3R5cGUgIT0gSUJfUVBUX1NNSSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbFxuJiM0MztcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxuJiM0MztcdCAqIHRoZSBzYW1lIGxhYmVsOyBkaXN0aW5ndWlzaGluZyB0aGVtIHdvdWxkIG5lZWQgbmV0IG5hbWVzcGFjZSBzdXBwb3J0XG4mIzQzO1x0ICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy5cbiYjNDM7XHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcbiBcdHJldCA9IHNlY3VyaXR5X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldChhZ2VudC1cdTAwM2VzZWN1cml0eSxcbiBcdFx0XHRcdFx0XHRkZXZfbmFtZShcdTAwMjZhZ2VudC1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2KSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuQEAgLTI0MCw2ICYjNDM7MjQwLDEwIEBAIHN0YXRpYyB2b2lkIHJ4ZV9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcbiBcdFx0cnhlX2Vycl91Yyh1YywgXCYjMzQ7Y2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnhlX2Rpc2Fzc29jaWF0ZV91Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiAvKiBwZCAqL1xuIHN0YXRpYyBpbnQgcnhlX2FsbG9jX3BkKHN0cnVjdCBpYl9wZCAqaWJwZCwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcbiB7XG5AQCAtMTQ3OCw2ICYjNDM7MTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHtcbiBcdC5kZXN0cm95X3NycSA9IHJ4ZV9kZXN0cm95X3NycSxcbiBcdC5kZXRhY2hfbWNhc3QgPSByeGVfZGV0YWNoX21jYXN0LFxuIFx0LmRldmljZV9ncm91cCA9IFx1MDAyNnJ4ZV9hdHRyX2dyb3VwLFxuJiM0MztcdC5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LFxuIFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcbiBcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXG4gXHQuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG5pbmRleCBhY2JkNzg3ZGUyNjViNS4uYTA3MGZjZjg2ZThhNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbkBAIC0zMTg5LDEwICYjNDM7MzE4OSwyNCBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3JwX2NsYXNzX2F0dHJzW107XG4gXG4gQVRUUklCVVRFX0dST1VQUyhzcnBfY2xhc3MpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcbiYjNDM7ICogZGV2aWNlJiMzOTtzIG5ldCBuYW1lc3BhY2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqc3JwX25ldF9uYW1lc3BhY2UoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LVx1MDAzZXNycF9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGNsYXNzIHNycF9jbGFzcyA9IHtcbiBcdC5uYW1lICAgID0gXCYjMzQ7aW5maW5pYmFuZF9zcnBcJiMzNDssXG4gXHQuZGV2X2dyb3VwcyA9IHNycF9jbGFzc19ncm91cHMsXG4tXHQuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXZcbiYjNDM7XHQuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXYsXG4mIzQzO1x0Lm5zX3R5cGUgPSBcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxuJiM0MztcdC5uYW1lc3BhY2UgPSBzcnBfbmV0X25hbWVzcGFjZSxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjcxMTcwY2IwZTE5ZTM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAjZGVmaW5lIF9DR1JPVVBfUkRNQV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuIFxuIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUge1xuIFx0UkRNQUNHX1JFU09VUkNFX0hDQV9IQU5ETEUsXG5AQCAtMzQsNiAmIzQzOzM1LDE1IEBAIHN0cnVjdCByZG1hY2dfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9ub2RlO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0cnBvb2xzO1xuIFx0Y2hhclx0XHRcdCpuYW1lO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8uIEBuZXRuc19zaGFyZWQgbWlycm9yc1xuJiM0MztcdCAqIGliX2RldmljZXNfc2hhcmVkX25ldG5zOiB3aGVuIHRydWUgdGhlIGRldmljZSBpcyB2aXNpYmxlIGZyb20gZXZlcnlcbiYjNDM7XHQgKiBuZXQgbmFtZXNwYWNlIChzaGFyZWQgbW9kZSk7IG90aGVyd2lzZSBAbmV0IGlzIHRoZSBvbmx5IG5hbWVzcGFjZVxuJiM0MztcdCAqIHRoYXQgbWF5IHNlZSBhbmQgY29uZmlndXJlIGl0LiBAbmV0bnNfc2hhcmVkIGlzIHVwZGF0ZWQgd2hlbiB0aGVcbiYjNDM7XHQgKiBzaGFyaW5nIG1vZGUgY2hhbmdlcywgc28gdXNlIHtSRUFELFdSSVRFfV9PTkNFKCkgdG8gYWNjZXNzIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHBvc3NpYmxlX25ldF90XHRcdG5ldDtcbiYjNDM7XHRib29sXHRcdFx0bmV0bnNfc2hhcmVkO1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG5pbmRleCAzYWY5NDZlY2JhYzNlZC4uZWUxMWMzYmJiYWUyMmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbkBAIC01MTYsNyAmIzQzOzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XG4gXHRSRE1BX05MREVWX0FUVFJfREVWX1BST1RPQ09MLFx0XHQvKiBzdHJpbmcgKi9cbiBcbiBcdC8qXG4tXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxuJiM0MztcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcbiYjNDM7XHQgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZVxuJiM0MztcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXG4mIzQzO1x0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXG4gXHQgKi9cbiBcdFJETUFfTkxERVZfTkVUX05TX0ZELFx0XHRcdC8qIHUzMiAqL1xuIFx0LypcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL3JkbWEuYyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Nncm91cC9yZG1hLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nncm91cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFyc2VyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXBfcmRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuIFxuICNkZWZpbmUgUkRNQUNHX01BWF9TVFIgXCYjMzQ7bWF4XCYjMzQ7XG4gXG5AQCAtNDY0LDYgJiM0Mzs0NjUsMTMgQEAgdm9pZCByZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChyZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2UpO1xuIFxuJiM0MzsvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXG4mIzQzO3N0YXRpYyBib29sIHJkbWFjZ19kZXZpY2VfdmlzaWJsZShjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShkZXZpY2UtXHUwMDNlbmV0bnNfc2hhcmVkKSB8fFxuJiM0MztcdCAgICAgICBuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2VuZXQpLCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7XG5AQCAtNDcxLDcgJiM0Mzs0NzksOCBAQCBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcbi1cdFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuJiM0MztcdFx0aWYgKHJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuIFx0XHRcdHJldHVybiBkZXZpY2U7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC02MjYsNiAmIzQzOzYzNSw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX3Jlc291cmNlX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdG11dGV4X2xvY2soXHUwMDI2cmRtYWNnX211dGV4KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiYjNDM7XHRcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7JXMgXCYjMzQ7LCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4gXG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG5AQCAtNjQ4LDYgJiM0Mzs2NjAsOSBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuJiM0MztcdFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xuIFxuIFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcyBcJiMzNDssIGRldmljZS1cdTAwM2VuYW1lKTtcbkBAIC02NzcsNiAmIzQzOzY5Miw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG4mIzQzO1x0XHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG4gXG4gXHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyVzIFwmIzM0OywgZGV2aWNlLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xuaW5kZXggNjNlMjg2ZTJkZmFhOGQuLmZmOWM5YzM1Y2MyZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19wbmV0LmNcbkBAIC0zMDQsMTMgJiM0MzszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZS4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuICovXG4tc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpXG4mIzQzOy8qXG4mIzQzOyAqIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLCByZXN0cmljdGVkIHRvIHRoZSBkZXZpY2VzXG4mIzQzOyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmliX25hbWUpXG4ge1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGliZGV2LCBcdTAwMjZzbWNfaWJfZGV2aWNlcy5saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi1cdTAwM2VpYmRldiwgbmV0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghc3RybmNtcChpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VuYW1lLCBpYl9uYW1lLFxuIFx0XHRcdCAgICAgc2l6ZW9mKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZW5hbWUpKSB8fFxuIFx0XHQgICAgKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZWRldi5wYXJlbnQgXHUwMDI2XHUwMDI2XG5AQCAtNDA4LDggJiM0Mzs0MTMsOCBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9ldGgoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuLVx0XHRcdCAgIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbiYjNDM7c3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHQgICBjaGFyICppYl9uYW1lLCB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpXG4ge1xuIFx0c3RydWN0IHNtY19wbmV0ZW50cnkgKnRtcF9wZSwgKm5ld19wZTtcbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYl9kZXY7XG5AQCAtNDE5LDcgJiM0Mzs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuIFx0Ym9vbCBuZXdfaWJkZXY7XG4gXG4gXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xuLVx0aWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihpYl9uYW1lKTtcbiYjNDM7XHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XG4gXHRpZiAoaWJfZGV2KSB7XG4gXHRcdGliZGV2X2FwcGxpZWQgPSBzbWNfcG5ldF9hcHBseV9pYihpYl9kZXYsIGliX3BvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmIChpYmRldl9hcHBsaWVkKVxuQEAgLTUxOCw3ICYjNDM7NTIzLDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9lbnRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10pXG4gXHRcdFx0aWYgKGlicG9ydCBcdTAwM2MgMSB8fCBpYnBvcnQgXHUwMDNlIFNNQ19NQVhfUE9SVFMpXG4gXHRcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHR9XG4tXHRcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XG4mIzQzO1x0XHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmICghcmMpXG4gXHRcdFx0bmV3X2liZGV2ID0gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAocmMgIT0gLUVFWElTVClcbkBAIC0xMTcwLDYgJiM0MzsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KVxuIFx0c3RydWN0IHNtY19uZXQgKnNuO1xuIFx0aW50IHJjID0gLUVOT0VOVDtcbiBcbiYjNDM7XHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhzbWNpYmRldi1cdTAwM2VpYmRldiwgXHUwMDI2aW5pdF9uZXQpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuIFx0LyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi9cbiBcdHNuID0gbmV0X2dlbmVyaWMoXHUwMDI2aW5pdF9uZXQsIHNtY19uZXRfaWQpO1xuIFx0cG5ldHRhYmxlID0gXHUwMDI2c24tXHUwMDNlcG5ldHRhYmxlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5pbmRleCAwN2FmN2YxNWMxYmY3NC4uYTkxYzE0YzQ1MDA2ZTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAIFRFU1RfUFJPR1MgOj0gcnhlX3JwaW5nX2JldHdlZW5fbmV0bnMuc2ggXFxcbiBcdFx0cnhlX2lwdjYuc2ggXFxcbiBcdFx0cnhlX3NvY2tldF93aXRoX25ldG5zLnNoIFxcXG4gXHRcdHJ4ZV90ZXN0X05FVERFVl9VTlJFR0lTVEVSLnNoIFxcXG4tXHRcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2hcbiYjNDM7XHRcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXFxcbiYjNDM7XHRcdHJ4ZV9uZXRuc19uYW1lcy5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuaW5kZXggNGZmYjgxNGUyNTNiYmQuLmUxZmY1NGVjMGY1NzkwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5AQCAtMSwzICYjNDM7MSw1IEBAXG4gQ09ORklHX1RVTlxuIENPTkZJR19WRVRIXG4mIzQzO0NPTkZJR19EVU1NWVxuJiM0MztDT05GSUdfTkVUX05TXG4gQ09ORklHX1JETUFfUlhFXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hN2U1NzcwNmZkZmY3NVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2hcbkBAIC0wLDAgJiM0MzsxLDI4MiBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBFeGVyY2lzZSBSRE1BIGRldmljZSBuYW1lIGhhbmRsaW5nIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXG4mIzQzO1xuJiM0Mztzb3VyY2UgXCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQwXCYjMzQ7KS8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXCYjMzQ7XG4mIzQzO1xuJiM0MztOQU1FX1BSRUZJWD1cJiMzNDtyeGVfbmV0bnNfbmFtZXNfJCRcJiMzNDtcbiYjNDM7TkVUREVWX1BSRUZJWD1cJiMzNDtyeG4kJFwmIzM0O1xuJiM0MztOUzE9XCYjMzQ7JHtOQU1FX1BSRUZJWH1uczFcJiMzNDtcbiYjNDM7TlMyPVwmIzM0OyR7TkFNRV9QUkVGSVh9bnMyXCYjMzQ7XG4mIzQzO1JYRV9BPVwmIzM0OyR7TkFNRV9QUkVGSVh9cnhlX2FcJiMzNDtcbiYjNDM7UlhFX0I9XCYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfYlwmIzM0O1xuJiM0MztSWEVfU0FNRT1cJiMzNDske05BTUVfUFJFRklYfXJ4ZV9zYW1lXCYjMzQ7XG4mIzQzO1JYRV9ORVc9XCYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfbmV3XCYjMzQ7XG4mIzQzO0RVTU1ZX0E9XCYjMzQ7JHtORVRERVZfUFJFRklYfWFcJiMzNDtcbiYjNDM7RFVNTVlfQj1cJiMzNDske05FVERFVl9QUkVGSVh9YlwmIzM0O1xuJiM0MztPTERfTU9ERT1cJiMzNDtcJiMzNDtcbiYjNDM7TU9ERV9DSEFOR0VEPTBcbiYjNDM7TU9EUz0oXCYjMzQ7ZHVtbXlcJiMzNDsgXCYjMzQ7cmRtYV9yeGVcJiMzNDspXG4mIzQzO1RFU1RfU0FNRV9OQU1FUz1cJiMzNDtzYW1lIFJETUEgZGV2aWNlIG5hbWUgY2FuIGV4aXN0IGluIHR3byBuZXQgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztURVNUX01PVkVfQ09ORkxJQ1Q9XCYjMzQ7bW92ZSB3aXRob3V0IHJlbmFtZSBmYWlscyBvbiBkZXN0aW5hdGlvbiBuYW1lIGNvbmZsaWN0XCYjMzQ7XG4mIzQzO1RFU1RfTU9WRV9SRU5BTUU9XCYjMzQ7bW92ZSB0aGVuIHJlbmFtZSBzdWNjZWVkc1wmIzM0O1xuJiM0MztURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FPVwmIzM0O21vdmUgd2l0aCByZXF1ZXN0ZWQgZGVzdGluYXRpb24gbmFtZSBzdWNjZWVkc1wmIzM0O1xuJiM0MztURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRT1cJiMzNDtzYW1lLW5ldG5zIHJlbmFtZSByZWplY3RzIGR1cGxpY2F0ZSBuYW1lXCYjMzQ7XG4mIzQzO1RFU1RfVEVBUkRPV05fUkVUVVJOPVwmIzM0O25ldG5zIGRlbGV0ZSByZXR1cm5zIGRldmljZSB0byBpbml0X25ldCBhbmQgcmVuYW1lcyBvbiBjb25mbGljdFwmIzM0O1xuJiM0MztcbiYjNDM7a3NmdF9za2lwKClcbiYjNDM7e1xuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JCpcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZmFpbCgpXG4mIzQzO3tcbiYjNDM7XHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7JCpcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bmVlZF9jbWQoKVxuJiM0Mzt7XG4mIzQzO1x0Y29tbWFuZCAtdiBcJiMzNDskMVwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwga3NmdF9za2lwIFwmIzM0O21pc3NpbmcgY29tbWFuZDogJDFcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9ucygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IHJkbWEgXCYjMzQ7JEBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9kZXZfZXhpc3RzKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxXG4mIzQzO1x0bG9jYWwgZGV2PSQyXG4mIzQzO1xuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JG5zXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJkbWFfbnMgXCYjMzQ7JG5zXCYjMzQ7IGRldiBzaG93IFwmIzM0OyRkZXZcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmRtYSBkZXYgc2hvdyBcJiMzNDskZGV2XCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2FkZF9kdW1teSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuZXRkZXY9JDFcbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgXCYjMzQ7JG5ldGRldlwmIzM0OyB0eXBlIGR1bW15IHx8IHJldHVybiAxXG4mIzQzO1x0aXAgbGluayBzZXQgXCYjMzQ7JG5ldGRldlwmIzM0OyB1cCB8fCByZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzthZGRfcnhlKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIGRldj0kMVxuJiM0MztcdGxvY2FsIG5ldGRldj0kMlxuJiM0MztcbiYjNDM7XHRyZG1hIGxpbmsgYWRkIFwmIzM0OyRkZXZcJiMzNDsgdHlwZSByeGUgbmV0ZGV2IFwmIzM0OyRuZXRkZXZcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9kZXZfb25fbmV0ZGV2KClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5ldGRldj0kMVxuJiM0MztcbiYjNDM7XHRyZG1hIGxpbmsgc2hvdyAyXHUwMDNlL2Rldi9udWxsIHwgYXdrIC12IHdhbnQ9XCYjMzQ7JG5ldGRldlwmIzM0OyAmIzM5O1xuJiM0MztcdFx0e1xuJiM0MztcdFx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBORjsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0aWYgKCRpID09IFwmIzM0O25ldGRldlwmIzM0OyBcdTAwMjZcdTAwMjYgJChpICYjNDM7IDEpID09IHdhbnQpIHtcbiYjNDM7XHRcdFx0XHRcdGRldiA9ICQyXG4mIzQzO1x0XHRcdFx0XHRzdWIoL1xcLy4qLywgXCYjMzQ7XCYjMzQ7LCBkZXYpXG4mIzQzO1x0XHRcdFx0XHRwcmludCBkZXZcbiYjNDM7XHRcdFx0XHRcdGV4aXRcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHR9JiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7d2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmV0ZGV2PSQxXG4mIzQzO1x0bG9jYWwgZGV2XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdGRldj0kKHJkbWFfZGV2X29uX25ldGRldiBcJiMzNDskbmV0ZGV2XCYjMzQ7KVxuJiM0MztcdFx0aWYgWyAtbiBcJiMzNDskZGV2XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDskZGV2XCYjMzQ7XG4mIzQzO1x0XHRcdHJldHVybiAwXG4mIzQzO1x0XHRmaVxuJiM0MztcdFx0c2xlZXAgMC4xXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF9kZXZzKClcbiYjNDM7e1xuJiM0MztcdGNsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7XHRhZGRfZHVtbXkgXCYjMzQ7JERVTU1ZX0FcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XHRhZGRfZHVtbXkgXCYjMzQ7JERVTU1ZX0JcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0YWRkX3J4ZSBcJiMzNDskUlhFX0FcJiMzNDsgXCYjMzQ7JERVTU1ZX0FcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XHRhZGRfcnhlIFwmIzM0OyRSWEVfQlwmIzM0OyBcJiMzNDskRFVNTVlfQlwmIzM0OyB8fCByZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjbGVhbnVwX2RldnMoKVxuJiM0Mzt7XG4mIzQzO1x0aXAgbGluayBkZWwgXCYjMzQ7JERVTU1ZX0FcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIGxpbmsgZGVsIFwmIzM0OyREVU1NWV9CXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXAoKVxuJiM0Mzt7XG4mIzQzO1x0T0xEX01PREU9JChyZG1hIHN5c3RlbSBzaG93IDJcdTAwM2UvZGV2L251bGwgfFxuJiM0MztcdFx0ICAgc2VkIC1uICYjMzk7cy8uKm5ldG5zIFxcKFteIF0qXFwpLiovXFwxL3AmIzM5OylcbiYjNDM7XHRbIC1uIFwmIzM0OyRPTERfTU9ERVwmIzM0OyBdIHx8IGtzZnRfc2tpcCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbiYjNDM7XHRcdGtzZnRfc2tpcCBcJiMzNDtyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDtcbiYjNDM7XHRNT0RFX0NIQU5HRUQ9MVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBhZGQgXCYjMzQ7JE5TMVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIGFkZCBcJiMzNDskTlMyXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NsZWFudXAoKVxuJiM0Mzt7XG4mIzQzO1x0Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskTlMxXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpcCBuZXRucyBkZWwgXCYjMzQ7JE5TMlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1xuJiM0MztcdGlmIFsgXCYjMzQ7JE1PREVfQ0hBTkdFRFwmIzM0OyAtZXEgMSBdOyB0aGVuXG4mIzQzO1x0XHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgXCYjMzQ7JE9MRF9NT0RFXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRmb3IgbSBpbiBcJiMzNDske01PRFNbQF19XCYjMzQ7OyBkb1xuJiM0MztcdFx0bW9kcHJvYmUgLXIgXCYjMzQ7JG1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZSgpXG4mIzQzO3tcbiYjNDM7XHRyZG1hIGRldiBoZWxwIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtRXEgJiMzOTtuZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7WyBcJiMzNDskKGlkIC11KVwmIzM0OyAtZXEgMCBdIHx8IGtzZnRfc2tpcCBcJiMzNDttdXN0IGJlIHJ1biBhcyByb290XCYjMzQ7XG4mIzQzO25lZWRfY21kIGlwXG4mIzQzO25lZWRfY21kIHJkbWFcbiYjNDM7bmVlZF9jbWQgbW9kcHJvYmVcbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0Mztmb3IgbSBpbiBcJiMzNDske01PRFNbQF19XCYjMzQ7OyBkb1xuJiM0MztcdG1vZGluZm8gXCYjMzQ7JG1cJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8IGtzZnRfc2tpcCBcJiMzNDttb2R1bGUgJG0gbm90IGZvdW5kXCYjMzQ7XG4mIzQzO1x0bW9kcHJvYmUgXCYjMzQ7JG1cJiMzNDsgfHwgZmFpbCBcJiMzNDtmYWlsZWQgdG8gbG9hZCAkbVwmIzM0O1xuJiM0Mztkb25lXG4mIzQzO1xuJiM0MztzZXR1cCB8fCBmYWlsIFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgbmV0IG5hbWVzcGFjZXNcJiMzNDtcbiYjNDM7XG4mIzQzO2t0YXBfcHJpbnRfaGVhZGVyXG4mIzQzO2t0YXBfc2V0X3BsYW4gN1xuJiM0MztcbiYjNDM7aWYgc2V0dXBfZGV2cyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuZXRucyBcJiMzNDskTlMxXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hX25zIFwmIzM0OyROUzFcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYV9ucyBcJiMzNDskTlMyXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMVwmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX1NBTUVfTkFNRVNcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkFNRVNcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHNldHVwX2RldnMgfHxcbiYjNDM7ICAgISByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzFcJiMzNDsgfHxcbiYjNDM7ICAgISByZG1hX25zIFwmIzM0OyROUzFcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgfHxcbiYjNDM7ICAgISByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzJcJiMzNDsgfHxcbiYjNDM7ICAgISByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDs7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYV9ucyBcJiMzNDskTlMxXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzJcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVFwmIzM0O1xuJiM0MztlbGlmIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMxXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgICByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDs7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7ZWxpZiByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzJcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgICAgcmRtYV9ucyBcJiMzNDskTlMyXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX05FV1wmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9BXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7aWYgISByZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3NraXAgXCYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7ZWxpZiAhIHNldHVwX2RldnM7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfTkVXXCYjMzQ7OyB0aGVuXG4mIzQzO1x0aWYgcmRtYV9kZXZfZXhpc3RzIFwmIzM0OyROUzJcJiMzNDsgXCYjMzQ7JFJYRV9ORVdcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgISByZG1hX2Rldl9leGlzdHMgXCYjMzQ7XCYjMzQ7IFwmIzM0OyRSWEVfQVwmIzM0OzsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgICAgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfTkVXXCYjMzQ7OyB0aGVuXG4mIzQzO1x0aWYgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfTkVXXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZWxpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7XCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7ZWxpZiAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgfHxcbiYjNDM7ICAgICAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyB8fFxuJiM0MzsgICAgICEgcmRtYV9ucyBcJiMzNDskTlMyXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IHx8XG4mIzQzOyAgICAgISByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDs7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskTlMyXCYjMzQ7XG4mIzQzO1x0cmV0dXJuZWQ9JCh3YWl0X3JkbWFfZGV2X29uX25ldGRldiBcJiMzNDskRFVNTVlfQlwmIzM0OylcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDtkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJiMzOTske3JldHVybmVkOi1cdTAwM2NtaXNzaW5nXHUwMDNlfSYjMzk7XCYjMzQ7XG4mIzQzO1x0aWYgcmRtYV9kZXZfZXhpc3RzIFwmIzM0O1wmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgWyAtbiBcJiMzNDskcmV0dXJuZWRcJiMzNDsgXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICBbIFwmIzM0OyRyZXR1cm5lZFwmIzM0OyAhPSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICBbIFwmIzM0OyR7cmV0dXJuZWQjaWJkZXZ9XCYjMzQ7ICE9IFwmIzM0OyRyZXR1cm5lZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2t0YXBfZmluaXNoZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX1NSUCYjMzQ7LAogICAgJiMzNDtSRE1BX1JYRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2liX2RldmljZV9zZXRfbmV0bnNfcHV0JiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X2NoYW5nZV9uZXRucyYjMzQ7LAogICAgJiMzNDtyZG1hX2Rldl9waWNrX25ldG5zX25hbWUmIzM0OywKICAgICYjMzQ7bmxkZXZfc2V0X2RvaXQmIzM0OywKICAgICYjMzQ7cmRtYWNnX2RldmljZV92aXNpYmxlJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfaWImIzM0OywKICAgICYjMzQ7c3JwX25ldF9uYW1lc3BhY2UmIzM0OywKICAgICYjMzQ7X19hbGxvY19uYW1lX2lkJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X25hbWVfaW5fbmV0bnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcywgYWxsb3dpbmcgdGhlbSB0byBiZSBpc29sYXRlZCBhbmQgcmVuYW1lZCBwZXIgbmV0d29yayBuYW1lc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBSRE1BIGNvcmUsIFJETUEgY2dyb3VwcywgU01DLCBhbmQgU1JQLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGNncm91cGZzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNzZhZTlmN2M1NTkzNWZiMWMzOGI4OTg2ZDkwNWQ0ZWVkNTU5ZjZiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMDM6NTU6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20KaW5kZXggNzRmOTUwNmY0MmU3YWMuLjczOWY3YjZhMTI1OThiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20KJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtCkBAIC0xMiw2ICYjNDM7MTIsMTAgQEAgRGVzY3JpcHRpb246IAlJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG8KIAkJZm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOgogCQlta2RpciAtcCAvY29uZmlnL3JkbWFfY20vJmx0O2hjYSZndDsKIAomIzQzOwkJTm90ZTogY29uZmlnZnMgaGFzIG5vIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQsIHNvIHRoaXMKJiM0MzsJCWludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluCiYjNDM7CQlkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIChwb3NzaWJsZSBpbiBleGNsdXNpdmUgbmV0bnMgbW9kZSkuCiYjNDM7CiAKIFdoYXQ6IAkJL2NvbmZpZy9yZG1hX2NtLyZsdDtoY2EmZ3Q7L3BvcnRzLyZsdDtwb3J0LW51bSZndDsvZGVmYXVsdF9yb2NlX21vZGUKIERhdGU6IAkJTm92ZW1iZXIgMjksIDIwMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAppbmRleCA5OTM0NDZhYjY2ZDBmYi4uNDUyM2MxODg0ZDY3MTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTI3NTIsNiAmIzQzOzI3NTIsMTMgQEAgUkRNQQogVGhlICYjMzQ7cmRtYSYjMzQ7IGNvbnRyb2xsZXIgcmVndWxhdGVzIHRoZSBkaXN0cmlidXRpb24gYW5kIGFjY291bnRpbmcgb2YKIFJETUEgcmVzb3VyY2VzLgogCiYjNDM7V2hlbiBSRE1BIGRldmljZXMgYXJlIGlzb2xhdGVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZSAoZXhjbHVzaXZlIG1vZGUpLAomIzQzO2RldmljZSBuYW1lcyBhcmUgdW5pcXVlIG9ubHkgd2l0aGluIGEgbmV0d29yayBuYW1lc3BhY2UuIFRoZSBkZXZpY2UgbGluZXMKJiM0MztiZWxvdyBhcmUgdGhlcmVmb3JlIHNjb3BlZCB0byB0aGUgcmVhZGluZyBvciB3cml0aW5nIHByb2Nlc3MmIzM5O3MgbmV0d29yawomIzQzO25hbWVzcGFjZTogb25seSBkZXZpY2VzIGFjY2Vzc2libGUgZnJvbSB0aGF0IG5hbWVzcGFjZSBhcmUgbGlzdGVkLCBhbmQgYQomIzQzO2xpbWl0IGlzIGFwcGxpZWQgdG8gdGhlIGRldmljZSBvZiB0aGF0IG5hbWUgaW4gdGhhdCBuYW1lc3BhY2UuIENvbmZpZ3VyZQomIzQzO2xpbWl0cyBmcm9tIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIGFzIHRoZSB3b3JrbG9hZHMuCiYjNDM7CiBSRE1BIEludGVyZmFjZSBGaWxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYwppbmRleCAxZjAzN2ZlMDE0NTBlZi4uN2EyMTZlZDQ1MTk5YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jCkBAIC0xNyw2ICYjNDM7MTcsOCBAQAogdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKIAlkZXZpY2UtJmd0O2NnX2RldmljZS5uYW1lID0gZGV2aWNlLSZndDtuYW1lOwomIzQzOwlkZXZpY2UtJmd0O2NnX2RldmljZS5uZXRuc19zaGFyZWQgPSBpYl9kZXZpY2VzX3NoYXJlZF9uZXRuczsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y2dfZGV2aWNlLm5ldCwgcmRtYV9kZXZfbmV0KGRldmljZSkpOwogCXJkbWFjZ19yZWdpc3Rlcl9kZXZpY2UoJmFtcDtkZXZpY2UtJmd0O2NnX2RldmljZSk7CiB9CiAKQEAgLTM0LDYgJiM0MzszNiwxNiBAQCB2b2lkIGliX2RldmljZV91bnJlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiAJcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7ZGV2aWNlLSZndDtjZ19kZXZpY2UpOwogfQogCiYjNDM7dm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NnX2RldmljZS5uZXQsIG5ldCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19zZXRfbmV0bnNfc2hhcmVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgYm9vbCBzaGFyZWQpCiYjNDM7ewomIzQzOwlXUklURV9PTkNFKGRldmljZS0mZ3Q7Y2dfZGV2aWNlLm5ldG5zX3NoYXJlZCwgc2hhcmVkKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaiwKIAkJCSBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiAJCQkgZW51bSByZG1hY2dfcmVzb3VyY2VfdHlwZSByZXNvdXJjZV9pbmRleCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMKaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwpAQCAtNjUsNiAmIzQzOzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluCiYjNDM7ICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuCiYjNDM7ICovCiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSkKIHsKIAlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZSgmYW1wO2liX2Rldi0mZ3Q7ZGV2KSwgY29va2llKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmgKaW5kZXggMTkxMDRjNTQyYjI3MGQuLjljZDY3MWUyZGIyMDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaApAQCAtMTU2LDYgJiM0MzsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9SRE1BCiB2b2lkIGliX2RldmljZV9yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CiYjNDM7dm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7dm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZCk7CiAKIGludCBpYl9yZG1hY2dfdHJ5X2NoYXJnZShzdHJ1Y3QgaWJfcmRtYWNnX29iamVjdCAqY2dfb2JqLAogCQkJIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKQEAgLTE3Myw2ICYjNDM7MTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogewogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKJiM0MzsJCQkJCQkgc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiYjNDM7CQkJCQkJICAgICBib29sIHNoYXJlZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaiwKIAkJCQkgICAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAogCQkJCSAgICAgICBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KQpAQCAtMzU2LDcgJiM0MzszNjgsOCBAQCB2b2lkIGliX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRfZ3JvdXBzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydF9udW0sCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTsKIAogaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpOwomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IGI4MTkzZTA3N2E3NDZmLi5jZmZiMGRlMWMwMDE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKQEAgLTEyOSw3ICYjNDM7MTI5LDcgQEAgc3RhdGljIERFQ0xBUkVfUldTRU0ocmRtYV9uZXRzX3J3c2VtKTsKIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0bnNfbW9kZSwKLQkJICYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkmIzM0Oyk7CiYjNDM7CQkgJiMzNDtTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKS4gSW4gZXhjbHVzaXZlIG1vZGUgZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgcGVyIG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiAvKioKICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkCiAgKgkJCSAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC4KQEAgLTI2OCw3ICYjNDM7MjY4LDggQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpYmRldl9sc21fbmIgPSB7CiB9OwogCiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCi0JCQkJIHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7CiAKIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovCiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7CkBAIC0zNTEsMTMgJiM0MzszNTIsMTUgQEAgdm9pZCBpYl9kZXZpY2VfcHV0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIH0KIEVYUE9SVF9TWU1CT0woaWJfZGV2aWNlX3B1dCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAl4YV9mb3JfZWFjaCAoJmFtcDtkZXZpY2VzLCBpbmRleCwgZGV2aWNlKQotCQlpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiYjNDM7CQlpZiAocmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiAJCQlyZXR1cm4gZGV2aWNlOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0zOTUsNyAmIzQzOzM5OCw3IEBAIGludCBpYl9kZXZpY2VfcmVuYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHsKJiM0MzsJaWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7CiAJCXVwX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiAJCXJldHVybiAtRUVYSVNUOwogCX0KQEAgLTQzNSw3ICYjNDM7NDM4LDEzIEBAIGludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQomIzQzOy8qCiYjNDM7ICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAmIzM5OyVkJiMzOTsgc3R5bGUgQG5hbWUgcGF0dGVybiB3aXRoaW4gbmV0IG5hbWVzcGFjZQomIzQzOyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHMKJiM0MzsgKiB0aGUgZmluYWwgdW5pcXVlIGRldmljZSBuYW1lIGZyb20gdGhlIHJldHVybmVkIGluZGV4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpza2lwKQogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwpAQCAtNDQ4LDYgJiM0Mzs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiAJeGFfZm9yX2VhY2ggKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldmljZSkgewogCQljaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdOwogCiYjNDM7CQlpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChzc2NhbmYoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiksIG5hbWUsICZhbXA7aSkgIT0gMSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSAmbHQ7IDAgfHwgaSAmZ3Q7PSBJTlRfTUFYKQpAQCAtNDYyLDE1ICYjNDM7NDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKIAl9CiAKIAlyYyA9IGlkYV9hbGxvYygmYW1wO2ludXNlLCBHRlBfS0VSTkVMKTsKLQlpZiAocmMgJmx0OyAwKQotCQlnb3RvIG91dDsKLQotCXJjID0gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgcmMpOwogb3V0OgogCWlkYV9kZXN0cm95KCZhbXA7aW51c2UpOwogCXJldHVybiByYzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBpZDsKJiM0MzsKJiM0MzsJaWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpOwomIzQzOwlpZiAoaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGlkOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwpAQCAtMTA5NCw2ICYjNDM7MTExNyw3IEBAIHN0YXRpYyBpbnQgYWRkX2FsbF9jb21wYXRfZGV2cyh2b2lkKQogaW50IHJkbWFfY29tcGF0ZGV2X3NldCh1OCBlbmFibGUpCiB7CiAJc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldDsKJiM0MzsJc3RydWN0IGliX2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKQEAgLTExMTYsNiAmIzQzOzExNDAsMTIgQEAgaW50IHJkbWFfY29tcGF0ZGV2X3NldCh1OCBlbmFibGUpCiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FQlVTWTsKIAomIzQzOwkvKiBLZWVwIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UmIzM5O3MgcmRtYSBjZ3JvdXAgdmlzaWJpbGl0eSBpbiBzeW5jLiAqLwomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJeGFfZm9yX2VhY2hfbWFya2VkKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldiwgREVWSUNFX1JFR0lTVEVSRUQpCiYjNDM7CQlpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoZGV2LCBlbmFibGUpOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CiAJaWYgKGVuYWJsZSkKIAkJcmV0ID0gYWRkX2FsbF9jb21wYXRfZGV2cygpOwogCWVsc2UKQEAgLTExNTEsOCAmIzQzOzExODEsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCiAJCS8qCiAJCSAqIElmIHRoZSByZWFsIGRldmljZSBpcyBpbiB0aGUgTlMgdGhlbiBtb3ZlIGl0IGJhY2sgdG8gaW5pdC4KJiM0MzsJCSAqIFByb3ZpZGUgYSBmYWxsYmFjayBwYXR0ZXJuIHNvIGEgbmFtZSBjb25mbGljdCBpbiBpbml0X25ldAomIzQzOwkJICogY2Fubm90IG1ha2UgdGhlIHRlYXJkb3duIG1vdmUgZmFpbC4KIAkJICovCi0JCXJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgJmFtcDtpbml0X25ldCk7CiYjNDM7CQlpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KCZhbXA7ZGV2LSZndDtjb3JlZGV2LnJkbWFfbmV0KSkpIHsKJiM0MzsJCQlyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsICZhbXA7aW5pdF9uZXQsCiYjNDM7CQkJCQkJICAgIE5VTEwsICYjMzQ7aWJkZXYlZCYjMzQ7KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlXQVJOKDEsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgICAgZGV2X25hbWUoJmFtcDtkZXYtJmd0O2RldiksIHJldCk7CiYjNDM7CQl9CiAKIAkJcHV0X2RldmljZSgmYW1wO2Rldi0mZ3Q7ZGV2KTsKIAkJZG93bl9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7CkBAIC0xMjA2LDcgJiM0MzsxMjQ1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHJkbWFfZGV2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIH0KIAogLyoKLSAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoaXMgaXMKJiM0MzsgKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGUgZGV2aWNlCiYjNDM7ICogbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBuZXQgbmFtZXNwYWNlIHRoZSBkZXZpY2UgaXMgYXNzaWduZWQgdG8uIFRoaXMgaXMKICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS4KICAqLwogc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xMjIzLDcgJiM0MzsxMjYzLDggQEAgc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpCiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldikpKSB7CiYjNDM7CWlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSwKJiM0MzsJCQkJICAgIHJkbWFfZGV2X25ldChkZXZpY2UpKSkgewogCQlyZXQgPSAtRU5GSUxFOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzIyLDYgJiM0MzsxMzYzLDcgQEAgc3RhdGljIGludCBlbmFibGVfZGV2aWNlX2FuZF9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogCSAqLwogCXJlZmNvdW50X3NldCgmYW1wO2RldmljZS0mZ3Q7cmVmY291bnQsIDIpOwogCWRvd25fd3JpdGUoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJaWJfZGV2aWNlX3JkbWFjZ19zZXRfbmV0bnNfc2hhcmVkKGRldmljZSwgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpOwogCXhhX3NldF9tYXJrKCZhbXA7ZGV2aWNlcywgZGV2aWNlLSZndDtpbmRleCwgREVWSUNFX1JFR0lTVEVSRUQpOwogCiAJLyoKQEAgLTEzODgsOCAmIzQzOzE0MzAsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIC8qKgogICogaWJfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgYW4gSUIgZGV2aWNlIHdpdGggSUIgY29yZQogICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyCi0gKiBAbmFtZTogdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZS4gVGhpcyBtYXkgaW5jbHVkZSBhICYjMzk7JSYjMzk7IHdoaWNoIHdpbGwKLSAqIAkgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuCiYjNDM7ICogQG5hbWU6IGRldmljZSBuYW1lLCB1bmlxdWUgd2l0aGluIHRoZSBkZXZpY2UmIzM5O3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXkKJiM0MzsgKgkgIGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZQomIzQzOyAqCSAgcGFzc2VkIGRldmljZSBuYW1lLgogICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQgogICoJICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxlciBzaG91bGQgZnVsbHkKICAqCQlzZXR1cCB0aGUgaWJkZXYgZm9yIERNQS4gVGhpcyB1c3VhbGx5IG1lYW5zIHVzaW5nIGRtYV92aXJ0X29wcy4KQEAgLTE2NzAsMTQgJiM0MzsxNzEzLDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldikKIH0KIEVYUE9SVF9TWU1CT0woaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKTsKIAomIzQzO3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LAomIzQzOwkJCQkgICBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldmljZSkKJiM0MzsJCWlmIChkZXZpY2UgIT0gc2tpcCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaG9vc2UgdGhlIG5hbWUgQGRldmljZSBzaG91bGQgdXNlIGluIG5ldCBuYW1lc3BhY2UgQG5ldC4gQHJlcXVlc3RlZF9uYW1lCiYjNDM7ICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWUKJiM0MzsgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJiMzOTslZCYjMzk7IEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlCiYjNDM7ICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LAomIzQzOwkJCQkgICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuLAomIzQzOwkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKipuZXdfbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBpZDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwomIzQzOwlpZiAocmVxdWVzdGVkX25hbWUpIHsKJiM0MzsJCWlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7CiYjNDM7CQkJKm5ld19uYW1lID0gcmVxdWVzdGVkX25hbWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKSkgewomIzQzOwkJKm5ld19uYW1lID0gZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZhbGxiYWNrX3BhdHRlcm4pCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBidWZfbGVuLCAmIzM0O2liZGV2JXUmIzM0OywgZGV2aWNlLSZndDtpbmRleCk7CiYjNDM7CWlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkgewomIzQzOwkJKm5ld19uYW1lID0gYnVmOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpOwomIzQzOwlpZiAoaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGlkOwomIzQzOwlzbnByaW50ZihidWYsIGJ1Zl9sZW4sIGZhbGxiYWNrX3BhdHRlcm4sIGlkKTsKJiM0MzsJKm5ld19uYW1lID0gYnVmOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgogICogVGhlIGNhbGxlciBtdXN0IHBhc3MgaW4gYSBkZXZpY2UgdGhhdCBoYXMgdGhlIGtyZWYgaGVsZCBhbmQgdGhlIHJlZmNvdW50CiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWQKICAqIGludG8gbmV0LgomIzQzOyAqCiYjNDM7ICogTmFtaW5nIHJ1bGVzIGFyZSBoYW5kbGVkIGJ5IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSgpLgogICovCiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCi0JCQkJIHN0cnVjdCBuZXQgKm5ldCkKJiM0MzsJCQkJIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsCiYjNDM7CQkJCSBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKQogewomIzQzOwljaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdOwomIzQzOwljb25zdCBjaGFyICpuZXdfbmFtZTsKIAlpbnQgcmV0MiA9IC1FSU5WQUw7CiAJaW50IHJldDsKIApAQCAtMTY5NCwzMCAmIzQzOzE4MDYsNjggQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKCFmYWxsYmFja19wYXR0ZXJuKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZwomIzQzOwkJICogZG93biwgc28gYSBkb29tZWQgdXNlciBtb3ZlIGRvZXMgbm90IGRpc2FibGUgYSBsaXZlIGRldmljZS4KJiM0MzsJCSAqLwomIzQzOwkJZG93bl93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwkJcmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSwKJiM0MzsJCQkJCSAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsCiYjNDM7CQkJCQkgICAgICAgc2l6ZW9mKGJ1ZiksICZhbXA7bmV3X25hbWUpOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAlrb2JqZWN0X3VldmVudCgmYW1wO2RldmljZS0mZ3Q7ZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlkaXNhYmxlX2RldmljZShkZXZpY2UpOwogCiAJLyoKLQkgKiBBdCB0aGlzIHBvaW50IG5vIG9uZSBjYW4gYmUgdXNpbmcgdGhlIGRldmljZSwgc28gaXQgaXMgc2FmZSB0bwotCSAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLgomIzQzOwkgKiBSZWNvbXB1dGUgdGhlIGRlc3RpbmF0aW9uIG5hbWUgdW5kZXIgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbQomIzQzOwkgKiBub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGRpc2FibGVkLCBjbG9zaW5nIHJhY2VzIHdpdGggYSBjb25jdXJyZW50CiYjNDM7CSAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnMKJiM0MzsJICogbGV2ZWwuCiAJICovCi0Jd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgbmV0KTsKJiM0MzsJZG93bl93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwlyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLCBzaXplb2YoYnVmKSwKJiM0MzsJCQkJICAgICAgICZhbXA7bmV3X25hbWUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAoZmFsbGJhY2tfcGF0dGVybikgewomIzQzOwkJCVdBUk4oMSwKJiM0MzsJCQkgICAgICYjMzQ7JXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgIF9fZnVuY19fLCByZXQpOwomIzQzOwkJCXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NvcmVkZXYucmRtYV9uZXQsIG5ldCk7CiYjNDM7CQkJaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpOwomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIHJlbmFtZV9kb25lOwomIzQzOwl9CiAKLQlkb3duX3JlYWQoJmFtcDtkZXZpY2VzX3J3c2VtKTsKLQkvKgotCSAqIEN1cnJlbnRseSByZG1hIGRldmljZXMgYXJlIHN5c3RlbSB3aWRlIHVuaXF1ZS4gU28gdGhlIGRldmljZSBuYW1lCi0JICogaXMgZ3VhcmFudGVlZCBmcmVlIGluIHRoZSBuZXcgbmFtZXNwYWNlLiBQdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlCi0JICogYXQgdGhlIHN5c2ZzIGxldmVsLgotCSAqLwotCXJldCA9IGRldmljZV9yZW5hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiwgZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldikpOwotCXVwX3JlYWQoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgbmV0KTsKJiM0MzsJaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpOwomIzQzOwlyZXQgPSBkZXZpY2VfcmVuYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYsIG5ld19uYW1lKTsKIAlpZiAocmV0KSB7Ci0JCWRldl93YXJuKCZhbXA7ZGV2aWNlLSZndDtkZXYsCi0JCQkgJiMzNDslczogQ291bGRuJiMzOTt0IHJlbmFtZSBkZXZpY2UgYWZ0ZXIgbmFtZXNwYWNlIGNoYW5nZVxuJiMzNDssCi0JCQkgX19mdW5jX18pOwotCQkvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi8KLQkJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgY3VyX25ldCk7CiYjNDM7CQlpZiAoZmFsbGJhY2tfcGF0dGVybikgewomIzQzOwkJCVdBUk4oMSwKJiM0MzsJCQkgICAgICYjMzQ7JXM6IGZhaWxlZCB0byByZW5hbWUgZGV2aWNlIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgIF9fZnVuY19fLCByZXQpOwomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWRldl93YXJuKCZhbXA7ZGV2aWNlLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXG4mIzM0OywKJiM0MzsJCQkJIF9fZnVuY19fKTsKJiM0MzsJCQkvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi8KJiM0MzsJCQl3cml0ZV9wbmV0KCZhbXA7ZGV2aWNlLSZndDtjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTsKJiM0MzsJCQlpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIGN1cl9uZXQpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Ryc2NweShkZXZpY2UtJmd0O25hbWUsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpLAomIzQzOwkJCUlCX0RFVklDRV9OQU1FX01BWCk7CiAJfQomIzQzO3JlbmFtZV9kb25lOgomIzQzOwl1cF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwogCiAJcmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpOwogCWlmIChyZXQyKSB7CkBAIC0xNzQwLDM2ICYjNDM7MTg5MCw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCiB9CiAKIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKQomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgcmV0OwogCiAJbmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7CiAJaWYgKElTX0VSUihuZXQpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0IG5hbWVzcGFjZSBmZCYjMzQ7KTsKIAkJcmV0ID0gUFRSX0VSUihuZXQpOwogCQlnb3RvIG5ldF9lcnI7CiAJfQogCiAJaWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZSYjMzQ7KTsKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIG5zX2VycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhCiYjNDM7CSAqIHN1cHBsaWVkIG5hbWUgc3RpbGwgcmVuYW1lcyBpdCBpbiBwbGFjZS4KJiM0MzsJICovCiYjNDM7CWlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoJmFtcDtkZXYtJmd0O2NvcmVkZXYucmRtYV9uZXQpKSkgewomIzQzOwkJcmV0ID0gbmFtZSA/IGliX2RldmljZV9yZW5hbWUoZGV2LCBuYW1lKSA6IDA7CiYjNDM7CiYjNDM7CQlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtVbmFibGUgdG8gdXNlIHJlcXVlc3RlZCBkZXZpY2UgbmFtZSBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQlnb3RvIG5zX2VycjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogQWxsIHRoZSBpYl9jbGllbnRzLCBpbmNsdWRpbmcgdXZlcmJzLCBhcmUgcmVzZXQgd2hlbiB0aGUgbmFtZXNwYWNlIGlzCiAJICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG8KIAkgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS4KIAkgKi8KLQlpZiAoIWRldi0mZ3Q7b3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykgewomIzQzOwlpZiAoaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGUmIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gbnNfZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlIGNoYW5nZXMgKG5vIGRpc2Fzc29jaWF0ZSBzdXBwb3J0KSYjMzQ7KTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gbnNfZXJyOwogCX0KIAogCWdldF9kZXZpY2UoJmFtcDtkZXYtJmd0O2Rldik7CiAJaWJfZGV2aWNlX3B1dChkZXYpOwotCXJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9ucywgbmV0KTsKJiM0MzsJcmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC0mZ3Q7bnNwcm94eS0mZ3Q7bmV0X25zLCBuZXQsIG5hbWUsCiYjNDM7CQkJCSAgICBOVUxMKTsKIAlwdXRfZGV2aWNlKCZhbXA7ZGV2LSZndDtkZXYpOwomIzQzOwlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwogCiAJcHV0X25ldChuZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwppbmRleCBmNTk5YzI0YjM0ZTgxYi4uNDczYmY5NjY3ZjgzZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwpAQCAtMTE3Nyw2ICYjNDM7MTE3NywyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7CiYjNDM7CQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwomIzQzOwkJdTMyIG5zX2ZkOwomIzQzOwomIzQzOwkJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHsKJiM0MzsJCQlubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLAomIzQzOwkJCQkgICAgSUJfREVWSUNFX05BTUVfTUFYKTsKJiM0MzsJCQlpZiAoc3RybGVuKG5hbWUpID09IDApIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBkb25lOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCW5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTsKJiM0MzsJCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCwKJiM0MzsJCQkJCSAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTsKJiM0MzsJCWdvdG8gcHV0X2RvbmU7CiYjNDM7CX0KJiM0MzsKIAlpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkgewogCQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwogCkBAIC0xMTkwLDE0ICYjNDM7MTIwOCw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7Ci0JCXUzMiBuc19mZDsKLQotCQluc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7Ci0JCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7Ci0JCWdvdG8gcHV0X2RvbmU7Ci0JfQotCiAJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkgewogCQl1OCB1c2VfZGltOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwppbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwpAQCAtNzAwLDYgJiM0Mzs3MDAsMTIgQEAgaW50IGliX21hZF9hZ2VudF9zZWN1cml0eV9zZXR1cChzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCwKIAlpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbAomIzQzOwkgKiBwb2xpY3kuIElmIGRldmljZXMgaW4gZGlmZmVyZW50IG5ldCBuYW1lc3BhY2VzIHNoYXJlIGEgbmFtZSwgdGhleSBnZXQKJiM0MzsJICogdGhlIHNhbWUgbGFiZWw7IGRpc3Rpbmd1aXNoaW5nIHRoZW0gd291bGQgbmVlZCBuZXQgbmFtZXNwYWNlIHN1cHBvcnQKJiM0MzsJICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy4KJiM0MzsJICovCiAJc3Bpbl9sb2NrKCZhbXA7bWFkX2FnZW50X2xpc3RfbG9jayk7CiAJcmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LSZndDtzZWN1cml0eSwKIAkJCQkJCWRldl9uYW1lKCZhbXA7YWdlbnQtJmd0O2RldmljZS0mZ3Q7ZGV2KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCmluZGV4IDFlYzEzMGZlZThlYTdhLi42ZWIxMGQyZjA2NTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCkBAIC0yNDAsNiAmIzQzOzI0MCwxMCBAQCBzdGF0aWMgdm9pZCByeGVfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpCiAJCXJ4ZV9lcnJfdWModWMsICYjMzQ7Y2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXG4mIzM0OywgZXJyKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiAvKiBwZCAqLwogc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewpAQCAtMTQ3OCw2ICYjNDM7MTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHsKIAkuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsCiAJLmRldGFjaF9tY2FzdCA9IHJ4ZV9kZXRhY2hfbWNhc3QsCiAJLmRldmljZV9ncm91cCA9ICZhbXA7cnhlX2F0dHJfZ3JvdXAsCiYjNDM7CS5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LAogCS5lbmFibGVfZHJpdmVyID0gcnhlX2VuYWJsZV9kcml2ZXIsCiAJLmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tciwKIAkuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggYWNiZDc4N2RlMjY1YjUuLmEwNzBmY2Y4NmU4YTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMzE4OSwxMCAmIzQzOzMxODksMjQgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdOwogCiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7CiAKJiM0MzsvKgomIzQzOyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYgomIzQzOyAqIGRldmljZSYjMzk7cyBuZXQgbmFtZXNwYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LSZndDtzcnBfZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gbmV0ID8gdG9fbnNfY29tbW9uKG5ldCkgOiBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0gewogCS5uYW1lICAgID0gJiMzNDtpbmZpbmliYW5kX3NycCYjMzQ7LAogCS5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3VwcywKLQkuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXYKJiM0MzsJLmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LAomIzQzOwkubnNfdHlwZSA9ICZhbXA7bmV0X25zX3R5cGVfb3BlcmF0aW9ucywKJiM0MzsJLm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjcxMTcwY2IwZTE5ZTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNkZWZpbmUgX0NHUk9VUF9SRE1BX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nncm91cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0X25hbWVzcGFjZS5oJmd0OwogCiBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHsKIAlSRE1BQ0dfUkVTT1VSQ0VfSENBX0hBTkRMRSwKQEAgLTM0LDYgJiM0MzszNSwxNSBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJwb29sczsKIAljaGFyCQkJKm5hbWU7CiYjNDM7CS8qCiYjNDM7CSAqIE5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBiZWxvbmdzIHRvLiBAbmV0bnNfc2hhcmVkIG1pcnJvcnMKJiM0MzsJICogaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM6IHdoZW4gdHJ1ZSB0aGUgZGV2aWNlIGlzIHZpc2libGUgZnJvbSBldmVyeQomIzQzOwkgKiBuZXQgbmFtZXNwYWNlIChzaGFyZWQgbW9kZSk7IG90aGVyd2lzZSBAbmV0IGlzIHRoZSBvbmx5IG5hbWVzcGFjZQomIzQzOwkgKiB0aGF0IG1heSBzZWUgYW5kIGNvbmZpZ3VyZSBpdC4gQG5ldG5zX3NoYXJlZCBpcyB1cGRhdGVkIHdoZW4gdGhlCiYjNDM7CSAqIHNoYXJpbmcgbW9kZSBjaGFuZ2VzLCBzbyB1c2Uge1JFQUQsV1JJVEV9X09OQ0UoKSB0byBhY2Nlc3MgaXQuCiYjNDM7CSAqLwomIzQzOwlwb3NzaWJsZV9uZXRfdAkJbmV0OwomIzQzOwlib29sCQkJbmV0bnNfc2hhcmVkOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmgKaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaApAQCAtNTE2LDcgJiM0Mzs1MTYsMTAgQEAgZW51bSByZG1hX25sZGV2X2F0dHIgewogCVJETUFfTkxERVZfQVRUUl9ERVZfUFJPVE9DT0wsCQkvKiBzdHJpbmcgKi8KIAogCS8qCi0JICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QKJiM0MzsJICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QuIE1heSBiZSBjb21iaW5lZAomIzQzOwkgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZQomIzQzOwkgKiB0aGUgZGV2aWNlIGluIHRoZSBkZXN0aW5hdGlvbiBuYW1lc3BhY2U7IHRoZSBtb3ZlIGZhaWxzIHdpdGggLUVFWElTVAomIzQzOwkgKiBpZiB0aGF0IG5hbWUgaXMgYWxyZWFkeSB0YWtlbiB0aGVyZS4KIAkgKi8KIAlSRE1BX05MREVWX05FVF9OU19GRCwJCQkvKiB1MzIgKi8KIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9yZG1hLmMgYi9rZXJuZWwvY2dyb3VwL3JkbWEuYwppbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCkBAIC0xNSw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nncm91cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhcnNlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nncm91cF9yZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25zcHJveHkuaCZndDsKIAogI2RlZmluZSBSRE1BQ0dfTUFYX1NUUiAmIzM0O21heCYjMzQ7CiAKQEAgLTQ2NCw2ICYjNDM7NDY1LDEzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpCiB9CiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7CiAKJiM0MzsvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovCiYjNDM7c3RhdGljIGJvb2wgcmRtYWNnX2RldmljZV92aXNpYmxlKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKGRldmljZS0mZ3Q7bmV0bnNfc2hhcmVkKSB8fAomIzQzOwkgICAgICAgbmV0X2VxKHJlYWRfcG5ldCgmYW1wO2RldmljZS0mZ3Q7bmV0KSwgY3VycmVudC0mZ3Q7bnNwcm94eS0mZ3Q7bmV0X25zKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7CkBAIC00NzEsNyAmIzQzOzQ3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkbWFjZ19tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpCi0JCWlmICghc3RyY21wKG5hbWUsIGRldmljZS0mZ3Q7bmFtZSkpCiYjNDM7CQlpZiAocmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLSZndDtuYW1lKSkKIAkJCXJldHVybiBkZXZpY2U7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTYyNiw2ICYjNDM7NjM1LDkgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KQogCW11dGV4X2xvY2soJmFtcDtyZG1hY2dfbXV0ZXgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsICZhbXA7cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7CiYjNDM7CQlpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzICYjMzQ7LCBkZXZpY2UtJmd0O25hbWUpOwogCiAJCXJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7CkBAIC02NDgsNiAmIzQzOzY2MCw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJbXV0ZXhfbG9jaygmYW1wO3JkbWFjZ19tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKJiM0MzsJCWlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7CiAKIAkJc2VxX3ByaW50ZihzZiwgJiMzNDslcyAmIzM0OywgZGV2aWNlLSZndDtuYW1lKTsKQEAgLTY3Nyw2ICYjNDM7NjkyLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIAltdXRleF9sb2NrKCZhbXA7cmRtYWNnX211dGV4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCAmYW1wO3JkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkgewomIzQzOwkJaWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJcnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTsKIAogCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzICYjMzQ7LCBkZXZpY2UtJmd0O25hbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcG5ldC5jIGIvbmV0L3NtYy9zbWNfcG5ldC5jCmluZGV4IDYzZTI4NmUyZGZhYThkLi5mZjljOWMzNWNjMmY1YiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3BuZXQuYwpAQCAtMzA0LDEzICYjNDM7MzA0LDE4IEBAIHN0YXRpYyBib29sIHNtY19wbmV0aWRfdmFsaWQoY29uc3QgY2hhciAqcG5ldF9uYW1lLCBjaGFyICpwbmV0aWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihjaGFyICppYl9uYW1lKQomIzQzOy8qCiYjNDM7ICogRmluZCBhbiBpbmZpbmliYW5kIGRldmljZSBieSBhIGdpdmVuIG5hbWUsIHJlc3RyaWN0ZWQgdG8gdGhlIGRldmljZXMKJiM0MzsgKiBhY2Nlc3NpYmxlIGZyb20gQG5ldC4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWJfbmFtZSkKIHsKIAlzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXY7CiAKIAltdXRleF9sb2NrKCZhbXA7c21jX2liX2RldmljZXMubXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWJkZXYsICZhbXA7c21jX2liX2RldmljZXMubGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoaWJkZXYtJmd0O2liZGV2LCBuZXQpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cm5jbXAoaWJkZXYtJmd0O2liZGV2LSZndDtuYW1lLCBpYl9uYW1lLAogCQkJICAgICBzaXplb2YoaWJkZXYtJmd0O2liZGV2LSZndDtuYW1lKSkgfHwKIAkJICAgIChpYmRldi0mZ3Q7aWJkZXYtJmd0O2Rldi5wYXJlbnQgJmFtcDsmYW1wOwpAQCAtNDA4LDggJiM0Mzs0MTMsOCBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9ldGgoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSwKLQkJCSAgIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSkKJiM0MztzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJICAgY2hhciAqaWJfbmFtZSwgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKQogewogCXN0cnVjdCBzbWNfcG5ldGVudHJ5ICp0bXBfcGUsICpuZXdfcGU7CiAJc3RydWN0IHNtY19pYl9kZXZpY2UgKmliX2RldjsKQEAgLTQxOSw3ICYjNDM7NDI0LDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSwKIAlib29sIG5ld19pYmRldjsKIAogCS8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovCi0JaWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihpYl9uYW1lKTsKJiM0MzsJaWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihuZXQsIGliX25hbWUpOwogCWlmIChpYl9kZXYpIHsKIAkJaWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTsKIAkJaWYgKGliZGV2X2FwcGxpZWQpCkBAIC01MTgsNyAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZW50ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdKQogCQkJaWYgKGlicG9ydCAmbHQ7IDEgfHwgaWJwb3J0ICZndDsgU01DX01BWF9QT1JUUykKIAkJCQlnb3RvIGVycm9yOwogCQl9Ci0JCXJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7CiYjNDM7CQlyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7CiAJCWlmICghcmMpCiAJCQluZXdfaWJkZXYgPSB0cnVlOwogCQllbHNlIGlmIChyYyAhPSAtRUVYSVNUKQpAQCAtMTE3MCw2ICYjNDM7MTE3NSw5IEBAIGludCBzbWNfcG5ldGlkX2J5X3RhYmxlX2liKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJfcG9ydCkKIAlzdHJ1Y3Qgc21jX25ldCAqc247CiAJaW50IHJjID0gLUVOT0VOVDsKIAomIzQzOwlpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhzbWNpYmRldi0mZ3Q7aWJkZXYsICZhbXA7aW5pdF9uZXQpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJLyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi8KIAlzbiA9IG5ldF9nZW5lcmljKCZhbXA7aW5pdF9uZXQsIHNtY19uZXRfaWQpOwogCXBuZXR0YWJsZSA9ICZhbXA7c24tJmd0O3BuZXR0YWJsZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlCmluZGV4IDA3YWY3ZjE1YzFiZjc0Li5hOTFjMTRjNDUwMDZlMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlCkBAIC0zLDYgJiM0MzszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcCiAJCXJ4ZV9pcHY2LnNoIFwKIAkJcnhlX3NvY2tldF93aXRoX25ldG5zLnNoIFwKIAkJcnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXAotCQlyeGVfc2VudF9yY3ZkX2J5dGVzLnNoCiYjNDM7CQlyeGVfc2VudF9yY3ZkX2J5dGVzLnNoIFwKJiM0MzsJCXJ4ZV9uZXRuc19uYW1lcy5zaAogCiBpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZwppbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnCkBAIC0xLDMgJiM0MzsxLDUgQEAKIENPTkZJR19UVU4KIENPTkZJR19WRVRICiYjNDM7Q09ORklHX0RVTU1ZCiYjNDM7Q09ORklHX05FVF9OUwogQ09ORklHX1JETUFfUlhFCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hN2U1NzcwNmZkZmY3NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoCkBAIC0wLDAgJiM0MzsxLDI4MiBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIEV4ZXJjaXNlIFJETUEgZGV2aWNlIG5hbWUgaGFuZGxpbmcgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy4KJiM0MzsKJiM0Mztzb3VyY2UgJiMzNDskKGRpcm5hbWUgJiMzNDskMCYjMzQ7KS8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoJiMzNDsKJiM0MzsKJiM0MztOQU1FX1BSRUZJWD0mIzM0O3J4ZV9uZXRuc19uYW1lc18kJCYjMzQ7CiYjNDM7TkVUREVWX1BSRUZJWD0mIzM0O3J4biQkJiMzNDsKJiM0MztOUzE9JiMzNDske05BTUVfUFJFRklYfW5zMSYjMzQ7CiYjNDM7TlMyPSYjMzQ7JHtOQU1FX1BSRUZJWH1uczImIzM0OwomIzQzO1JYRV9BPSYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfYSYjMzQ7CiYjNDM7UlhFX0I9JiMzNDske05BTUVfUFJFRklYfXJ4ZV9iJiMzNDsKJiM0MztSWEVfU0FNRT0mIzM0OyR7TkFNRV9QUkVGSVh9cnhlX3NhbWUmIzM0OwomIzQzO1JYRV9ORVc9JiMzNDske05BTUVfUFJFRklYfXJ4ZV9uZXcmIzM0OwomIzQzO0RVTU1ZX0E9JiMzNDske05FVERFVl9QUkVGSVh9YSYjMzQ7CiYjNDM7RFVNTVlfQj0mIzM0OyR7TkVUREVWX1BSRUZJWH1iJiMzNDsKJiM0MztPTERfTU9ERT0mIzM0OyYjMzQ7CiYjNDM7TU9ERV9DSEFOR0VEPTAKJiM0MztNT0RTPSgmIzM0O2R1bW15JiMzNDsgJiMzNDtyZG1hX3J4ZSYjMzQ7KQomIzQzO1RFU1RfU0FNRV9OQU1FUz0mIzM0O3NhbWUgUkRNQSBkZXZpY2UgbmFtZSBjYW4gZXhpc3QgaW4gdHdvIG5ldCBuYW1lc3BhY2VzJiMzNDsKJiM0MztURVNUX01PVkVfQ09ORkxJQ1Q9JiMzNDttb3ZlIHdpdGhvdXQgcmVuYW1lIGZhaWxzIG9uIGRlc3RpbmF0aW9uIG5hbWUgY29uZmxpY3QmIzM0OwomIzQzO1RFU1RfTU9WRV9SRU5BTUU9JiMzNDttb3ZlIHRoZW4gcmVuYW1lIHN1Y2NlZWRzJiMzNDsKJiM0MztURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FPSYjMzQ7bW92ZSB3aXRoIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBuYW1lIHN1Y2NlZWRzJiMzNDsKJiM0MztURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRT0mIzM0O3NhbWUtbmV0bnMgcmVuYW1lIHJlamVjdHMgZHVwbGljYXRlIG5hbWUmIzM0OwomIzQzO1RFU1RfVEVBUkRPV05fUkVUVVJOPSYjMzQ7bmV0bnMgZGVsZXRlIHJldHVybnMgZGV2aWNlIHRvIGluaXRfbmV0IGFuZCByZW5hbWVzIG9uIGNvbmZsaWN0JiMzNDsKJiM0MzsKJiM0Mztrc2Z0X3NraXAoKQomIzQzO3sKJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0OyQqJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztmYWlsKCkKJiM0Mzt7CiYjNDM7CWt0YXBfZXhpdF9mYWlsX21zZyAmIzM0OyQqJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7bmVlZF9jbWQoKQomIzQzO3sKJiM0MzsJY29tbWFuZCAtdiAmIzM0OyQxJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fCBrc2Z0X3NraXAgJiMzNDttaXNzaW5nIGNvbW1hbmQ6ICQxJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9ucygpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMQomIzQzOwomIzQzOwlzaGlmdAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgcmRtYSAmIzM0OyRAJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9kZXZfZXhpc3RzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSQxCiYjNDM7CWxvY2FsIGRldj0kMgomIzQzOwomIzQzOwlpZiBbIC1uICYjMzQ7JG5zJiMzNDsgXTsgdGhlbgomIzQzOwkJcmRtYV9ucyAmIzM0OyRucyYjMzQ7IGRldiBzaG93ICYjMzQ7JGRldiYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJZWxzZQomIzQzOwkJcmRtYSBkZXYgc2hvdyAmIzM0OyRkZXYmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO2FkZF9kdW1teSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuZXRkZXY9JDEKJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgJiMzNDskbmV0ZGV2JiMzNDsgdHlwZSBkdW1teSB8fCByZXR1cm4gMQomIzQzOwlpcCBsaW5rIHNldCAmIzM0OyRuZXRkZXYmIzM0OyB1cCB8fCByZXR1cm4gMQomIzQzO30KJiM0MzsKJiM0MzthZGRfcnhlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIGRldj0kMQomIzQzOwlsb2NhbCBuZXRkZXY9JDIKJiM0MzsKJiM0MzsJcmRtYSBsaW5rIGFkZCAmIzM0OyRkZXYmIzM0OyB0eXBlIHJ4ZSBuZXRkZXYgJiMzNDskbmV0ZGV2JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9kZXZfb25fbmV0ZGV2KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5ldGRldj0kMQomIzQzOwomIzQzOwlyZG1hIGxpbmsgc2hvdyAyJmd0Oy9kZXYvbnVsbCB8IGF3ayAtdiB3YW50PSYjMzQ7JG5ldGRldiYjMzQ7ICYjMzk7CiYjNDM7CQl7CiYjNDM7CQkJZm9yIChpID0gMTsgaSAmbHQ7IE5GOyBpJiM0MzsmIzQzOykKJiM0MzsJCQkJaWYgKCRpID09ICYjMzQ7bmV0ZGV2JiMzNDsgJmFtcDsmYW1wOyAkKGkgJiM0MzsgMSkgPT0gd2FudCkgewomIzQzOwkJCQkJZGV2ID0gJDIKJiM0MzsJCQkJCXN1YigvXC8uKi8sICYjMzQ7JiMzNDssIGRldikKJiM0MzsJCQkJCXByaW50IGRldgomIzQzOwkJCQkJZXhpdAomIzQzOwkJCQl9CiYjNDM7CQl9JiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7d2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmV0ZGV2PSQxCiYjNDM7CWxvY2FsIGRldgomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJZGV2PSQocmRtYV9kZXZfb25fbmV0ZGV2ICYjMzQ7JG5ldGRldiYjMzQ7KQomIzQzOwkJaWYgWyAtbiAmIzM0OyRkZXYmIzM0OyBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0OyRkZXYmIzM0OwomIzQzOwkJCXJldHVybiAwCiYjNDM7CQlmaQomIzQzOwkJc2xlZXAgMC4xCiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJcmV0dXJuIDEKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfZGV2cygpCiYjNDM7ewomIzQzOwljbGVhbnVwX2RldnMKJiM0MzsKJiM0MzsJYWRkX2R1bW15ICYjMzQ7JERVTU1ZX0EmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlhZGRfZHVtbXkgJiMzNDskRFVNTVlfQiYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWFkZF9yeGUgJiMzNDskUlhFX0EmIzM0OyAmIzM0OyREVU1NWV9BJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJYWRkX3J4ZSAmIzM0OyRSWEVfQiYjMzQ7ICYjMzQ7JERVTU1ZX0ImIzM0OyB8fCByZXR1cm4gMQomIzQzO30KJiM0MzsKJiM0MztjbGVhbnVwX2RldnMoKQomIzQzO3sKJiM0MzsJaXAgbGluayBkZWwgJiMzNDskRFVNTVlfQSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIGxpbmsgZGVsICYjMzQ7JERVTU1ZX0ImIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0MztzZXR1cCgpCiYjNDM7ewomIzQzOwlPTERfTU9ERT0kKHJkbWEgc3lzdGVtIHNob3cgMiZndDsvZGV2L251bGwgfAomIzQzOwkJICAgc2VkIC1uICYjMzk7cy8uKm5ldG5zIFwoW14gXSpcKS4qL1wxL3AmIzM5OykKJiM0MzsJWyAtbiAmIzM0OyRPTERfTU9ERSYjMzQ7IF0gfHwga3NmdF9za2lwICYjMzQ7ZmFpbGVkIHRvIHJlYWQgUkRNQSBuZXRucyBtb2RlJiMzNDsKJiM0MzsKJiM0MzsJcmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8CiYjNDM7CQlrc2Z0X3NraXAgJiMzNDtyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQmIzM0OwomIzQzOwlNT0RFX0NIQU5HRUQ9MQomIzQzOwomIzQzOwlpcCBuZXRucyBhZGQgJiMzNDskTlMxJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgYWRkICYjMzQ7JE5TMiYjMzQ7IHx8IHJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJY2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyROUzEmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskTlMyJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsJaWYgWyAmIzM0OyRNT0RFX0NIQU5HRUQmIzM0OyAtZXEgMSBdOyB0aGVuCiYjNDM7CQlyZG1hIHN5c3RlbSBzZXQgbmV0bnMgJiMzNDskT0xEX01PREUmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlmaQomIzQzOwomIzQzOwlmb3IgbSBpbiAmIzM0OyR7TU9EU1tAXX0mIzM0OzsgZG8KJiM0MzsJCW1vZHByb2JlIC1yICYjMzQ7JG0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO3JkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWUoKQomIzQzO3sKJiM0MzsJcmRtYSBkZXYgaGVscCAyJmd0OyZhbXA7MSB8IGdyZXAgLUVxICYjMzk7bmV0bnMgLipuYW1lfG5hbWUgLipuZXRucyYjMzk7CiYjNDM7fQomIzQzOwomIzQzO1sgJiMzNDskKGlkIC11KSYjMzQ7IC1lcSAwIF0gfHwga3NmdF9za2lwICYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7CiYjNDM7bmVlZF9jbWQgaXAKJiM0MztuZWVkX2NtZCByZG1hCiYjNDM7bmVlZF9jbWQgbW9kcHJvYmUKJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2ZvciBtIGluICYjMzQ7JHtNT0RTW0BdfSYjMzQ7OyBkbwomIzQzOwltb2RpbmZvICYjMzQ7JG0mIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8IGtzZnRfc2tpcCAmIzM0O21vZHVsZSAkbSBub3QgZm91bmQmIzM0OwomIzQzOwltb2Rwcm9iZSAmIzM0OyRtJiMzNDsgfHwgZmFpbCAmIzM0O2ZhaWxlZCB0byBsb2FkICRtJiMzNDsKJiM0Mztkb25lCiYjNDM7CiYjNDM7c2V0dXAgfHwgZmFpbCAmIzM0O2ZhaWxlZCB0byBjcmVhdGUgbmV0IG5hbWVzcGFjZXMmIzM0OwomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7a3RhcF9zZXRfcGxhbiA3CiYjNDM7CiYjNDM7aWYgc2V0dXBfZGV2cyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmV0bnMgJiMzNDskTlMxJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgIHJkbWFfbnMgJiMzNDskTlMxJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5hbWUgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgIHJkbWFfbnMgJiMzNDskTlMyJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5hbWUgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMSYjMzQ7ICYjMzQ7JFJYRV9TQU1FJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfU0FNRV9OQU1FUyYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkFNRVMmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISBzZXR1cF9kZXZzIHx8CiYjNDM7ICAgISByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuZXRucyAmIzM0OyROUzEmIzM0OyB8fAomIzQzOyAgICEgcmRtYV9ucyAmIzM0OyROUzEmIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7IHx8CiYjNDM7ICAgISByZG1hIGRldiBzZXQgJiMzNDskUlhFX0ImIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyB8fAomIzQzOyAgICEgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVCYjMzQ7CiYjNDM7ZWxpZiByZG1hX25zICYjMzQ7JE5TMSYjMzQ7IGRldiBzZXQgJiMzNDskUlhFX1NBTUUmIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVCYjMzQ7CiYjNDM7ZWxpZiByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMxJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgICByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMyJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OzsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1QmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUJiMzNDsKJiM0MztmaQomIzQzO2NsZWFudXBfZGV2cwomIzQzOwomIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX01PVkVfUkVOQU1FJiMzNDsKJiM0MztlbGlmIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICAgIHJkbWFfbnMgJiMzNDskTlMyJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5hbWUgJiMzNDskUlhFX05FVyYjMzQ7OyB0aGVuCiYjNDM7CWlmIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfTkVXJiMzNDsgJmFtcDsmYW1wOwomIzQzOwkgICAhIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyYjMzQ7ICYjMzQ7JFJYRV9BJiMzNDs7IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX01PVkVfUkVOQU1FJiMzNDsKJiM0MzsJZmkKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISByZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9za2lwICYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2VsaWYgISBzZXR1cF9kZXZzOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2VsaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJaWYgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMiYjMzQ7ICYjMzQ7JFJYRV9ORVcmIzM0OyAmYW1wOyZhbXA7CiYjNDM7CSAgICEgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JiMzNDsgJiMzNDskUlhFX0EmIzM0OzsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUUmIzM0OwomIzQzOwlmaQomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzO2VsaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICAgIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5hbWUgJiMzNDskUlhFX05FVyYjMzQ7OyB0aGVuCiYjNDM7CWlmIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5hbWUgJiMzNDskUlhFX05FVyYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzE7IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FJiMzNDsKJiM0MzsJZWxpZiByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsJICAgICByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzOwlmaQomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfVEVBUkRPV05fUkVUVVJOJiMzNDsKJiM0MztlbGlmICEgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7IHx8CiYjNDM7ICAgICAhIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7IHx8CiYjNDM7ICAgICAhIHJkbWFfbnMgJiMzNDskTlMyJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5hbWUgJiMzNDskUlhFX1NBTUUmIzM0OyB8fAomIzQzOyAgICAgISByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMyJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OzsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskTlMyJiMzNDsKJiM0MzsJcmV0dXJuZWQ9JCh3YWl0X3JkbWFfZGV2X29uX25ldGRldiAmIzM0OyREVU1NWV9CJiMzNDspCiYjNDM7CWt0YXBfcHJpbnRfbXNnICYjMzQ7ZGV2aWNlIHJldHVybmVkIHRvIGluaXRfbmV0IGFzICYjMzk7JHtyZXR1cm5lZDotJmx0O21pc3NpbmcmZ3Q7fSYjMzk7JiMzNDsKJiM0MzsJaWYgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7CSAgIFsgLW4gJiMzNDskcmV0dXJuZWQmIzM0OyBdICZhbXA7JmFtcDsKJiM0MzsJICAgWyAmIzM0OyRyZXR1cm5lZCYjMzQ7ICE9ICYjMzQ7JFJYRV9TQU1FJiMzNDsgXSAmYW1wOyZhbXA7CiYjNDM7CSAgIFsgJiMzNDske3JldHVybmVkI2liZGV2fSYjMzQ7ICE9ICYjMzQ7JHJldHVybmVkJiMzNDsgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk4mIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTiYjMzQ7CiYjNDM7CWZpCiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztrdGFwX2ZpbmlzaGVkCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgQ29yZSBhbmQgQ2dyb3VwIFN1YnN5c3RlbSBDaGFuZ2VzOiBSZWFjaGFiaWxpdHkgYW5kIEZ1enphYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBSRE1BIGNvcmUgYW5kIGl0cyBjZ3JvdXAgaW50ZWdyYXRpb24uIEl0JiMzOTtzIHRvdWNoaW5nIGEgbG90IG9mIGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IHRoZSBkZXZpY2UgbmFtaW5nIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSBoYW5kbGluZyB3aXRoaW4gdGhlIFJETUEgc3Vic3lzdGVtLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9ucyBsaWtlIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBhbmQgdGhlIGBhbGxvY19uYW1lYCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBhbHRlcmF0aW9ucyB0byBgY2dyb3VwX3JkbWEuaGAgYW5kIGBjZ3JvdXAvcmRtYS5jYCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIFJETUEgY2dyb3VwcyBuZXR3b3JrIG5hbWVzcGFjZS1hd2FyZSwgd2hpY2ggaXMgYSBiaWcgZGVhbCBmb3IgaXNvbGF0aW9uLgoKSSBhbHNvIHNlZSB0aGF0IGl0JiMzOTtzIHJlc3RyaWN0aW5nIGBzbWNfcG5ldF9maW5kX2liYCB0byBvbmx5IHNlZSBkZXZpY2VzIGF2YWlsYWJsZSBpbiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCBjaGFuZ2VzIHRvIGBzbWNfcG5ldC5jYC4gIFRoZXJlIGFyZSBhZGRpdGlvbnMgb2YgYHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHRgIGluIGByeGVfdmVyYnMuY2AsIGFuZCBhIG5ldyBgc3JwX25ldF9uYW1lc3BhY2VgIHZhcmlhYmxlIGlzIGFkZGVkIHRvIGBpYl9zcnAuY2AuIFBsdXMgaXQmIzM5O3MgbW9kaWZ5aW5nIGBubGRldi5jYCB0byBhbGxvdyBwYXNzaW5nIGEgZGV2aWNlIG5hbWUgd2hlbiBjaGFuZ2luZyBuZXRucy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSG93IHJlYWNoYWJsZSBhbmQgZnV6emFibGUgaXMgdGhpcyBjb2RlPyYjMzQ7IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBoaXQgdGhpcyBjb2RlIHBhdGggYW5kIHZlcmlmeSBpdHMgYmVoYXZpb3Igd2l0aCByZWFzb25hYmxlIGNvbmZpZGVuY2UuIFRoZSBtYWluIGZpbGVzIG9mIGludGVyZXN0IGFyZSBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNgLCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY2AsIGFuZCBga2VybmVsL2Nncm91cC9yZG1hLmNgLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gZGlyZWN0bHkgbW9kaWZpZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyDigJMgYWRkaW5nIG5ldG5zIHN1cHBvcnQsIHBvdGVudGlhbGx5IHJlbmFtaW5nIGRldmljZXMgcGVyIG5ldG5zIOKAkyB0aGlzIHNtZWxscyBsaWtlIGEgcG90ZW50aWFsIGF2ZW51ZSBmb3IgZnV6emluZywgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFJETUEgaXMgZGVmaW5pdGVseSBmdXp6YWJsZSBnaXZlbiBzeXprYWxsZXIgY292ZXJhZ2UsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgd2hpY2ggYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgY29kZSBwYXRocyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19DR1JPVVBfUkRNQWAgYW5kIGBDT05GSUdfSU5GSU5JQkFORGAuIEFuZCBJIGtub3cgYENPTkZJR19SRE1BX1JYRWAgaXMgdXNlZCBpbiB0aGUgc2VsZnRlc3QuIFRoZSBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JTkZJTklCQU5EYCBpcyBlbmFibGVkLiBga2VybmVsL2Nncm91cC9yZG1hLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19DR1JPVVBfUkRNQWAsIGFuZCBgbmV0L3NtYy9zbWNfcG5ldC5jYCBieSBgQ09ORklHX1NNQ2AuIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jYCByZXF1aXJlcyBgQ09ORklHX1JETUFfUlhFYCB0byBiZSBlbmFibGVkLCBhbmQgYGRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jYCByZWxpZXMgb24gYENPTkZJR19JTkZJTklCQU5EX1NSUGAuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgcGF0aHMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19DR1JPVVBfUkRNQVxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9jZ3JvdXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9jZ3JvdXAvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfQ0dST1VQX1BJRFMpICYjNDM7PSBwaWRzLm9cbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQ0dST1VQX1JETUEpICYjNDM7PSByZG1hLm9cbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfQ1BVU0VUUykgJiM0Mzs9IGNwdXNldC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJbmZpbmliYW5kIENvcmUgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBjb3JlIG1vZHVsZSBpcyBidWlsdCwgYW5kIGZyYW5rbHksIEkgZXhwZWN0IHRoaXMgTWFrZWZpbGUgdG8gYmUgdGhlIGhlYXJ0IG9mIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHN0dWZmOiBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGluY2x1ZGUgcGF0aHMsIG1heWJlIHNvbWUgYXJjaC1zcGVjaWZpYyBkZWZpbml0aW9ucyBpZiB3ZSYjMzk7cmUgbHVja3ksIGFuZCBvZiBjb3Vyc2UsIHRoZSBsaW5rZXIgZmxhZ3MuIE15IGd1dCBzYXlzIHRoaXMgd2lsbCBsaWtlbHkgYmUgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBNYWtlZmlsZTsgaXQmIzM5O3MgdGhlIGNvcmUsIHNvIGl0IHNob3VsZCBiZSB3ZWxsLW9yZ2FuaXplZCBhbmQgbW9kdWxhciwgcmlnaHQ/IExldCYjMzk7cyBzZWUgaWYgdGhlIGJ1aWxkIHByb2Nlc3MgdXRpbGl6ZXMgdGhlIHN0YW5kYXJkIGtlcm5lbCBidWlsZCBzeXN0ZW0gdmFyaWFibGVzIGFuZCBjb252ZW50aW9ucy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mIG9yIGlzIGl0IGEgZmFpcmx5IGdlbmVyaWMgYnVpbGQgZm9yIG5vdz8gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19JTkZJTklCQU5EXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlPTM9dXNlcl9hY2Nlc3MtJChDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TKVx0Oj0gcmRtYV91Y20ub1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUtNC1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0lORklOSUJBTkQpICYjNDM7PVx0XHRpYl9jb3JlLm8gaWJfY20ubyBpd19jbS5vIFxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZS02LVx0XHRcdFx0XHQkKGluZmluaWJhbmQteSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBSWEUgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUlhFIChSZWxpYWJsZSBlWHByZXNzIEV0aGVybmV0KSBkcml2ZXImIzM5O3MgYnVpbGQgcHJvY2VzcyBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgSW5maW5pYmFuZCBzdWJzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgZm9yIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBvYmplY3QgZmlsZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBydWxlcy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLW9yZ2FuaXplZCBhbmQgZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgb3Zlcmx5IGNvbnZvbHV0ZWQgb3Igb2JzY3VyZSBtYWtlZmlsZSB0cmlja3MuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhleSYjMzk7cmUgdXNpbmcgYW55IHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyBvciB0b29scyBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGV5IGhhbmRsZSB0aGluZ3MgbGlrZSBoZWFkZXIgaW5jbHVzaW9uLCBtb2R1bGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCBhbnkgc3BlY2lhbCBvcHRpb25zIG9yIGxpYnJhcmllcyB0aGV5JiMzOTtyZSBsaW5raW5nIGFnYWluc3QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19SRE1BX1JYRVxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1JETUFfUlhFKSAmIzQzOz0gcmRtYV9yeGUub1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZS0zLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjI0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBkZXNjcmliZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTUlAgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBgZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgU1JQIChTQ1NJIFJETUEgUHJvdG9jb2wpIGRyaXZlciB3aXRoaW4gdGhlIEluZmluaWJhbmQgc3RhY2sgd2lsbCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyB0aGlzIHNwZWNpZmljIFVMUCAoVXBwZXIgTGF5ZXIgUHJvdG9jb2wpIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlcyBhcmUgY29tcGlsZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzIG9uIG90aGVyIEluZmluaWJhbmQgY29tcG9uZW50cywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY3VzdG9tIGJ1aWxkIGZsYWdzIG9yIGxpbmtlciBkaXJlY3RpdmVzIHNwZWNpZmljIHRvIFNSUC4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBwb3RlbnRpYWwgaXNzdWVzLCBmb3IgbWFraW5nIGN1c3RvbWl6YXRpb25zLCBhbmQgZm9yIHZlcmlmeWluZyBob3cgdGhpcyBtb2R1bGUgaXMgYnVpbHQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgSUIgc3RhY2suIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgaW5jbHVkZXMgb2Ygb3RoZXIgcmVsZXZhbnQgaGVhZGVycyB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5IG9yIGZyb20gaGlnaGVyIGluIHRoZSBJQiBzdHJ1Y3R1cmUsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xm9iai1cXCRcXChDT05GSUdfSU5GSU5JQkFORF9TUlBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2J1aWxkLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2J1aWxkOjI6b2JqLSQoQ09ORklHX0lORklOSUJBTkRfU1JQKVx0XHRcdCYjNDM7PSBpYl9zcnAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayYjMzk7cyBoYW5kbGluZyBvZiBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbiksIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpbnZlc3RpZ2F0aW5nIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gU01DIGZ1bmN0aW9uYWxpdHkuIEJ5IGV4YW1pbmluZyB0aGlzIE1ha2VmaWxlLCBJIGNhbiBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTTUMgbW9kdWxlcyBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgb3IgcmVsZXZhbnQgbmV0d29yayBjb21wb25lbnRzLiBJdCYjMzk7bGwgcmV2ZWFsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncywgcG90ZW50aWFsIHRhcmdldC1zcGVjaWZpYyBzZXR0aW5ncywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFueSBhcmVhcyB3aGVyZSB0aGVyZSBtaWdodCBiZSBtaXNjb25maWd1cmF0aW9ucyBvciBvdmVybG9va2VkIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBjYXVzaW5nIGlzc3VlcyB3aXRoIHRoZSBTTUMgaW1wbGVtZW50YXRpb24uIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBhIGZhc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19TTUNcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL01ha2VmaWxlPTI9Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjKVxubmV0L3NtYy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19TTUMpXHQmIzQzOz0gc21jLm9cbm5ldC9zbWMvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfU01DX0RJQUcpXHQmIzQzOz0gc21jX2RpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwMwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBudW1iZXIgb2Yga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgbmFtZXNwYWNlcyBhbmQgUkRNQS4gSSBzZWUgaXQmIzM5O3MgbW9kaWZ5aW5nIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYW5kIGBzcnBfbmV0X25hbWVzcGFjZWAuIFJpZ2h0IGF3YXksIHRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgUkRNQSBkZXZpY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiBkaWZmZXJlbnQgbmV0d29yayBjb250ZXh0cy4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHRoZSBpbXBhY3Qgb24gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4KCk15IGltbWVkaWF0ZSBmb2N1cywgYmFzZWQgb24gdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGlzIGhvdyB0aGUgZGV2aWNlIGlzIG1vdmVkIGJldHdlZW4gbmFtZXNwYWNlcywgaG93IGl0IHBpY2tzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSBuYW1lLCBhbmQgaG93IGl0cyB2aXNpYmlsaXR5IGlzIGRldGVybWluZWQgd2l0aGluIHRoZSBSRE1BIGVjb3N5c3RlbS4gSSB3aWxsIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYW5kIGBzcnBfbmV0X25hbWVzcGFjZWAuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBkZXZpY2UgbWFuYWdlbWVudCBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgYG5sZGV2X3NldF9kb2l0YCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdGhlIGFjY3VyYXRlIG5hbWUuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQgaXMgbm90IGEgdHlwbyBvciBwbGFjZWhvbGRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxkZXZfc2V0X2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTExMj1zdGF0aWMgaW50IG5sZGV2X2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTE2MS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTE2MjpzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMTYzLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9Mjk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJkbWFfbmxfY2JzIG5sZGV2X2NiX3RhYmxlW1JETUFfTkxERVZfTlVNX09QU10gPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yOTc4LVx0W1JETUFfTkxERVZfQ01EX1NFVF0gPSB7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI5Nzk6XHRcdC5kb2l0ID0gbmxkZXZfc2V0X2RvaXQsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI5ODAtXHRcdC5mbGFncyA9IFJETUFfTkxfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqVmVyaWZ5aW5nIHRoZSBTZXR1cCoqCgpBbHJpZ2h0LCB0aGF0IGluaXRpYWwgYXNzZXNzbWVudCBvZiBgbmxkZXZfc2V0X2RvaXRgIGlzIHNwb3Qgb24sIHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGdvb2QgdG8gZ28gdGhlcmUuIE5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb24gYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAuIFdhbnQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYWxpZ25lZCBhbmQgd2UgZGlkbiYjMzk7dCBtaXNzIGFueXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBpbml0aWFsIHNldHVwLiBJIGFsd2F5cyBsaWtlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBiYXNlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvY2dyb3VwL3JkbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvY2dyb3VwL3JkbWEuYz00NjY9RVhQT1JUX1NZTUJPTChyZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2UpO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ2OC0vKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo0Njk6c3RhdGljIGJvb2wgcmRtYWNnX2RldmljZV92aXNpYmxlKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00NzAte1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTQ3NT1zdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ4MS1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo0ODI6XHRcdGlmIChyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ4My1cdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTYyOT1zdGF0aWMgaW50IHJkbWFjZ19yZXNvdXJjZV9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtNjM3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xua2VybmVsL2Nncm91cC9yZG1hLmM6NjM4Olx0XHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxua2VybmVsL2Nncm91cC9yZG1hLmMtNjM5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTY1Mz1zdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTY2Mi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjY2MzpcdFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTY2NC1cdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz02ODU9c3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo2OTU6XHRcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTYtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDIyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IHRoaW5raW5nIHJpZ2h0IG5vdyBpcyBjZW50ZXJlZCBvbiB0aGlzIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgIGZ1bmN0aW9uLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGluY2x1ZGluZyBpdCBzZWVtcyBzYWZlIGVub3VnaC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciB3aGV0aGVyIHRvIGJyaW5nIGluIGByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRgLCBgcmRtYWNnX3Jlc291cmNlX3JlYWRgLCBgcmRtYWNnX2V2ZW50c19zaG93YCwgYW5kIGByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3dgLiBXYWl0LCBvbiBzZWNvbmQgdGhvdWdodCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAgc2hvdWxkIGJlIHBlcmZlY3RseSBhZGVxdWF0ZSBvbiBpdHMgb3duIGZvciB0aGUgY3VycmVudCBwdXJwb3NlLgoKTm93LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgdG8gZXhhbWluZSBgc21jX3BuZXRfZmluZF9pYmAuIExldCYjMzk7cyB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9Mjg1PXN0YXRpYyBib29sIHNtY19wbmV0aWRfdmFsaWQoY29uc3QgY2hhciAqcG5ldF9uYW1lLCBjaGFyICpwbmV0aWQpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTMxMC0gKi9cbm5ldC9zbWMvc21jX3BuZXQuYzozMTE6c3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWJfbmFtZSlcbm5ldC9zbWMvc21jX3BuZXQuYy0zMTIte1xuLS1cbm5ldC9zbWMvc21jX3BuZXQuYz00MTY9c3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy00MjYtXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xubmV0L3NtYy9zbWNfcG5ldC5jOjQyNzpcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcbm5ldC9zbWMvc21jX3BuZXQuYy00MjgtXHRpZiAoaWJfZGV2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTg4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIGBzcnBfbmV0X25hbWVzcGFjZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBzcnBfbmV0X25hbWVzcGFjZWAuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBzZXR0aW5ncyB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBjb25zaXN0ZW50IHdpdGggbXkgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGRlc2lnbiBhbmQgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBuZXR3b3JrLiBObyBwb2ludCBpbiBwcm9jZWVkaW5nIHdpdGhvdXQgdGhpcyBiYXNlIGJlaW5nIHN0cm9uZy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIG91dCB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NycF9uZXRfbmFtZXNwYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM9MzE5MD1BVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzE5NS0gKi9cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jOjMxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKnNycF9uZXRfbmFtZXNwYWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTMxOTcte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTMyMDQ9c3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzIwOC1cdC5uc190eXBlID0gXHUwMDI2bmV0X25zX3R5cGVfb3BlcmF0aW9ucyxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jOjMyMDk6XHQubmFtZXNwYWNlID0gc3JwX25ldF9uYW1lc3BhY2UsXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMjEwLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IEFsbG9jYXRpb24gTmFtaW5nKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmTigKYgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIFRoZSBpbW1lZGlhdGUgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgbWluZCBpcyB0byB6ZXJvIGluIG9uIGBfX2FsbG9jX25hbWVfaWRgLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbiwgaXNu4oCZdCBpdD8gQW55IHRpbWUgSSBzZWUgYSBtZW1vcnkgYWxsb2NhdGlvbi1yZWxhdGVkIGlzc3VlLCB1bmRlcnN0YW5kaW5nIGhvdyBhbGxvY2F0aW9uIG5hbWVzIGFyZSBoYW5kbGVkLCBvciByYXRoZXIsIHRoZSBpbnRlcm5hbCBJRCBnZW5lcmF0aW9uLCBiZWNvbWVzIHBhcmFtb3VudC4gQSBsb3Qgb2Ygc3VidGxlIHByb2JsZW1zIGNhbiBzdGVtIGZyb20gbWlzbWFuYWdlZCBuYW1lcywgcGFydGljdWxhcmx5IGluIGNvbXBsZXgsIG11bHRpdGhyZWFkZWQgc3lzdGVtcy4gU28sIG15IGluaXRpYWwgdGhvdWdodD8gTGV0JiMzOTtzIHZlcmlmeSBob3cgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGJlaGF2ZXMsIG1ha2Ugc3VyZSB0aGUgSUQmIzM5O3MgYXJlIGNvcnJlY3RseSBzZXQgYW5kIG1hbmFnZWQuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciB0cmFja2luZyBhbmQgZGVidWdnaW5nIHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucyBvciBsZWFrcy4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3VyIGlzIHRoZSBiYXNlbGluZSBmb3IgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19uYW1lX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM9NDMyPWludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy00NDUtICovXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzo0NDY6c3RhdGljIGludCBfX2FsbG9jX25hbWVfaWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDQ3LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKnNraXApXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM9NDgxPXN0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy00ODIte1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM6NDgzOlx0cmV0dXJuIF9fYWxsb2NfbmFtZV9pZChuZXQsIG5hbWUsIE5VTEwpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDg0LX1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz0xNzM5PXN0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NzEtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzcyOlx0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTc3My1cdGlmIChpZCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MDAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgcmRtYV9kZXZfbmFtZV9pbl9uZXRuc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgLiBJIGtub3cgdGhpcyBmdW5jdGlvbi92YXJpYWJsZS9tZWNoYW5pc20gKGNvbnRleHQgZGVwZW5kaW5nLCBuYXR1cmFsbHkpIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIFJETUEgZGV2aWNlcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBhbiBpc3N1ZSByZWxhdGVkIHRvIGRldmljZSB2aXNpYmlsaXR5IG9yIHBlcmhhcHMgY3Jvc3MtbmFtZXNwYWNlIGNvbW11bmljYXRpb24gYW5kIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGlzIGlzIHRoZSByb290IGNhdXNlLiBUaGlzIGltcGxpZXMgSSYjMzk7bSBlaXRoZXIgZGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0sIGV4YW1pbmluZyBjb2RlLCBvciByZXZpZXdpbmcgYSBwb3RlbnRpYWwgcGF0Y2gvY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCwgaG93IGl0JiMzOTtzIHVzZWQsIGFuZCB3aGF0IGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGFyZS4gSSYjMzk7bGwgbGlrZWx5IGJlIGFzc2Vzc2luZyBpdHMgcm9sZSBpbiBkZXZpY2UgZW51bWVyYXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBvciByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGUgc3BlY2lmaWNzIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB0aGUgcGFydGljdWxhciBSRE1BIHN0YWNrIGluIHF1ZXN0aW9uLCBidXQgdGhlIGNvcmUgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBuZXR3b3JrIG5hbWVzcGFjZSBpc29sYXRpb24gaXMgKG9yIGlzbiYjMzk7dCkgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gUkRNQSBkZXZpY2UgbmFtaW5nLiBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBlbGltaW5hdGUgdGhlIHNpbXBsZSBwb3NzaWJpbGl0aWVzIGFuZCB0byBkaWcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jPTE3MTQ9RVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTcxNS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3MTY6c3RhdGljIGJvb2wgcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpza2lwLCBzdHJ1Y3QgbmV0ICpuZXQsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz0xNzM5PXN0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NDktXHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3NTA6XHRcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzUxLVx0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NTctXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzU4Olx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NTktXHRcdCpuZXdfbmFtZSA9IGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NjYtXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFwmIzM0O2liZGV2JXVcJiMzNDssIGRldmljZS1cdTAwM2VpbmRleCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzY3Olx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBidWYpKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzY4LVx0XHQqbmV3X25hbWUgPSBidWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgTmV0IE5hbWVzcGFjZSBQYXRjaDogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcy4gRXNzZW50aWFsbHksIGl0IGFsbG93cyB0aGVzZSBkZXZpY2VzIHRvIGhhdmUgdW5pcXVlIG5hbWVzIHdpdGhpbiBlYWNoIG5ldHdvcmsgbmFtZXNwYWNlLCB3aGljaCBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0IHRvdWNoZXMgYm90aCB0aGUgY29yZSBSRE1BIHN1YnN5c3RlbSBhbmQgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYW5kIGNvcm5lciBjYXNlcyBpcyBoaWdoIHdpdGggdGhpcyBsZXZlbCBvZiBjb3JlIG1vZGlmaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgdG8gZW5zdXJlIGEgcHJvcGVyIHRlc3QgZW52aXJvbm1lbnQuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDR1JPVVBfUkRNQWAsIGBJTkZJTklCQU5EYCwgYE5FVF9OU2AsIGBTTUNgLCBhbmQgYElORklOSUJBTkRfU1JQYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBORVRfTlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQgb3IgaWYgaXQmIzM5O3MgdXN1YWxseSBjb21waWxlZCBpbiBhbHJlYWR5LCB3aGljaCBpcyBsaWtlbHkuIGBDR1JPVVBfUkRNQWAgc2VlbXMgZXNzZW50aWFsIGZvciB0aGUgY2dyb3VwLXJlbGF0ZWQgbW9kaWZpY2F0aW9ucywgYW5kIGBJTkZJTklCQU5EYCBpcyBvYnZpb3VzbHkgbmVjZXNzYXJ5IGZvciB0aGUgY29yZSBSRE1BIGNoYW5nZXMuIFRoZSBwcmVzZW5jZSBvZiBgU01DYCBpbmRpY2F0ZXMgbGlrZWx5IGNoYW5nZXMgdG8gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMuIEZpbmFsbHksIGBJTkZJTklCQU5EX1NSUGAgaXMgcmVxdWlyZWQgZm9yIHRoZSBTUlAgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIHF1aWNrIHNjYW4gb24gYENPTkZJR19TTUNgIHRvIGNvbmZpcm0gaWYgaXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxODYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgSW5maW5pQmFuZCBTUlAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfSU5GSU5JQkFORF9TUlBgJiMzNDsuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFNlcmlhbGl6ZWQgUmVzZXJ2ZSBQcm90b2NvbCwgd2hpY2ggb2YgY291cnNlIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoLiBUaGUgZm9jdXMgaGVyZSBpcyBsaWtlbHkgb24gaG93IGl0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQsIG9yIHBlcmhhcHMgd2hldGhlciBpdCAqaXMqIGNvbmZpZ3VyZWQuIEFyZSB3ZSB0cnlpbmcgdG8gZW5hYmxlIGl0LCBkaXNhYmxlIGl0LCBvciBzaW1wbHkgYXVkaXQgaXRzIGN1cnJlbnQgc3RhdGU/IFRoZSBjb250ZXh0IGhlcmUgaXMga2V5LiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnM6IHBvdGVudGlhbCBpbXBhY3Qgb24gc3RvcmFnZSBwZXJmb3JtYW5jZSwgdGhlIGludGVycGxheSB3aXRoIG90aGVyIEluZmluaUJhbmQgb3B0aW9ucyBsaWtlIFJETUEgYW5kIHZlcmJzLCBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2hlcmUgYXJlIHdlIHJ1bm5pbmc/IFdoYXQmIzM5O3MgdGhlIHRhcmdldCBwbGF0Zm9ybT8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgaG93IEkgaW50ZXJwcmV0IHRoaXMgc2ltcGxlIGNoZWNrLiBEZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LCBteSBuZXh0IHN0ZXAgY291bGQgYmUgdG8gdmVyaWZ5IG1vZHVsZSBsb2FkaW5nLCBjaGVjayBhc3NvY2lhdGVkIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciByZXZpZXcgZXhpc3RpbmcgYmxvY2sgZGV2aWNlIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5GSU5JQkFORF9TUlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTUzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipDaGVja2luZyB0aGUgUkRNQSBDZ3JvdXAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBSRE1BLXJlbGF0ZWQgaXNzdWUsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGEgYmFzaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGNoZWNrIHRoZSBzdGF0ZSBvZiBgQ09ORklHX0NHUk9VUF9SRE1BYC4gSXQmIzM5O3MgYSBjcml0aWNhbCBrbm9iIHdoZW4gd29ya2luZyB3aXRoIFJETUEgd2l0aGluIGNncm91cHMuIElmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGVuIG1vc3Qgb2YgbXkgZWZmb3J0cyB3aWxsIGJlIGhhbXBlcmVkIGZyb20gdGhlIHN0YXJ0LiBJIHdhbnQgdG8gcnVsZSBvdXQgYSBzaW1wbGUgbWlzY29uZmlndXJhdGlvbiBiZWZvcmUgSSBzdGFydCB0cm91Ymxlc2hvb3RpbmcgdGhlIGNvbXBsZXhpdGllcyB0aGF0IG1pZ2h0IGZvbGxvdy4gVGhpcyBpcyB0aGUgbG93LWhhbmdpbmcgZnJ1aXQsIHNvIHRvIHNwZWFrLCBhbmQgSSYjMzk7ZCBiZSByZW1pc3Mgbm90IHRvIGVsaW1pbmF0ZSBpdCBhcyBhIHByaW1hcnkgY2F1c2UuIFRpbWUgdG8gc2VlIHdoYXQgdGhhdCBzZXR0aW5nIGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEyMzc9Y29uZmlnIENHUk9VUF9QSURTXG4tLVxuaW5pdC9LY29uZmlnLTEyNTItXG5pbml0L0tjb25maWc6MTI1Mzpjb25maWcgQ0dST1VQX1JETUFcbmluaXQvS2NvbmZpZy0xMjU0LVx0Ym9vbCBcJiMzNDtSRE1BIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NjkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb246CgoqKkNoZWNraW5nIGBDT05GSUdfUkRNQV9SWEVgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1JETUFfUlhFYCBpcyBjb3JyZWN0bHkgc2V0LiBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgUmVjZWl2ZXIgRXh0ZW5zaW9ucyAoUlhFKSBzdXBwb3J0IGluIG91ciBSRE1BIHNldHVwLiBUaGlzIHBhcmFtZXRlciBpcyB0aGUgZGVjaWRpbmcgZmFjdG9yIGZvciB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gZW5hYmxlIHRoZSBSWEUgZnVuY3Rpb25hbGl0eTsgd2l0aG91dCBpdCBlbmFibGVkIHdl4oCZcmUgc3Vuay4KCkkgaW1tZWRpYXRlbHkgbmVlZCB0byBjb25maXJtIGl0cyB2YWx1ZSwgYmVjYXVzZSBpZiBpdCYjMzk7cyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlbiB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgb3IgY29uZmlndXJpbmcsIGlzbiYjMzk7dCBnb2luZyB0byB3b3JrLiBJcyBpdCBlbmFibGVkPyBEaXNhYmxlZD8gU2V0IGFzIGEgbW9kdWxlPyBUaGUgbnVhbmNlcyB0aGVyZSBjYW4gZHJhbWF0aWNhbGx5IHNoaWZ0IGhvdyBJIG5lZWQgdG8gcHJvY2VlZCBhbmQgd2hhdCBJIG1heSBiZSBlbmNvdW50ZXJpbmcuIElmIGl0JiMzOTtzIGRpc2FibGVkLCBJIGtub3cgdG8gcHVyc3VlIG90aGVyIGF2ZW51ZXMgYW5kIHNvbHV0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGhvdXQgUlhFLCBidXQsIGlmIGVuYWJsZWQsIEkga25vdyBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4gVGhpcyBvcHRpb24gd2lsbCBpbmZsdWVuY2Ugb3RoZXIgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9SWEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNjEKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkRNQSBOZXR3b3JrIE5hbWVzcGFjZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBjaGFuZ2VzLCBzbyBJIHNlZSBpdCB0b3VjaGVzIGEgd2lkZSByYW5nZSBvZiBSRE1BLXJlbGF0ZWQgY29kZTogYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNgLCBga2VybmVsL2Nncm91cC9yZG1hLmNgLCBgbmV0L3NtYy9zbWNfcG5ldC5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmNgLCBhbmQgYGRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiBhcmVhcyDigJMgY29yZSBkZXZpY2UgaGFuZGxpbmcsIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGNncm91cCBpbnRlZ3JhdGlvbiwgU01DLCBTUlAsIGFuZCBldmVuIFJYRS4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCk15IG5leHQgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJiMzOTttIHNlZWluZyBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGBubGRldl9zZXRfZG9pdGAsIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgLCBgc21jX3BuZXRfZmluZF9pYmAsIGBzcnBfbmV0X25hbWVzcGFjZWAsIGBfX2FsbG9jX25hbWVfaWRgLCBhbmQgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9uIHdpdGggUkRNQSBkZXZpY2VzLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGludm9sdmUgbmFtZSBhbGxvY2F0aW9uIChgX19hbGxvY19uYW1lX2lkYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCkgYW5kIHZpc2liaWxpdHkgY2hlY2tzIChgcmRtYWNnX2RldmljZV92aXNpYmxlYCkgc3VnZ2VzdHMgc2lnbmlmaWNhbnQgd29yayBvbiBob3cgUkRNQSBkZXZpY2VzIGFuZCB0aGVpciBuYW1lcyBhcmUgbWFuYWdlZCB3aXRoaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhlIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAgYW5kIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgIGZ1bmN0aW9ucyBhcmUgYWxzbyBjcml0aWNhbGx5IGltcG9ydGFudC4KCkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkLCBgSU5GSU5JQkFORGAsIGBDR1JPVVBfUkRNQWAsIGBTTUNgLCBgSU5GSU5JQkFORF9TUlBgLCBhbmQgYFJETUFfUlhFYCB0ZWxscyBtZSB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBSRE1BIGZlYXR1cmUgc2V0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGwgb2YgdGhlc2UgZmVhdHVyZXMgaXMgY29ycmVjdC4KCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvZiB0aGUgJiMzNDt3aGF0LiYjMzQ7IE5vdywgaXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgKndoeSogdGhlc2UgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIGVuc3VyZSBwcm9wZXIgbmV0d29yayBuYW1lc3BhY2UgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzeW1ib2xzIGludGVyYWN0IGluIHRoZSBvdmVyYWxsIGRldmljZSBtYW5hZ2VtZW50LCBjZ3JvdXAgaW50ZWdyYXRpb24sIGFuZCBTTUMvU1JQIHN1cHBvcnQuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIHRoZW4gY29tcGFyZSB0aGlzIHdpdGggcHJldmlvdXMgcGF0Y2hlcy4KCk5vdywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1JETUEmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfU1JQJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICAgJiMzNDtzcnBfbmV0X25hbWVzcGFjZSYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1JETUEmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfU1JQJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICAgJiMzNDtzcnBfbmV0X25hbWVzcGFjZSYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NToyNi42NzcxODgxODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIwMDc2NDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EX1NSUFwiLFxuICAgIFwiUkRNQV9SWEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfZGV2aWNlX3Zpc2libGVcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgICBcInNycF9uZXRfbmFtZXNwYWNlXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjI2LjY3NzE5NDU1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyNjkxODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDc2YWU5ZjdjNTU5MzVmYjFjMzhiODk4NmQ5MDVkNGVlZDU1OWY2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMzo1NToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuQEAgLTEyLDYgKzEyLDEwIEBAIERlc2NyaXB0aW9uOiBcXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cXG4gXFx0XFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxcbiBcXHRcXHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2VcXG4gXFxuK1xcdFxcdE5vdGU6IGNvbmZpZ2ZzIGhhcyBubyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LCBzbyB0aGlzXFxuK1xcdFxcdGludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluXFxuK1xcdFxcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cXG4rXFxuIFxcbiBXaGF0OiBcXHRcXHQvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2UvcG9ydHMvXFx1MDAzY3BvcnQtbnVtXFx1MDAzZS9kZWZhdWx0X3JvY2VfbW9kZVxcbiBEYXRlOiBcXHRcXHROb3ZlbWJlciAyOSwgMjAxNVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uNDUyM2MxODg0ZDY3MTUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuQEAgLTI3NTIsNiArMjc1MiwxMyBAQCBSRE1BXFxuIFRoZSBcXFwicmRtYVxcXCIgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZlxcbiBSRE1BIHJlc291cmNlcy5cXG4gXFxuK1doZW4gUkRNQSBkZXZpY2VzIGFyZSBpc29sYXRlZCBwZXIgbmV0d29yayBuYW1lc3BhY2UgKGV4Y2x1c2l2ZSBtb2RlKSxcXG4rZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgb25seSB3aXRoaW4gYSBuZXR3b3JrIG5hbWVzcGFjZS4gVGhlIGRldmljZSBsaW5lc1xcbitiZWxvdyBhcmUgdGhlcmVmb3JlIHNjb3BlZCB0byB0aGUgcmVhZGluZyBvciB3cml0aW5nIHByb2Nlc3MncyBuZXR3b3JrXFxuK25hbWVzcGFjZTogb25seSBkZXZpY2VzIGFjY2Vzc2libGUgZnJvbSB0aGF0IG5hbWVzcGFjZSBhcmUgbGlzdGVkLCBhbmQgYVxcbitsaW1pdCBpcyBhcHBsaWVkIHRvIHRoZSBkZXZpY2Ugb2YgdGhhdCBuYW1lIGluIHRoYXQgbmFtZXNwYWNlLiBDb25maWd1cmVcXG4rbGltaXRzIGZyb20gdGhlIHNhbWUgbmV0d29yayBuYW1lc3BhY2UgYXMgdGhlIHdvcmtsb2Fkcy5cXG4rXFxuIFJETUEgSW50ZXJmYWNlIEZpbGVzXFxuIH5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXFxuaW5kZXggMWYwMzdmZTAxNDUwZWYuLjdhMjE2ZWQ0NTE5OWJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcXG5AQCAtMTcsNiArMTcsOCBAQFxcbiB2b2lkIGliX2RldmljZV9yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuIFxcdGRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5hbWUgPSBkZXZpY2UtXFx1MDAzZW5hbWU7XFxuK1xcdGRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5ldG5zX3NoYXJlZCA9IGliX2RldmljZXNfc2hhcmVkX25ldG5zO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNnX2RldmljZS5uZXQsIHJkbWFfZGV2X25ldChkZXZpY2UpKTtcXG4gXFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UpO1xcbiB9XFxuIFxcbkBAIC0zNCw2ICszNiwxNiBAQCB2b2lkIGliX2RldmljZV91bnJlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UpO1xcbiB9XFxuIFxcbit2b2lkIGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5ldCwgbmV0KTtcXG4rfVxcbitcXG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZClcXG4re1xcbitcXHRXUklURV9PTkNFKGRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5ldG5zX3NoYXJlZCwgc2hhcmVkKTtcXG4rfVxcbitcXG4gaW50IGliX3JkbWFjZ190cnlfY2hhcmdlKHN0cnVjdCBpYl9yZG1hY2dfb2JqZWN0ICpjZ19vYmosXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdFxcdCBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXFxuaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcXG5AQCAtNjUsNiArNjUsMTAgQEAgc3RhdGljIHN0cnVjdCBjbWFfZGV2X3BvcnRfZ3JvdXAgKnRvX2Rldl9wb3J0X2dyb3VwKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4gXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApO1xcbiB9XFxuIFxcbisvKlxcbisgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluXFxuKyAqIGRpZmZlcmVudCBuYW1lc3BhY2VzIHJlc29sdmVzIHRvIHRoZSBmaXJzdCBtYXRjaCBoZXJlLlxcbisgKi9cXG4gc3RhdGljIGJvb2wgZmlsdGVyX2J5X25hbWUoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB2b2lkICpjb29raWUpXFxuIHtcXG4gXFx0cmV0dXJuICFzdHJjbXAoZGV2X25hbWUoXFx1MDAyNmliX2Rldi1cXHUwMDNlZGV2KSwgY29va2llKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxcbmluZGV4IDE5MTA0YzU0MmIyNzBkLi45Y2Q2NzFlMmRiMjA0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXFxuQEAgLTE1Niw2ICsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7XFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1JETUFcXG4gdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XFxuIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XFxuK3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpO1xcbit2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGJvb2wgc2hhcmVkKTtcXG4gXFxuIGludCBpYl9yZG1hY2dfdHJ5X2NoYXJnZShzdHJ1Y3QgaWJfcmRtYWNnX29iamVjdCAqY2dfb2JqLFxcbiBcXHRcXHRcXHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxcbkBAIC0xNzMsNiArMTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBzaGFyZWQpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUgcmVzb3VyY2VfaW5kZXgpXFxuQEAgLTM1Niw3ICszNjgsOCBAQCB2b2lkIGliX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRfZ3JvdXBzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydF9udW0sXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XFxuIFxcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFxuIGludCByZG1hX25sX25ldF9pbml0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xcbiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcXG5pbmRleCBiODE5M2UwNzdhNzQ2Zi4uY2ZmYjBkZTFjMDAxNmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xcbkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIERFQ0xBUkVfUldTRU0ocmRtYV9uZXRzX3J3c2VtKTtcXG4gYm9vbCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucyA9IHRydWU7XFxuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobmV0bnNfbW9kZSxcXG4tXFx0XFx0IFxcXCJTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVxcXCIpO1xcbitcXHRcXHQgXFxcIlNoYXJlIGRldmljZSBhbW9uZyBuZXQgbmFtZXNwYWNlczsgZGVmYXVsdD0xIChzaGFyZWQpLiBJbiBleGNsdXNpdmUgbW9kZSBkZXZpY2UgbmFtZXMgYXJlIHVuaXF1ZSBwZXIgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbiAvKipcXG4gICogcmRtYV9kZXZfYWNjZXNzX25ldG5zKCkgLSBSZXR1cm4gd2hldGhlciBhbiByZG1hIGRldmljZSBjYW4gYmUgYWNjZXNzZWRcXG4gICpcXHRcXHRcXHQgICAgIGZyb20gYSBzcGVjaWZpZWQgbmV0IG5hbWVzcGFjZSBvciBub3QuXFxuQEAgLTI2OCw3ICsyNjgsOCBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGliZGV2X2xzbV9uYiA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCk7XFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLFxcbitcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7XFxuIFxcbiAvKiBQb2ludGVyIHRvIHRoZSBSQ1UgaGVhZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGliX3BvcnRfZGF0YSBhcnJheSAqL1xcbiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7XFxuQEAgLTM1MSwxMyArMzUyLDE1IEBAIHZvaWQgaWJfZGV2aWNlX3B1dChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpYl9kZXZpY2VfcHV0KTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgc3RydWN0IGliX2RldmljZSAqX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaCAoXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXFxuLVxcdFxcdGlmICghc3RyY21wKG5hbWUsIGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldikpKVxcbitcXHRcXHRpZiAocmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGRldmljZTtcXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0zOTUsNyArMzk4LDcgQEAgaW50IGliX2RldmljZV9yZW5hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHtcXG4rXFx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdH1cXG5AQCAtNDM1LDcgKzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuKy8qXFxuKyAqIFBpY2sgYSBmcmVlIGluZGV4IGZvciB0aGUgJyVkJyBzdHlsZSBAbmFtZSBwYXR0ZXJuIHdpdGhpbiBuZXQgbmFtZXNwYWNlXFxuKyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHNcXG4rICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cXG4rICovXFxuK3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuQEAgLTQ0OCw2ICs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdHhhX2Zvcl9lYWNoIChcXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSkge1xcbiBcXHRcXHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xcbiBcXG4rXFx0XFx0aWYgKGRldmljZSA9PSBza2lwIHx8ICFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHNzY2FuZihkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpLCBuYW1lLCBcXHUwMDI2aSkgIT0gMSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChpIFxcdTAwM2MgMCB8fCBpIFxcdTAwM2U9IElOVF9NQVgpXFxuQEAgLTQ2MiwxNSArNDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBpZGFfYWxsb2MoXFx1MDAyNmludXNlLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRyYyA9IGRldl9zZXRfbmFtZShcXHUwMDI2aWJkZXYtXFx1MDAzZWRldiwgbmFtZSwgcmMpO1xcbiBvdXQ6XFxuIFxcdGlkYV9kZXN0cm95KFxcdTAwMjZpbnVzZSk7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRpbnQgaWQ7XFxuK1xcbitcXHRpZCA9IGFsbG9jX25hbWVfaWQocmRtYV9kZXZfbmV0KGliZGV2KSwgbmFtZSk7XFxuK1xcdGlmIChpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBpZDtcXG4rXFxuK1xcdHJldHVybiBkZXZfc2V0X25hbWUoXFx1MDAyNmliZGV2LVxcdTAwM2VkZXYsIG5hbWUsIGlkKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaWJfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbiB7XFxuIFxcdHN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7XFxuQEAgLTEwOTQsNiArMTExNyw3IEBAIHN0YXRpYyBpbnQgYWRkX2FsbF9jb21wYXRfZGV2cyh2b2lkKVxcbiBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0O1xcbitcXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG5AQCAtMTExNiw2ICsxMTQwLDEyIEBAIGludCByZG1hX2NvbXBhdGRldl9zZXQodTggZW5hYmxlKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4rXFx0LyogS2VlcCBlYWNoIHJlZ2lzdGVyZWQgZGV2aWNlJ3MgcmRtYSBjZ3JvdXAgdmlzaWJpbGl0eSBpbiBzeW5jLiAqL1xcbitcXHRkb3duX3JlYWQoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXHR4YV9mb3JfZWFjaF9tYXJrZWQoXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXYsIERFVklDRV9SRUdJU1RFUkVEKVxcbitcXHRcXHRpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoZGV2LCBlbmFibGUpO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4rXFxuIFxcdGlmIChlbmFibGUpXFxuIFxcdFxcdHJldCA9IGFkZF9hbGxfY29tcGF0X2RldnMoKTtcXG4gXFx0ZWxzZVxcbkBAIC0xMTUxLDggKzExODEsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIHRoZSBOUyB0aGVuIG1vdmUgaXQgYmFjayB0byBpbml0LlxcbitcXHRcXHQgKiBQcm92aWRlIGEgZmFsbGJhY2sgcGF0dGVybiBzbyBhIG5hbWUgY29uZmxpY3QgaW4gaW5pdF9uZXRcXG4rXFx0XFx0ICogY2Fubm90IG1ha2UgdGhlIHRlYXJkb3duIG1vdmUgZmFpbC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgXFx1MDAyNmluaXRfbmV0KTtcXG4rXFx0XFx0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcXHUwMDI2ZGV2LVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0KSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcXHUwMDI2aW5pdF9uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLCBcXFwiaWJkZXYlZFxcXCIpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBtb3ZlIFJETUEgZGV2aWNlICVzIHRvIGluaXRfbmV0IG9uIG5ldG5zIGV4aXQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGRldl9uYW1lKFxcdTAwMjZkZXYtXFx1MDAzZWRldiksIHJldCk7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG5AQCAtMTIwNiw3ICsxMjQ1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHJkbWFfZGV2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gfVxcbiBcXG4gLypcXG4tICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhpcyBpc1xcbisgKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGUgZGV2aWNlXFxuKyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzXFxuICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS5cXG4gICovXFxuIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxcbkBAIC0xMjIzLDcgKzEyNjMsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICByZG1hX2Rldl9uZXQoZGV2aWNlKSkpIHtcXG4gXFx0XFx0cmV0ID0gLUVORklMRTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtMTMyMiw2ICsxMzYzLDcgQEAgc3RhdGljIGludCBlbmFibGVfZGV2aWNlX2FuZF9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiBcXHQgKi9cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlZmNvdW50LCAyKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChkZXZpY2UsIGliX2RldmljZXNfc2hhcmVkX25ldG5zKTtcXG4gXFx0eGFfc2V0X21hcmsoXFx1MDAyNmRldmljZXMsIGRldmljZS1cXHUwMDNlaW5kZXgsIERFVklDRV9SRUdJU1RFUkVEKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEzODgsOCArMTQzMCw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiAvKipcXG4gICogaWJfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgYW4gSUIgZGV2aWNlIHdpdGggSUIgY29yZVxcbiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXJcXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbFxcbi0gKiBcXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXFxuKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXlcXG4rICpcXHQgIGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbCBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGVcXG4rICpcXHQgIHBhc3NlZCBkZXZpY2UgbmFtZS5cXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxcbiAgKlxcdCAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4gSW4gdGhpcyBjYXNlIHRoZSBjYWxsZXIgc2hvdWxkIGZ1bGx5XFxuICAqXFx0XFx0c2V0dXAgdGhlIGliZGV2IGZvciBETUEuIFRoaXMgdXN1YWxseSBtZWFucyB1c2luZyBkbWFfdmlydF9vcHMuXFxuQEAgLTE2NzAsMTQgKzE3MTMsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKTtcXG4gXFxuK3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXFxuK1xcdFxcdGlmIChkZXZpY2UgIT0gc2tpcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWVcXG4rICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWVcXG4rICogd2hlbiBpdCBpcyBmcmVlLCBvciB1c2UgYSB0cnVzdGVkICclZCcgQGZhbGxiYWNrX3BhdHRlcm4gZm9yIHRlYXJkb3duLiBUaGVcXG4rICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLlxcbisgKi9cXG4rc3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sXFxuK1xcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxcbit7XFxuK1xcdGludCBpZDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0aWYgKHJlcXVlc3RlZF9uYW1lKSB7XFxuK1xcdFxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XFxuK1xcdFxcdFxcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0Km5ld19uYW1lID0gZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybilcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFxcXCJpYmRldiV1XFxcIiwgZGV2aWNlLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkge1xcbitcXHRcXHQqbmV3X25hbWUgPSBidWY7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7XFxuK1xcdGlmIChpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBpZDtcXG4rXFx0c25wcmludGYoYnVmLCBidWZfbGVuLCBmYWxsYmFja19wYXR0ZXJuLCBpZCk7XFxuK1xcdCpuZXdfbmFtZSA9IGJ1ZjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBjYWxsZXIgbXVzdCBwYXNzIGluIGEgZGV2aWNlIHRoYXQgaGFzIHRoZSBrcmVmIGhlbGQgYW5kIHRoZSByZWZjb3VudFxcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcXG4gICogaW50byBuZXQuXFxuKyAqXFxuKyAqIE5hbWluZyBydWxlcyBhcmUgaGFuZGxlZCBieSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKVxcbiB7XFxuK1xcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XFxuK1xcdGNvbnN0IGNoYXIgKm5ld19uYW1lO1xcbiBcXHRpbnQgcmV0MiA9IC1FSU5WQUw7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0xNjk0LDMwICsxODA2LDY4IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nXFxuK1xcdFxcdCAqIGRvd24sIHNvIGEgZG9vbWVkIHVzZXIgbW92ZSBkb2VzIG5vdCBkaXNhYmxlIGEgbGl2ZSBkZXZpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4rXFx0XFx0cmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihidWYpLCBcXHUwMDI2bmV3X25hbWUpO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYua29iaiwgS09CSl9SRU1PVkUpO1xcbiBcXHRkaXNhYmxlX2RldmljZShkZXZpY2UpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cXG4tXFx0ICogY2hhbmdlIHRoZSBuYW1lc3BhY2UuXFxuK1xcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXFxuK1xcdCAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnRcXG4rXFx0ICogcmVnaXN0cmF0aW9uIG9yIHJlbmFtZSwgdGhlbiBwdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBzeXNmc1xcbitcXHQgKiBsZXZlbC5cXG4gXFx0ICovXFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsIHNpemVvZihidWYpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm5ld19uYW1lKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdCAgICAgXFxcIiVzOiBmYWlsZWQgdG8gcGljayBkZXZpY2UgbmFtZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xcbitcXHRcXHRcXHRpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIG5ldCk7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byByZW5hbWVfZG9uZTtcXG4rXFx0fVxcbiBcXG4tXFx0ZG93bl9yZWFkKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4tXFx0LypcXG4tXFx0ICogQ3VycmVudGx5IHJkbWEgZGV2aWNlcyBhcmUgc3lzdGVtIHdpZGUgdW5pcXVlLiBTbyB0aGUgZGV2aWNlIG5hbWVcXG4tXFx0ICogaXMgZ3VhcmFudGVlZCBmcmVlIGluIHRoZSBuZXcgbmFtZXNwYWNlLiBQdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlXFxuLVxcdCAqIGF0IHRoZSBzeXNmcyBsZXZlbC5cXG4tXFx0ICovXFxuLVxcdHJldCA9IGRldmljZV9yZW5hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKTtcXG4tXFx0dXBfcmVhZChcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcXG4rXFx0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpO1xcbitcXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiwgbmV3X25hbWUpO1xcbiBcXHRpZiAocmV0KSB7XFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0IFxcXCIlczogQ291bGRuJ3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgX19mdW5jX18pO1xcbi1cXHRcXHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cXG4tXFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcXG4rXFx0XFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcXG4rXFx0XFx0XFx0V0FSTigxLFxcbitcXHRcXHRcXHQgICAgIFxcXCIlczogZmFpbGVkIHRvIHJlbmFtZSBkZXZpY2UgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgX19mdW5jX18sIHJldCk7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCIlczogQ291bGRuJ3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgX19mdW5jX18pO1xcbitcXHRcXHRcXHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cXG4rXFx0XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcXG4rXFx0XFx0XFx0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBjdXJfbmV0KTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdHJzY3B5KGRldmljZS1cXHUwMDNlbmFtZSwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSxcXG4rXFx0XFx0XFx0SUJfREVWSUNFX05BTUVfTUFYKTtcXG4gXFx0fVxcbityZW5hbWVfZG9uZTpcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbiBcXG4gXFx0cmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpO1xcbiBcXHRpZiAocmV0Mikge1xcbkBAIC0xNzQwLDM2ICsxODkwLDcyIEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4gfVxcbiBcXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdG5ldCA9IGdldF9uZXRfbnNfYnlfZmQobnNfZmQpO1xcbiBcXHRpZiAoSVNfRVJSKG5ldCkpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCB0YXJnZXQgbmV0IG5hbWVzcGFjZSBmZFxcXCIpO1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKG5ldCk7XFxuIFxcdFxcdGdvdG8gbmV0X2VycjtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJNaXNzaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FUEVSTTtcXG4gXFx0XFx0Z290byBuc19lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE1vdmluZyBhIGRldmljZSB0byB0aGUgbmFtZXNwYWNlIGl0IGFscmVhZHkgbGl2ZXMgaW4gaXMgYSBuby1vcDsgYVxcbitcXHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXFxuK1xcdCAqL1xcbitcXHRpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KFxcdTAwMjZkZXYtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xcbitcXHRcXHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcXG4rXFxuK1xcdFxcdGlmIChyZXQgPT0gLUVFWElTVClcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbitcXHRcXHRlbHNlIGlmIChyZXQgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBuYW1lKVxcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuK1xcdFxcdGdvdG8gbnNfZXJyO1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBBbGwgdGhlIGliX2NsaWVudHMsIGluY2x1ZGluZyB1dmVyYnMsIGFyZSByZXNldCB3aGVuIHRoZSBuYW1lc3BhY2UgaXNcXG4gXFx0ICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG9cXG4gXFx0ICogc29tZXRoaW5nLCBzbyBkaXNhc3NvY2lhdGlvbiBpcyBtYW5kYXRvcnkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWRldi1cXHUwMDNlb3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xcbitcXHRpZiAoaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkNhbm5vdCBjaGFuZ2UgbmV0IG5hbWVzcGFjZSBvZiBSRE1BIGRldmljZSBpbiBzaGFyZWQgbmV0bnMgbW9kZVxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Z290byBuc19lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2UgY2hhbmdlcyAobm8gZGlzYXNzb2NpYXRlIHN1cHBvcnQpXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbiBcXHRcXHRnb3RvIG5zX2VycjtcXG4gXFx0fVxcbiBcXG4gXFx0Z2V0X2RldmljZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRpYl9kZXZpY2VfcHV0KGRldik7XFxuLVxcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucywgbmV0KTtcXG4rXFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cXHUwMDNlbnNwcm94eS1cXHUwMDNlbmV0X25zLCBuZXQsIG5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICBOVUxMKTtcXG4gXFx0cHV0X2RldmljZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocmV0ID09IC1FRVhJU1QpXFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcXFwiKTtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IC1FSU5WQUwgXFx1MDAyNlxcdTAwMjYgbmFtZSlcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIlVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbiBcXG4gXFx0cHV0X25ldChuZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xcbmluZGV4IGY1OTljMjRiMzRlODFiLi40NzNiZjk2NjdmODNlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xcbkBAIC0xMTc3LDYgKzExNzcsMjQgQEAgc3RhdGljIGludCBubGRldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0aWYgKCFkZXZpY2UpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xcbitcXHRcXHRjaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9O1xcbitcXHRcXHR1MzIgbnNfZmQ7XFxuK1xcbitcXHRcXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xcbitcXHRcXHRcXHRubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLFxcbitcXHRcXHRcXHRcXHQgICAgSUJfREVWSUNFX05BTUVfTUFYKTtcXG4rXFx0XFx0XFx0aWYgKHN0cmxlbihuYW1lKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdG5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTtcXG4rXFx0XFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBuYW1lWzBdID8gbmFtZSA6IE5VTEwsIGV4dGFjayk7XFxuK1xcdFxcdGdvdG8gcHV0X2RvbmU7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XFxuIFxcdFxcdGNoYXIgbmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdID0ge307XFxuIFxcbkBAIC0xMTkwLDE0ICsxMjA4LDYgQEAgc3RhdGljIGludCBubGRldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7XFxuLVxcdFxcdHUzMiBuc19mZDtcXG4tXFxuLVxcdFxcdG5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTtcXG4tXFx0XFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkKTtcXG4tXFx0XFx0Z290byBwdXRfZG9uZTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkge1xcbiBcXHRcXHR1OCB1c2VfZGltO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcXG5pbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcXG5AQCAtNzAwLDYgKzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxcbiBcXHRpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNFTGludXggbGFiZWxzIGFuIGVuZHBvcnQgYnkgKGRldmljZSBuYW1lLCBwb3J0KSBmcm9tIGEgZ2xvYmFsXFxuK1xcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxcbitcXHQgKiB0aGUgc2FtZSBsYWJlbDsgZGlzdGluZ3Vpc2hpbmcgdGhlbSB3b3VsZCBuZWVkIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydFxcbitcXHQgKiBpbiB0aGUgcG9saWN5IGxhbmd1YWdlIGFuZCB0b29saW5nLlxcbitcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcXG4gXFx0cmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LVxcdTAwM2VzZWN1cml0eSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZGV2X25hbWUoXFx1MDAyNmFnZW50LVxcdTAwM2VkZXZpY2UtXFx1MDAzZWRldiksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXFxuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXFxuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxcbiBcXHRcXHRyeGVfZXJyX3VjKHVjLCBcXFwiY2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcXG4re1xcbit9XFxuK1xcbiAvKiBwZCAqL1xcbiBzdGF0aWMgaW50IHJ4ZV9hbGxvY19wZChzdHJ1Y3QgaWJfcGQgKmlicGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuIHtcXG5AQCAtMTQ3OCw2ICsxNDgyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xcbiBcXHQuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsXFxuIFxcdC5kZXRhY2hfbWNhc3QgPSByeGVfZGV0YWNoX21jYXN0LFxcbiBcXHQuZGV2aWNlX2dyb3VwID0gXFx1MDAyNnJ4ZV9hdHRyX2dyb3VwLFxcbitcXHQuZGlzYXNzb2NpYXRlX3Vjb250ZXh0ID0gcnhlX2Rpc2Fzc29jaWF0ZV91Y29udGV4dCxcXG4gXFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcXG4gXFx0LmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tcixcXG4gXFx0LmdldF9od19zdGF0cyA9IHJ4ZV9pYl9nZXRfaHdfc3RhdHMsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcXG5pbmRleCBhY2JkNzg3ZGUyNjViNS4uYTA3MGZjZjg2ZThhNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xcbkBAIC0zMTg5LDEwICszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcXG4gXFxuIEFUVFJJQlVURV9HUk9VUFMoc3JwX2NsYXNzKTtcXG4gXFxuKy8qXFxuKyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYlxcbisgKiBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKnNycF9uZXRfbmFtZXNwYWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LVxcdTAwM2VzcnBfZGV2LVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XFxuIFxcdC5uYW1lICAgID0gXFxcImluZmluaWJhbmRfc3JwXFxcIixcXG4gXFx0LmRldl9ncm91cHMgPSBzcnBfY2xhc3NfZ3JvdXBzLFxcbi1cXHQuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXZcXG4rXFx0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LFxcbitcXHQubnNfdHlwZSA9IFxcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxcbitcXHQubmFtZXNwYWNlID0gc3JwX25ldF9uYW1lc3BhY2UsXFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXFxuaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjcxMTcwY2IwZTE5ZTM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxcbkBAIC03LDYgKzcsNyBAQFxcbiAjZGVmaW5lIF9DR1JPVVBfUkRNQV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZVxcbiBcXG4gZW51bSByZG1hY2dfcmVzb3VyY2VfdHlwZSB7XFxuIFxcdFJETUFDR19SRVNPVVJDRV9IQ0FfSEFORExFLFxcbkBAIC0zNCw2ICszNSwxNSBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRkZXZfbm9kZTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHJwb29scztcXG4gXFx0Y2hhclxcdFxcdFxcdCpuYW1lO1xcbitcXHQvKlxcbitcXHQgKiBOZXQgbmFtZXNwYWNlIHRoZSBkZXZpY2UgYmVsb25ncyB0by4gQG5ldG5zX3NoYXJlZCBtaXJyb3JzXFxuK1xcdCAqIGliX2RldmljZXNfc2hhcmVkX25ldG5zOiB3aGVuIHRydWUgdGhlIGRldmljZSBpcyB2aXNpYmxlIGZyb20gZXZlcnlcXG4rXFx0ICogbmV0IG5hbWVzcGFjZSAoc2hhcmVkIG1vZGUpOyBvdGhlcndpc2UgQG5ldCBpcyB0aGUgb25seSBuYW1lc3BhY2VcXG4rXFx0ICogdGhhdCBtYXkgc2VlIGFuZCBjb25maWd1cmUgaXQuIEBuZXRuc19zaGFyZWQgaXMgdXBkYXRlZCB3aGVuIHRoZVxcbitcXHQgKiBzaGFyaW5nIG1vZGUgY2hhbmdlcywgc28gdXNlIHtSRUFELFdSSVRFfV9PTkNFKCkgdG8gYWNjZXNzIGl0LlxcbitcXHQgKi9cXG4rXFx0cG9zc2libGVfbmV0X3RcXHRcXHRuZXQ7XFxuK1xcdGJvb2xcXHRcXHRcXHRuZXRuc19zaGFyZWQ7XFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXFxuaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcXG5AQCAtNTE2LDcgKzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XFxuIFxcdFJETUFfTkxERVZfQVRUUl9ERVZfUFJPVE9DT0wsXFx0XFx0Lyogc3RyaW5nICovXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxcbitcXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdC4gTWF5IGJlIGNvbWJpbmVkXFxuK1xcdCAqIHdpdGggUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FIChhIGxpdGVyYWwgZGV2aWNlIG5hbWUpIHRvIGFsc28gcmVuYW1lXFxuK1xcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXFxuK1xcdCAqIGlmIHRoYXQgbmFtZSBpcyBhbHJlYWR5IHRha2VuIHRoZXJlLlxcbiBcXHQgKi9cXG4gXFx0UkRNQV9OTERFVl9ORVRfTlNfRkQsXFx0XFx0XFx0LyogdTMyICovXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jIGIva2VybmVsL2Nncm91cC9yZG1hLmNcXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Nncm91cC9yZG1hLmNcXG4rKysgYi9rZXJuZWwvY2dyb3VwL3JkbWEuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZ3JvdXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhcnNlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwX3JkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25zcHJveHkuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgUkRNQUNHX01BWF9TVFIgXFxcIm1heFxcXCJcXG4gXFxuQEAgLTQ2NCw2ICs0NjUsMTMgQEAgdm9pZCByZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XFxuIFxcbisvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXFxuK3N0YXRpYyBib29sIHJkbWFjZ19kZXZpY2VfdmlzaWJsZShjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHJldHVybiBSRUFEX09OQ0UoZGV2aWNlLVxcdTAwM2VuZXRuc19zaGFyZWQpIHx8XFxuK1xcdCAgICAgICBuZXRfZXEocmVhZF9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZW5ldCksIGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0c3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZTtcXG5AQCAtNDcxLDcgKzQ3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkbWFjZ19tdXRleCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcXG4tXFx0XFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2aWNlLVxcdTAwM2VuYW1lKSlcXG4rXFx0XFx0aWYgKHJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhc3RyY21wKG5hbWUsIGRldmljZS1cXHUwMDNlbmFtZSkpXFxuIFxcdFxcdFxcdHJldHVybiBkZXZpY2U7XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtNjI2LDYgKzYzNSw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX3Jlc291cmNlX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxuK1xcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuIFxcbiBcXHRcXHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xcbkBAIC02NDgsNiArNjYwLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxuK1xcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcXG4gXFxuIFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcyBcXFwiLCBkZXZpY2UtXFx1MDAzZW5hbWUpO1xcbkBAIC02NzcsNiArNjkyLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxuK1xcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcXG4gXFxuIFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcyBcXFwiLCBkZXZpY2UtXFx1MDAzZW5hbWUpO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmNcXG5pbmRleCA2M2UyODZlMmRmYWE4ZC4uZmY5YzljMzVjYzJmNWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXFxuKysrIGIvbmV0L3NtYy9zbWNfcG5ldC5jXFxuQEAgLTMwNCwxMyArMzA0LDE4IEBAIHN0YXRpYyBib29sIHNtY19wbmV0aWRfdmFsaWQoY29uc3QgY2hhciAqcG5ldF9uYW1lLCBjaGFyICpwbmV0aWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi0vKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZS4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihjaGFyICppYl9uYW1lKVxcbisvKlxcbisgKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZSwgcmVzdHJpY3RlZCB0byB0aGUgZGV2aWNlc1xcbisgKiBhY2Nlc3NpYmxlIGZyb20gQG5ldC4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKVxcbiB7XFxuIFxcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldjtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnNtY19pYl9kZXZpY2VzLm11dGV4KTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpYmRldiwgXFx1MDAyNnNtY19pYl9kZXZpY2VzLmxpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoaWJkZXYtXFx1MDAzZWliZGV2LCBuZXQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFzdHJuY21wKGliZGV2LVxcdTAwM2VpYmRldi1cXHUwMDNlbmFtZSwgaWJfbmFtZSxcXG4gXFx0XFx0XFx0ICAgICBzaXplb2YoaWJkZXYtXFx1MDAzZWliZGV2LVxcdTAwM2VuYW1lKSkgfHxcXG4gXFx0XFx0ICAgIChpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZWRldi5wYXJlbnQgXFx1MDAyNlxcdTAwMjZcXG5AQCAtNDA4LDggKzQxMyw4IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2V0aChzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcXG4tXFx0XFx0XFx0ICAgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxcbitzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdCAgIGNoYXIgKmliX25hbWUsIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21jX3BuZXRlbnRyeSAqdG1wX3BlLCAqbmV3X3BlO1xcbiBcXHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJfZGV2O1xcbkBAIC00MTksNyArNDI0LDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcXG4gXFx0Ym9vbCBuZXdfaWJkZXY7XFxuIFxcbiBcXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xcbi1cXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKGliX25hbWUpO1xcbitcXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XFxuIFxcdGlmIChpYl9kZXYpIHtcXG4gXFx0XFx0aWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTtcXG4gXFx0XFx0aWYgKGliZGV2X2FwcGxpZWQpXFxuQEAgLTUxOCw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2VudGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSlcXG4gXFx0XFx0XFx0aWYgKGlicG9ydCBcXHUwMDNjIDEgfHwgaWJwb3J0IFxcdTAwM2UgU01DX01BWF9QT1JUUylcXG4gXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIHN0cmluZywgaWJwb3J0LCBwbmV0X25hbWUpO1xcbitcXHRcXHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XFxuIFxcdFxcdGlmICghcmMpXFxuIFxcdFxcdFxcdG5ld19pYmRldiA9IHRydWU7XFxuIFxcdFxcdGVsc2UgaWYgKHJjICE9IC1FRVhJU1QpXFxuQEAgLTExNzAsNiArMTE3NSw5IEBAIGludCBzbWNfcG5ldGlkX2J5X3RhYmxlX2liKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJfcG9ydClcXG4gXFx0c3RydWN0IHNtY19uZXQgKnNuO1xcbiBcXHRpbnQgcmMgPSAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoc21jaWJkZXYtXFx1MDAzZWliZGV2LCBcXHUwMDI2aW5pdF9uZXQpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuIFxcdC8qIGdldCBwbmV0dGFibGUgZm9yIGluaXQgbmFtZXNwYWNlICovXFxuIFxcdHNuID0gbmV0X2dlbmVyaWMoXFx1MDAyNmluaXRfbmV0LCBzbWNfbmV0X2lkKTtcXG4gXFx0cG5ldHRhYmxlID0gXFx1MDAyNnNuLVxcdTAwM2VwbmV0dGFibGU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXFxuaW5kZXggMDdhZjdmMTVjMWJmNzQuLmE5MWMxNGM0NTAwNmUzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXFxuQEAgLTMsNiArMyw3IEBAIFRFU1RfUFJPR1MgOj0gcnhlX3JwaW5nX2JldHdlZW5fbmV0bnMuc2ggXFxcXFxcbiBcXHRcXHRyeGVfaXB2Ni5zaCBcXFxcXFxuIFxcdFxcdHJ4ZV9zb2NrZXRfd2l0aF9uZXRucy5zaCBcXFxcXFxuIFxcdFxcdHJ4ZV90ZXN0X05FVERFVl9VTlJFR0lTVEVSLnNoIFxcXFxcXG4tXFx0XFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaFxcbitcXHRcXHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoIFxcXFxcXG4rXFx0XFx0cnhlX25ldG5zX25hbWVzLnNoXFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXFxuaW5kZXggNGZmYjgxNGUyNTNiYmQuLmUxZmY1NGVjMGY1NzkwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcXG5AQCAtMSwzICsxLDUgQEBcXG4gQ09ORklHX1RVTlxcbiBDT05GSUdfVkVUSFxcbitDT05GSUdfRFVNTVlcXG4rQ09ORklHX05FVF9OU1xcbiBDT05GSUdfUkRNQV9SWEVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE3ZTU3NzA2ZmRmZjc1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXFxuQEAgLTAsMCArMSwyODIgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjXFxuKyMgRXhlcmNpc2UgUkRNQSBkZXZpY2UgbmFtZSBoYW5kbGluZyBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxcbitcXG4rc291cmNlIFxcXCIkKGRpcm5hbWUgXFxcIiQwXFxcIikvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxcXCJcXG4rXFxuK05BTUVfUFJFRklYPVxcXCJyeGVfbmV0bnNfbmFtZXNfJCRcXFwiXFxuK05FVERFVl9QUkVGSVg9XFxcInJ4biQkXFxcIlxcbitOUzE9XFxcIiR7TkFNRV9QUkVGSVh9bnMxXFxcIlxcbitOUzI9XFxcIiR7TkFNRV9QUkVGSVh9bnMyXFxcIlxcbitSWEVfQT1cXFwiJHtOQU1FX1BSRUZJWH1yeGVfYVxcXCJcXG4rUlhFX0I9XFxcIiR7TkFNRV9QUkVGSVh9cnhlX2JcXFwiXFxuK1JYRV9TQU1FPVxcXCIke05BTUVfUFJFRklYfXJ4ZV9zYW1lXFxcIlxcbitSWEVfTkVXPVxcXCIke05BTUVfUFJFRklYfXJ4ZV9uZXdcXFwiXFxuK0RVTU1ZX0E9XFxcIiR7TkVUREVWX1BSRUZJWH1hXFxcIlxcbitEVU1NWV9CPVxcXCIke05FVERFVl9QUkVGSVh9YlxcXCJcXG4rT0xEX01PREU9XFxcIlxcXCJcXG4rTU9ERV9DSEFOR0VEPTBcXG4rTU9EUz0oXFxcImR1bW15XFxcIiBcXFwicmRtYV9yeGVcXFwiKVxcbitURVNUX1NBTUVfTkFNRVM9XFxcInNhbWUgUkRNQSBkZXZpY2UgbmFtZSBjYW4gZXhpc3QgaW4gdHdvIG5ldCBuYW1lc3BhY2VzXFxcIlxcbitURVNUX01PVkVfQ09ORkxJQ1Q9XFxcIm1vdmUgd2l0aG91dCByZW5hbWUgZmFpbHMgb24gZGVzdGluYXRpb24gbmFtZSBjb25mbGljdFxcXCJcXG4rVEVTVF9NT1ZFX1JFTkFNRT1cXFwibW92ZSB0aGVuIHJlbmFtZSBzdWNjZWVkc1xcXCJcXG4rVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRT1cXFwibW92ZSB3aXRoIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBuYW1lIHN1Y2NlZWRzXFxcIlxcbitURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRT1cXFwic2FtZS1uZXRucyByZW5hbWUgcmVqZWN0cyBkdXBsaWNhdGUgbmFtZVxcXCJcXG4rVEVTVF9URUFSRE9XTl9SRVRVUk49XFxcIm5ldG5zIGRlbGV0ZSByZXR1cm5zIGRldmljZSB0byBpbml0X25ldCBhbmQgcmVuYW1lcyBvbiBjb25mbGljdFxcXCJcXG4rXFxuK2tzZnRfc2tpcCgpXFxuK3tcXG4rXFx0a3RhcF9za2lwX2FsbCBcXFwiJCpcXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK31cXG4rXFxuK2ZhaWwoKVxcbit7XFxuK1xcdGt0YXBfZXhpdF9mYWlsX21zZyBcXFwiJCpcXFwiXFxuK31cXG4rXFxuK25lZWRfY21kKClcXG4re1xcbitcXHRjb21tYW5kIC12IFxcXCIkMVxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIHx8IGtzZnRfc2tpcCBcXFwibWlzc2luZyBjb21tYW5kOiAkMVxcXCJcXG4rfVxcbitcXG4rcmRtYV9ucygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9JDFcXG4rXFxuK1xcdHNoaWZ0XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc1xcXCIgcmRtYSBcXFwiJEBcXFwiXFxuK31cXG4rXFxuK3JkbWFfZGV2X2V4aXN0cygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9JDFcXG4rXFx0bG9jYWwgZGV2PSQyXFxuK1xcbitcXHRpZiBbIC1uIFxcXCIkbnNcXFwiIF07IHRoZW5cXG4rXFx0XFx0cmRtYV9ucyBcXFwiJG5zXFxcIiBkZXYgc2hvdyBcXFwiJGRldlxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuK1xcdGVsc2VcXG4rXFx0XFx0cmRtYSBkZXYgc2hvdyBcXFwiJGRldlxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuK1xcdGZpXFxuK31cXG4rXFxuK2FkZF9kdW1teSgpXFxuK3tcXG4rXFx0bG9jYWwgbmV0ZGV2PSQxXFxuK1xcbitcXHRpcCBsaW5rIGFkZCBcXFwiJG5ldGRldlxcXCIgdHlwZSBkdW1teSB8fCByZXR1cm4gMVxcbitcXHRpcCBsaW5rIHNldCBcXFwiJG5ldGRldlxcXCIgdXAgfHwgcmV0dXJuIDFcXG4rfVxcbitcXG4rYWRkX3J4ZSgpXFxuK3tcXG4rXFx0bG9jYWwgZGV2PSQxXFxuK1xcdGxvY2FsIG5ldGRldj0kMlxcbitcXG4rXFx0cmRtYSBsaW5rIGFkZCBcXFwiJGRldlxcXCIgdHlwZSByeGUgbmV0ZGV2IFxcXCIkbmV0ZGV2XFxcIlxcbit9XFxuK1xcbityZG1hX2Rldl9vbl9uZXRkZXYoKVxcbit7XFxuK1xcdGxvY2FsIG5ldGRldj0kMVxcbitcXG4rXFx0cmRtYSBsaW5rIHNob3cgMlxcdTAwM2UvZGV2L251bGwgfCBhd2sgLXYgd2FudD1cXFwiJG5ldGRldlxcXCIgJ1xcbitcXHRcXHR7XFxuK1xcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBORjsgaSsrKVxcbitcXHRcXHRcXHRcXHRpZiAoJGkgPT0gXFxcIm5ldGRldlxcXCIgXFx1MDAyNlxcdTAwMjYgJChpICsgMSkgPT0gd2FudCkge1xcbitcXHRcXHRcXHRcXHRcXHRkZXYgPSAkMlxcbitcXHRcXHRcXHRcXHRcXHRzdWIoL1xcXFwvLiovLCBcXFwiXFxcIiwgZGV2KVxcbitcXHRcXHRcXHRcXHRcXHRwcmludCBkZXZcXG4rXFx0XFx0XFx0XFx0XFx0ZXhpdFxcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdH0nXFxuK31cXG4rXFxuK3dhaXRfcmRtYV9kZXZfb25fbmV0ZGV2KClcXG4re1xcbitcXHRsb2NhbCBuZXRkZXY9JDFcXG4rXFx0bG9jYWwgZGV2XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRkZXY9JChyZG1hX2Rldl9vbl9uZXRkZXYgXFxcIiRuZXRkZXZcXFwiKVxcbitcXHRcXHRpZiBbIC1uIFxcXCIkZGV2XFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdGVjaG8gXFxcIiRkZXZcXFwiXFxuK1xcdFxcdFxcdHJldHVybiAwXFxuK1xcdFxcdGZpXFxuK1xcdFxcdHNsZWVwIDAuMVxcbitcXHRkb25lXFxuK1xcbitcXHRyZXR1cm4gMVxcbit9XFxuK1xcbitzZXR1cF9kZXZzKClcXG4re1xcbitcXHRjbGVhbnVwX2RldnNcXG4rXFxuK1xcdGFkZF9kdW1teSBcXFwiJERVTU1ZX0FcXFwiIHx8IHJldHVybiAxXFxuK1xcdGFkZF9kdW1teSBcXFwiJERVTU1ZX0JcXFwiIHx8IHJldHVybiAxXFxuK1xcbitcXHRhZGRfcnhlIFxcXCIkUlhFX0FcXFwiIFxcXCIkRFVNTVlfQVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0YWRkX3J4ZSBcXFwiJFJYRV9CXFxcIiBcXFwiJERVTU1ZX0JcXFwiIHx8IHJldHVybiAxXFxuK31cXG4rXFxuK2NsZWFudXBfZGV2cygpXFxuK3tcXG4rXFx0aXAgbGluayBkZWwgXFxcIiREVU1NWV9BXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpcCBsaW5rIGRlbCBcXFwiJERVTU1ZX0JcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK31cXG4rXFxuK3NldHVwKClcXG4re1xcbitcXHRPTERfTU9ERT0kKHJkbWEgc3lzdGVtIHNob3cgMlxcdTAwM2UvZGV2L251bGwgfFxcbitcXHRcXHQgICBzZWQgLW4gJ3MvLipuZXRucyBcXFxcKFteIF0qXFxcXCkuKi9cXFxcMS9wJylcXG4rXFx0WyAtbiBcXFwiJE9MRF9NT0RFXFxcIiBdIHx8IGtzZnRfc2tpcCBcXFwiZmFpbGVkIHRvIHJlYWQgUkRNQSBuZXRucyBtb2RlXFxcIlxcbitcXG4rXFx0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHxcXG4rXFx0XFx0a3NmdF9za2lwIFxcXCJyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcXFwiXFxuK1xcdE1PREVfQ0hBTkdFRD0xXFxuK1xcbitcXHRpcCBuZXRucyBhZGQgXFxcIiROUzFcXFwiIHx8IHJldHVybiAxXFxuK1xcdGlwIG5ldG5zIGFkZCBcXFwiJE5TMlxcXCIgfHwgcmV0dXJuIDFcXG4rfVxcbitcXG4rY2xlYW51cCgpXFxuK3tcXG4rXFx0Y2xlYW51cF9kZXZzXFxuK1xcbitcXHRpcCBuZXRucyBkZWwgXFxcIiROUzFcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJE5TMlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFxuK1xcdGlmIFsgXFxcIiRNT0RFX0NIQU5HRURcXFwiIC1lcSAxIF07IHRoZW5cXG4rXFx0XFx0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIFxcXCIkT0xEX01PREVcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGZpXFxuK1xcbitcXHRmb3IgbSBpbiBcXFwiJHtNT0RTW0BdfVxcXCI7IGRvXFxuK1xcdFxcdG1vZHByb2JlIC1yIFxcXCIkbVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZG9uZVxcbit9XFxuK1xcbityZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lKClcXG4re1xcbitcXHRyZG1hIGRldiBoZWxwIDJcXHUwMDNlXFx1MDAyNjEgfCBncmVwIC1FcSAnbmV0bnMgLipuYW1lfG5hbWUgLipuZXRucydcXG4rfVxcbitcXG4rWyBcXFwiJChpZCAtdSlcXFwiIC1lcSAwIF0gfHwga3NmdF9za2lwIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbituZWVkX2NtZCBpcFxcbituZWVkX2NtZCByZG1hXFxuK25lZWRfY21kIG1vZHByb2JlXFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rZm9yIG0gaW4gXFxcIiR7TU9EU1tAXX1cXFwiOyBkb1xcbitcXHRtb2RpbmZvIFxcXCIkbVxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIHx8IGtzZnRfc2tpcCBcXFwibW9kdWxlICRtIG5vdCBmb3VuZFxcXCJcXG4rXFx0bW9kcHJvYmUgXFxcIiRtXFxcIiB8fCBmYWlsIFxcXCJmYWlsZWQgdG8gbG9hZCAkbVxcXCJcXG4rZG9uZVxcbitcXG4rc2V0dXAgfHwgZmFpbCBcXFwiZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlc1xcXCJcXG4rXFxuK2t0YXBfcHJpbnRfaGVhZGVyXFxuK2t0YXBfc2V0X3BsYW4gN1xcbitcXG4raWYgc2V0dXBfZGV2cyBcXHUwMDI2XFx1MDAyNlxcbisgICByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzFcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfbnMgXFxcIiROUzFcXFwiIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICByZG1hIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmV0bnMgXFxcIiROUzJcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICByZG1hX2Rldl9leGlzdHMgXFxcIiROUzFcXFwiIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMlxcXCIgXFxcIiRSWEVfU0FNRVxcXCI7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX1NBTUVfTkFNRVNcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX1NBTUVfTkFNRVNcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzIHx8XFxuKyAgICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5ldG5zIFxcXCIkTlMxXFxcIiB8fFxcbisgICAhIHJkbWFfbnMgXFxcIiROUzFcXFwiIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiB8fFxcbisgICAhIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgfHxcXG4rICAgISByZG1hX25zIFxcXCIkTlMyXFxcIiBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5hbWUgXFxcIiRSWEVfU0FNRVxcXCI7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2VsaWYgcmRtYV9ucyBcXFwiJE5TMVxcXCIgZGV2IHNldCBcXFwiJFJYRV9TQU1FXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXFxcIlxcbitlbGlmIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMVxcXCIgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgICByZG1hX2Rldl9leGlzdHMgXFxcIiROUzJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfTU9WRV9SRU5BTUVcXFwiXFxuK2VsaWYgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICAgIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9ORVdcXFwiOyB0aGVuXFxuK1xcdGlmIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMlxcXCIgXFxcIiRSWEVfTkVXXFxcIiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcXFwiXFxcIiBcXFwiJFJYRV9BXFxcIjsgdGhlblxcbitcXHRcXHRrdGFwX3Rlc3RfcGFzcyBcXFwiJFRFU1RfTU9WRV9SRU5BTUVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfUkVOQU1FXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX1JFTkFNRVxcXCJcXG4rZmlcXG4rY2xlYW51cF9kZXZzXFxuK1xcbitpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3NraXAgXFxcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXFxcIlxcbitlbGlmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK2VsaWYgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiBuYW1lIFxcXCIkUlhFX05FV1xcXCI7IHRoZW5cXG4rXFx0aWYgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9ORVdcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICEgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX0FcXFwiOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK1xcdGZpXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitlbGlmIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgICAgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5hbWUgXFxcIiRSWEVfTkVXXFxcIjsgdGhlblxcbitcXHRpZiByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9ORVdcXFwiIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitcXHRlbGlmIHJkbWFfZGV2X2V4aXN0cyBcXFwiXFxcIiBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiXFxcIiBcXFwiJFJYRV9ORVdcXFwiOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVxcXCJcXG4rXFx0ZmlcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitlbGlmICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5hbWUgXFxcIiRSWEVfU0FNRVxcXCIgfHxcXG4rICAgICAhIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgfHxcXG4rICAgICAhIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiB8fFxcbisgICAgICEgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9TQU1FXFxcIjsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitlbHNlXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJE5TMlxcXCJcXG4rXFx0cmV0dXJuZWQ9JCh3YWl0X3JkbWFfZGV2X29uX25ldGRldiBcXFwiJERVTU1ZX0JcXFwiKVxcbitcXHRrdGFwX3ByaW50X21zZyBcXFwiZGV2aWNlIHJldHVybmVkIHRvIGluaXRfbmV0IGFzICcke3JldHVybmVkOi1cXHUwMDNjbWlzc2luZ1xcdTAwM2V9J1xcXCJcXG4rXFx0aWYgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgIFsgLW4gXFxcIiRyZXR1cm5lZFxcXCIgXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICBbIFxcXCIkcmV0dXJuZWRcXFwiICE9IFxcXCIkUlhFX1NBTUVcXFwiIF0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgWyBcXFwiJHtyZXR1cm5lZCNpYmRldn1cXFwiICE9IFxcXCIkcmV0dXJuZWRcXFwiIF07IHRoZW5cXG4rXFx0XFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX1RFQVJET1dOX1JFVFVSTlxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitcXHRmaVxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2t0YXBfZmluaXNoZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6MjcuNTAwNjU0NjQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM3NzI4NTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EX1NSUFwiLFxuICAgIFwiUkRNQV9SWEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfZGV2aWNlX3Zpc2libGVcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgICBcInNycF9uZXRfbmFtZXNwYWNlXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDc2YWU5ZjdjNTU5MzVmYjFjMzhiODk4NmQ5MDVkNGVlZDU1OWY2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDAzOjU1OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuQEAgLTEyLDYgKzEyLDEwIEBAIERlc2NyaXB0aW9uOiBcdEludGVyZmFjZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBSRE1BLWNhYmxlIEhDQXMgaW4gcmVzcGVjdCB0b1xuIFx0XHRmb3IgdGhpcyBIQ0EgaGFzIHRvIGJlIGNyZWF0ZWQ6XG4gXHRcdG1rZGlyIC1wIC9jb25maWcvcmRtYV9jbS9cdTAwM2NoY2FcdTAwM2VcbiBcbitcdFx0Tm90ZTogY29uZmlnZnMgaGFzIG5vIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQsIHNvIHRoaXNcbitcdFx0aW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW5cbitcdFx0ZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcyAocG9zc2libGUgaW4gZXhjbHVzaXZlIG5ldG5zIG1vZGUpLlxuK1xuIFxuIFdoYXQ6IFx0XHQvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlL3BvcnRzL1x1MDAzY3BvcnQtbnVtXHUwMDNlL2RlZmF1bHRfcm9jZV9tb2RlXG4gRGF0ZTogXHRcdE5vdmVtYmVyIDI5LCAyMDE1XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uNDUyM2MxODg0ZDY3MTUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI3NTIsNiArMjc1MiwxMyBAQCBSRE1BXG4gVGhlIFwicmRtYVwiIGNvbnRyb2xsZXIgcmVndWxhdGVzIHRoZSBkaXN0cmlidXRpb24gYW5kIGFjY291bnRpbmcgb2ZcbiBSRE1BIHJlc291cmNlcy5cbiBcbitXaGVuIFJETUEgZGV2aWNlcyBhcmUgaXNvbGF0ZWQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIChleGNsdXNpdmUgbW9kZSksXG4rZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgb25seSB3aXRoaW4gYSBuZXR3b3JrIG5hbWVzcGFjZS4gVGhlIGRldmljZSBsaW5lc1xuK2JlbG93IGFyZSB0aGVyZWZvcmUgc2NvcGVkIHRvIHRoZSByZWFkaW5nIG9yIHdyaXRpbmcgcHJvY2VzcydzIG5ldHdvcmtcbituYW1lc3BhY2U6IG9ubHkgZGV2aWNlcyBhY2Nlc3NpYmxlIGZyb20gdGhhdCBuYW1lc3BhY2UgYXJlIGxpc3RlZCwgYW5kIGFcbitsaW1pdCBpcyBhcHBsaWVkIHRvIHRoZSBkZXZpY2Ugb2YgdGhhdCBuYW1lIGluIHRoYXQgbmFtZXNwYWNlLiBDb25maWd1cmVcbitsaW1pdHMgZnJvbSB0aGUgc2FtZSBuZXR3b3JrIG5hbWVzcGFjZSBhcyB0aGUgd29ya2xvYWRzLlxuK1xuIFJETUEgSW50ZXJmYWNlIEZpbGVzXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG5pbmRleCAxZjAzN2ZlMDE0NTBlZi4uN2EyMTZlZDQ1MTk5YmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbkBAIC0xNyw2ICsxNyw4IEBAXG4gdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiB7XG4gXHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5hbWUgPSBkZXZpY2UtXHUwMDNlbmFtZTtcbitcdGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0bnNfc2hhcmVkID0gaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM7XG4rXHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0LCByZG1hX2Rldl9uZXQoZGV2aWNlKSk7XG4gXHRyZG1hY2dfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNmRldmljZS1cdTAwM2VjZ19kZXZpY2UpO1xuIH1cbiBcbkBAIC0zNCw2ICszNiwxNiBAQCB2b2lkIGliX2RldmljZV91bnJlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4gXHRyZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2ZGV2aWNlLVx1MDAzZWNnX2RldmljZSk7XG4gfVxuIFxuK3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5ldCwgbmV0KTtcbit9XG4rXG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZClcbit7XG4rXHRXUklURV9PTkNFKGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0bnNfc2hhcmVkLCBzaGFyZWQpO1xuK31cbitcbiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcbiBcdFx0XHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdCBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbmluZGV4IDg5MWU1MmFmYjhmNGJhLi5jMzg5ZDRlMzdiNmJjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuQEAgLTY1LDYgKzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwLCBncm91cCk7XG4gfVxuIFxuKy8qXG4rICogY29uZmlnZnMgaXMgbm90IG5ldCBuYW1lc3BhY2UgYXdhcmUsIHNvIGEgbmFtZSBzaGFyZWQgYnkgZGV2aWNlcyBpblxuKyAqIGRpZmZlcmVudCBuYW1lc3BhY2VzIHJlc29sdmVzIHRvIHRoZSBmaXJzdCBtYXRjaCBoZXJlLlxuKyAqL1xuIHN0YXRpYyBib29sIGZpbHRlcl9ieV9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliX2Rldiwgdm9pZCAqY29va2llKVxuIHtcbiBcdHJldHVybiAhc3RyY21wKGRldl9uYW1lKFx1MDAyNmliX2Rldi1cdTAwM2VkZXYpLCBjb29raWUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbmluZGV4IDE5MTA0YzU0MmIyNzBkLi45Y2Q2NzFlMmRiMjA0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuQEAgLTE1Niw2ICsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfUkRNQVxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZCk7XG4gXG4gaW50IGliX3JkbWFjZ190cnlfY2hhcmdlKHN0cnVjdCBpYl9yZG1hY2dfb2JqZWN0ICpjZ19vYmosXG4gXHRcdFx0IHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbkBAIC0xNzMsNiArMTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbitcdFx0XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdFx0ICAgICBib29sIHNoYXJlZClcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IGliX3JkbWFjZ190cnlfY2hhcmdlKHN0cnVjdCBpYl9yZG1hY2dfb2JqZWN0ICpjZ19vYmosXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0ICAgICAgIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUgcmVzb3VyY2VfaW5kZXgpXG5AQCAtMzU2LDcgKzM2OCw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG4gXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcbitcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XG4gdm9pZCByZG1hX25sX25ldF9leGl0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbmluZGV4IGI4MTkzZTA3N2E3NDZmLi5jZmZiMGRlMWMwMDE2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xuIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlO1xuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxuLVx0XHQgXCJTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVwiKTtcbitcdFx0IFwiU2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXCIpO1xuIC8qKlxuICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkXG4gICpcdFx0XHQgICAgIGZyb20gYSBzcGVjaWZpZWQgbmV0IG5hbWVzcGFjZSBvciBub3QuXG5AQCAtMjY4LDcgKzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCk7XG4rXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKTtcbiBcbiAvKiBQb2ludGVyIHRvIHRoZSBSQ1UgaGVhZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGliX3BvcnRfZGF0YSBhcnJheSAqL1xuIHN0cnVjdCBpYl9wb3J0X2RhdGFfcmN1IHtcbkBAIC0zNTEsMTMgKzM1MiwxNSBAQCB2b2lkIGliX2RldmljZV9wdXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdHhhX2Zvcl9lYWNoIChcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4rXHRcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4gXHRcdFx0cmV0dXJuIGRldmljZTtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTM5NSw3ICszOTgsNyBAQCBpbnQgaWJfZGV2aWNlX3JlbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHtcbitcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lLCByZG1hX2Rldl9uZXQoaWJkZXYpKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG5AQCAtNDM1LDcgKzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuKy8qXG4rICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAnJWQnIHN0eWxlIEBuYW1lIHBhdHRlcm4gd2l0aGluIG5ldCBuYW1lc3BhY2VcbisgKiBAbmV0LiBSZXR1cm5zIHRoZSBpbmRleCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8uIFRoZSBjYWxsZXIgYnVpbGRzXG4rICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cbisgKi9cbitzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuQEAgLTQ0OCw2ICs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR4YV9mb3JfZWFjaCAoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSkge1xuIFx0XHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xuIFxuK1x0XHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzc2NhbmYoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksIG5hbWUsIFx1MDAyNmkpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSBJTlRfTUFYKVxuQEAgLTQ2MiwxNSArNDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdH1cbiBcbiBcdHJjID0gaWRhX2FsbG9jKFx1MDAyNmludXNlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyYyA9IGRldl9zZXRfbmFtZShcdTAwMjZpYmRldi1cdTAwM2VkZXYsIG5hbWUsIHJjKTtcbiBvdXQ6XG4gXHRpZGFfZGVzdHJveShcdTAwMjZpbnVzZSk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIF9fYWxsb2NfbmFtZV9pZChuZXQsIG5hbWUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aW50IGlkO1xuK1xuK1x0aWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpO1xuK1x0aWYgKGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaWQ7XG4rXG4rXHRyZXR1cm4gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgaWQpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcbkBAIC0xMDk0LDYgKzExMTcsNyBAQCBzdGF0aWMgaW50IGFkZF9hbGxfY29tcGF0X2RldnModm9pZClcbiBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcbiB7XG4gXHRzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0O1xuK1x0c3RydWN0IGliX2RldmljZSAqZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTExMTYsNiArMTE0MCwxMiBAQCBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4rXHQvKiBLZWVwIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UncyByZG1hIGNncm91cCB2aXNpYmlsaXR5IGluIHN5bmMuICovXG4rXHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHR4YV9mb3JfZWFjaF9tYXJrZWQoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldiwgREVWSUNFX1JFR0lTVEVSRUQpXG4rXHRcdGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChkZXYsIGVuYWJsZSk7XG4rXHR1cF9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1xuIFx0aWYgKGVuYWJsZSlcbiBcdFx0cmV0ID0gYWRkX2FsbF9jb21wYXRfZGV2cygpO1xuIFx0ZWxzZVxuQEAgLTExNTEsOCArMTE4MSwxNyBAQCBzdGF0aWMgdm9pZCByZG1hX2Rldl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSByZWFsIGRldmljZSBpcyBpbiB0aGUgTlMgdGhlbiBtb3ZlIGl0IGJhY2sgdG8gaW5pdC5cbitcdFx0ICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0XG4rXHRcdCAqIGNhbm5vdCBtYWtlIHRoZSB0ZWFyZG93biBtb3ZlIGZhaWwuXG4gXHRcdCAqL1xuLVx0XHRyZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFx1MDAyNmluaXRfbmV0KTtcbitcdFx0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcdTAwMjZkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XG4rXHRcdFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCxcbitcdFx0XHRcdFx0XHQgICAgTlVMTCwgXCJpYmRldiVkXCIpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRXQVJOKDEsXG4rXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIG1vdmUgUkRNQSBkZXZpY2UgJXMgdG8gaW5pdF9uZXQgb24gbmV0bnMgZXhpdDogJWRcXG5cIixcbitcdFx0XHRcdCAgICAgZGV2X25hbWUoXHUwMDI2ZGV2LVx1MDAzZWRldiksIHJldCk7XG4rXHRcdH1cbiBcbiBcdFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiBcdFx0ZG93bl9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuQEAgLTEyMDYsNyArMTI0NSw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuIC8qXG4tICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhpcyBpc1xuKyAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoZSBkZXZpY2VcbisgKiBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIG5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0by4gVGhpcyBpc1xuICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS5cbiAgKi9cbiBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbkBAIC0xMjIzLDcgKzEyNjMsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSkge1xuK1x0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpLFxuK1x0XHRcdFx0ICAgIHJkbWFfZGV2X25ldChkZXZpY2UpKSkge1xuIFx0XHRyZXQgPSAtRU5GSUxFO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMzIyLDYgKzEzNjMsNyBAQCBzdGF0aWMgaW50IGVuYWJsZV9kZXZpY2VfYW5kX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4gXHQgKi9cbiBcdHJlZmNvdW50X3NldChcdTAwMjZkZXZpY2UtXHUwMDNlcmVmY291bnQsIDIpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcdGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChkZXZpY2UsIGliX2RldmljZXNfc2hhcmVkX25ldG5zKTtcbiBcdHhhX3NldF9tYXJrKFx1MDAyNmRldmljZXMsIGRldmljZS1cdTAwM2VpbmRleCwgREVWSUNFX1JFR0lTVEVSRUQpO1xuIFxuIFx0LypcbkBAIC0xMzg4LDggKzE0MzAsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiAvKipcbiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlXG4gICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbFxuLSAqIFx0ICBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGUgcGFzc2VkIGRldmljZSBuYW1lLlxuKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXlcbisgKlx0ICBpbmNsdWRlIGEgJyUnIHdoaWNoIHdpbGwgY2F1c2UgYSB1bmlxdWUgaW5kZXggdG8gYmUgYWRkZWQgdG8gdGhlXG4rICpcdCAgcGFzc2VkIGRldmljZSBuYW1lLlxuICAqIEBkbWFfZGV2aWNlOiBwb2ludGVyIHRvIGEgRE1BLWNhcGFibGUgZGV2aWNlLiBJZiAlTlVMTCwgdGhlbiB0aGUgSUJcbiAgKlx0ICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxlciBzaG91bGQgZnVsbHlcbiAgKlx0XHRzZXR1cCB0aGUgaWJkZXYgZm9yIERNQS4gVGhpcyB1c3VhbGx5IG1lYW5zIHVzaW5nIGRtYV92aXJ0X29wcy5cbkBAIC0xNjcwLDE0ICsxNzEzLDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuIFxuK3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4rXHRcdGlmIChkZXZpY2UgIT0gc2tpcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLypcbisgKiBDaG9vc2UgdGhlIG5hbWUgQGRldmljZSBzaG91bGQgdXNlIGluIG5ldCBuYW1lc3BhY2UgQG5ldC4gQHJlcXVlc3RlZF9uYW1lXG4rICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWVcbisgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJyVkJyBAZmFsbGJhY2tfcGF0dGVybiBmb3IgdGVhcmRvd24uIFRoZVxuKyAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbS5cbisgKi9cbitzdGF0aWMgaW50IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuLFxuK1x0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxuK3tcbitcdGludCBpZDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXG4rXHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbitcdFx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSkpIHtcbitcdFx0XHQqbmV3X25hbWUgPSByZXF1ZXN0ZWRfbmFtZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbitcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4rXHRcdCpuZXdfbmFtZSA9IGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghZmFsbGJhY2tfcGF0dGVybilcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFwiaWJkZXYldVwiLCBkZXZpY2UtXHUwMDNlaW5kZXgpO1xuK1x0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBidWYpKSB7XG4rXHRcdCpuZXdfbmFtZSA9IGJ1ZjtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7XG4rXHRpZiAoaWQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBpZDtcbitcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgZmFsbGJhY2tfcGF0dGVybiwgaWQpO1xuK1x0Km5ld19uYW1lID0gYnVmO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogVGhlIGNhbGxlciBtdXN0IHBhc3MgaW4gYSBkZXZpY2UgdGhhdCBoYXMgdGhlIGtyZWYgaGVsZCBhbmQgdGhlIHJlZmNvdW50XG4gICogcmVsZWFzZWQuIElmIHRoZSBkZXZpY2UgaXMgaW4gY3VyX25ldCBhbmQgc3RpbGwgcmVnaXN0ZXJlZCB0aGVuIGl0IGlzIG1vdmVkXG4gICogaW50byBuZXQuXG4rICpcbisgKiBOYW1pbmcgcnVsZXMgYXJlIGhhbmRsZWQgYnkgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKCkuXG4gICovXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldClcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pXG4ge1xuK1x0Y2hhciBidWZbSUJfREVWSUNFX05BTUVfTUFYXTtcbitcdGNvbnN0IGNoYXIgKm5ld19uYW1lO1xuIFx0aW50IHJldDIgPSAtRUlOVkFMO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNjk0LDMwICsxODA2LDY4IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRpZiAoIWZhbGxiYWNrX3BhdHRlcm4pIHtcbitcdFx0LypcbitcdFx0ICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZ1xuK1x0XHQgKiBkb3duLCBzbyBhIGRvb21lZCB1c2VyIG1vdmUgZG9lcyBub3QgZGlzYWJsZSBhIGxpdmUgZGV2aWNlLlxuK1x0XHQgKi9cbitcdFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcdFx0cmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZixcbitcdFx0XHRcdFx0ICAgICAgIHNpemVvZihidWYpLCBcdTAwMjZuZXdfbmFtZSk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldi5rb2JqLCBLT0JKX1JFTU9WRSk7XG4gXHRkaXNhYmxlX2RldmljZShkZXZpY2UpO1xuIFxuIFx0Lypcbi1cdCAqIEF0IHRoaXMgcG9pbnQgbm8gb25lIGNhbiBiZSB1c2luZyB0aGUgZGV2aWNlLCBzbyBpdCBpcyBzYWZlIHRvXG4tXHQgKiBjaGFuZ2UgdGhlIG5hbWVzcGFjZS5cbitcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXG4rXHQgKiBub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGRpc2FibGVkLCBjbG9zaW5nIHJhY2VzIHdpdGggYSBjb25jdXJyZW50XG4rXHQgKiByZWdpc3RyYXRpb24gb3IgcmVuYW1lLCB0aGVuIHB1Ymxpc2ggdGhlIG5ldyBuYW1lc3BhY2UgYXQgdGhlIHN5c2ZzXG4rXHQgKiBsZXZlbC5cbiBcdCAqL1xuLVx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbitcdGRvd25fd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHRyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2bmV3X25hbWUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xuK1x0XHRcdFdBUk4oMSxcbitcdFx0XHQgICAgIFwiJXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXFxuXCIsXG4rXHRcdFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcbitcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuK1x0XHRcdGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKGRldmljZSwgbmV0KTtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHR9XG4rXHRcdGdvdG8gcmVuYW1lX2RvbmU7XG4rXHR9XG4gXG4tXHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4tXHQvKlxuLVx0ICogQ3VycmVudGx5IHJkbWEgZGV2aWNlcyBhcmUgc3lzdGVtIHdpZGUgdW5pcXVlLiBTbyB0aGUgZGV2aWNlIG5hbWVcbi1cdCAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZVxuLVx0ICogYXQgdGhlIHN5c2ZzIGxldmVsLlxuLVx0ICovXG4tXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKTtcbi1cdHVwX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuK1x0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpO1xuK1x0cmV0ID0gZGV2aWNlX3JlbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LCBuZXdfbmFtZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdGRldl93YXJuKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsXG4tXHRcdFx0IFwiJXM6IENvdWxkbid0IHJlbmFtZSBkZXZpY2UgYWZ0ZXIgbmFtZXNwYWNlIGNoYW5nZVxcblwiLFxuLVx0XHRcdCBfX2Z1bmNfXyk7XG4tXHRcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xuLVx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbitcdFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcbitcdFx0XHRXQVJOKDEsXG4rXHRcdFx0ICAgICBcIiVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcblwiLFxuK1x0XHRcdCAgICAgX19mdW5jX18sIHJldCk7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LFxuK1x0XHRcdFx0IFwiJXM6IENvdWxkbid0IHJlbmFtZSBkZXZpY2UgYWZ0ZXIgbmFtZXNwYWNlIGNoYW5nZVxcblwiLFxuK1x0XHRcdFx0IF9fZnVuY19fKTtcbitcdFx0XHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cbitcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbitcdFx0XHRpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIGN1cl9uZXQpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRzdHJzY3B5KGRldmljZS1cdTAwM2VuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSxcbitcdFx0XHRJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuIFx0fVxuK3JlbmFtZV9kb25lOlxuK1x0dXBfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4gXG4gXHRyZXQyID0gZW5hYmxlX2RldmljZV9hbmRfZ2V0KGRldmljZSk7XG4gXHRpZiAocmV0Mikge1xuQEAgLTE3NDAsMzYgKzE4OTAsNzIgQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuIH1cbiBcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpXG4rXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IHJldDtcbiBcbiBcdG5ldCA9IGdldF9uZXRfbnNfYnlfZmQobnNfZmQpO1xuIFx0aWYgKElTX0VSUihuZXQpKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXCIpO1xuIFx0XHRyZXQgPSBQVFJfRVJSKG5ldCk7XG4gXHRcdGdvdG8gbmV0X2VycjtcbiBcdH1cbiBcbiBcdGlmICghbmV0bGlua19uc19jYXBhYmxlKHNrYiwgbmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJNaXNzaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCIpO1xuIFx0XHRyZXQgPSAtRVBFUk07XG4gXHRcdGdvdG8gbnNfZXJyO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIE1vdmluZyBhIGRldmljZSB0byB0aGUgbmFtZXNwYWNlIGl0IGFscmVhZHkgbGl2ZXMgaW4gaXMgYSBuby1vcDsgYVxuK1x0ICogc3VwcGxpZWQgbmFtZSBzdGlsbCByZW5hbWVzIGl0IGluIHBsYWNlLlxuK1x0ICovXG4rXHRpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmRldi1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0KSkpIHtcbitcdFx0cmV0ID0gbmFtZSA/IGliX2RldmljZV9yZW5hbWUoZGV2LCBuYW1lKSA6IDA7XG4rXG4rXHRcdGlmIChyZXQgPT0gLUVFWElTVClcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcIik7XG4rXHRcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIlVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbitcdFx0Z290byBuc19lcnI7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQWxsIHRoZSBpYl9jbGllbnRzLCBpbmNsdWRpbmcgdXZlcmJzLCBhcmUgcmVzZXQgd2hlbiB0aGUgbmFtZXNwYWNlIGlzXG4gXHQgKiBjaGFuZ2VkIGFuZCB0aGlzIGNhbm5vdCBiZSBibG9ja2VkIHdhaXRpbmcgZm9yIHVzZXJzcGFjZSB0byBkb1xuIFx0ICogc29tZXRoaW5nLCBzbyBkaXNhc3NvY2lhdGlvbiBpcyBtYW5kYXRvcnkuXG4gXHQgKi9cbi1cdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQgfHwgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHtcbitcdGlmIChpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiQ2Fubm90IGNoYW5nZSBuZXQgbmFtZXNwYWNlIG9mIFJETUEgZGV2aWNlIGluIHNoYXJlZCBuZXRucyBtb2RlXCIpO1xuK1x0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBuc19lcnI7XG4rXHR9XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2UgY2hhbmdlcyAobm8gZGlzYXNzb2NpYXRlIHN1cHBvcnQpXCIpO1xuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0aWJfZGV2aWNlX3B1dChkZXYpO1xuLVx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0KTtcbitcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnMsIG5ldCwgbmFtZSxcbitcdFx0XHRcdCAgICBOVUxMKTtcbiBcdHB1dF9kZXZpY2UoXHUwMDI2ZGV2LVx1MDAzZWRldik7XG4rXHRpZiAocmV0ID09IC1FRVhJU1QpXG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcIik7XG4rXHRlbHNlIGlmIChyZXQgPT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgbmFtZSlcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIlVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbiBcbiBcdHB1dF9uZXQobmV0KTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbmluZGV4IGY1OTljMjRiMzRlODFiLi40NzNiZjk2NjdmODNlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbkBAIC0xMTc3LDYgKzExNzcsMjQgQEAgc3RhdGljIGludCBubGRldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghZGV2aWNlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbitcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbitcdFx0dTMyIG5zX2ZkO1xuK1xuK1x0XHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuK1x0XHRcdG5sYV9zdHJzY3B5KG5hbWUsIHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0sXG4rXHRcdFx0XHQgICAgSUJfREVWSUNFX05BTUVfTUFYKTtcbitcdFx0XHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdG5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTtcbitcdFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxuK1x0XHRcdFx0XHQgICAgICBuYW1lWzBdID8gbmFtZSA6IE5VTEwsIGV4dGFjayk7XG4rXHRcdGdvdG8gcHV0X2RvbmU7XG4rXHR9XG4rXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuIFx0XHRjaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9O1xuIFxuQEAgLTExOTAsMTQgKzEyMDgsNiBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRnb3RvIGRvbmU7XG4gXHR9XG4gXG4tXHRpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7XG4tXHRcdHUzMiBuc19mZDtcbi1cbi1cdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuLVx0XHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQpO1xuLVx0XHRnb3RvIHB1dF9kb25lO1xuLVx0fVxuLVxuIFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkge1xuIFx0XHR1OCB1c2VfZGltO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXG5pbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXG5AQCAtNzAwLDYgKzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxuIFx0aWYgKHFwX3R5cGUgIT0gSUJfUVBUX1NNSSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKlxuK1x0ICogU0VMaW51eCBsYWJlbHMgYW4gZW5kcG9ydCBieSAoZGV2aWNlIG5hbWUsIHBvcnQpIGZyb20gYSBnbG9iYWxcbitcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxuK1x0ICogdGhlIHNhbWUgbGFiZWw7IGRpc3Rpbmd1aXNoaW5nIHRoZW0gd291bGQgbmVlZCBuZXQgbmFtZXNwYWNlIHN1cHBvcnRcbitcdCAqIGluIHRoZSBwb2xpY3kgbGFuZ3VhZ2UgYW5kIHRvb2xpbmcuXG4rXHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcbiBcdHJldCA9IHNlY3VyaXR5X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldChhZ2VudC1cdTAwM2VzZWN1cml0eSxcbiBcdFx0XHRcdFx0XHRkZXZfbmFtZShcdTAwMjZhZ2VudC1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2KSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxuIFx0XHRyeGVfZXJyX3VjKHVjLCBcImNsZWFudXAgZmFpbGVkLCBlcnIgPSAlZFxcblwiLCBlcnIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1Yylcbit7XG4rfVxuK1xuIC8qIHBkICovXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuIHtcbkBAIC0xNDc4LDYgKzE0ODIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgcnhlX2Rldl9vcHMgPSB7XG4gXHQuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsXG4gXHQuZGV0YWNoX21jYXN0ID0gcnhlX2RldGFjaF9tY2FzdCxcbiBcdC5kZXZpY2VfZ3JvdXAgPSBcdTAwMjZyeGVfYXR0cl9ncm91cCxcbitcdC5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LFxuIFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcbiBcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXG4gXHQuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG5pbmRleCBhY2JkNzg3ZGUyNjViNS4uYTA3MGZjZjg2ZThhNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbkBAIC0zMTg5LDEwICszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcbiBcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4gXG4rLypcbisgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcbisgKiBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcmRtYV9kZXZfbmV0KGhvc3QtXHUwMDNlc3JwX2Rldi1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XG4gXHQubmFtZSAgICA9IFwiaW5maW5pYmFuZF9zcnBcIixcbiBcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3Vwcyxcbi1cdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldlxuK1x0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LFxuK1x0Lm5zX3R5cGUgPSBcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxuK1x0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG5pbmRleCA0MDRlNzQ2NTUyY2E4Zi4uNzExNzBjYjBlMTllMzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuQEAgLTcsNiArNyw3IEBAXG4gI2RlZmluZSBfQ0dST1VQX1JETUFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nncm91cC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuIFxuIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUge1xuIFx0UkRNQUNHX1JFU09VUkNFX0hDQV9IQU5ETEUsXG5AQCAtMzQsNiArMzUsMTUgQEAgc3RydWN0IHJkbWFjZ19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZGV2X25vZGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRycG9vbHM7XG4gXHRjaGFyXHRcdFx0Km5hbWU7XG4rXHQvKlxuK1x0ICogTmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8uIEBuZXRuc19zaGFyZWQgbWlycm9yc1xuK1x0ICogaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM6IHdoZW4gdHJ1ZSB0aGUgZGV2aWNlIGlzIHZpc2libGUgZnJvbSBldmVyeVxuK1x0ICogbmV0IG5hbWVzcGFjZSAoc2hhcmVkIG1vZGUpOyBvdGhlcndpc2UgQG5ldCBpcyB0aGUgb25seSBuYW1lc3BhY2VcbitcdCAqIHRoYXQgbWF5IHNlZSBhbmQgY29uZmlndXJlIGl0LiBAbmV0bnNfc2hhcmVkIGlzIHVwZGF0ZWQgd2hlbiB0aGVcbitcdCAqIHNoYXJpbmcgbW9kZSBjaGFuZ2VzLCBzbyB1c2Uge1JFQUQsV1JJVEV9X09OQ0UoKSB0byBhY2Nlc3MgaXQuXG4rXHQgKi9cbitcdHBvc3NpYmxlX25ldF90XHRcdG5ldDtcbitcdGJvb2xcdFx0XHRuZXRuc19zaGFyZWQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbmluZGV4IDNhZjk0NmVjYmFjM2VkLi5lZTExYzNiYmJhZTIyYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG4rKysgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuQEAgLTUxNiw3ICs1MTYsMTAgQEAgZW51bSByZG1hX25sZGV2X2F0dHIge1xuIFx0UkRNQV9OTERFVl9BVFRSX0RFVl9QUk9UT0NPTCxcdFx0Lyogc3RyaW5nICovXG4gXG4gXHQvKlxuLVx0ICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3RcbitcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcbitcdCAqIHdpdGggUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FIChhIGxpdGVyYWwgZGV2aWNlIG5hbWUpIHRvIGFsc28gcmVuYW1lXG4rXHQgKiB0aGUgZGV2aWNlIGluIHRoZSBkZXN0aW5hdGlvbiBuYW1lc3BhY2U7IHRoZSBtb3ZlIGZhaWxzIHdpdGggLUVFWElTVFxuK1x0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXG4gXHQgKi9cbiBcdFJETUFfTkxERVZfTkVUX05TX0ZELFx0XHRcdC8qIHUzMiAqL1xuIFx0LypcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL3JkbWEuYyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuKysrIGIva2VybmVsL2Nncm91cC9yZG1hLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nncm91cF9yZG1hLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbiBcbiAjZGVmaW5lIFJETUFDR19NQVhfU1RSIFwibWF4XCJcbiBcbkBAIC00NjQsNiArNDY1LDEzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4gfVxuIEVYUE9SVF9TWU1CT0wocmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKTtcbiBcbisvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXG4rc3RhdGljIGJvb2wgcmRtYWNnX2RldmljZV92aXNpYmxlKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRShkZXZpY2UtXHUwMDNlbmV0bnNfc2hhcmVkKSB8fFxuK1x0ICAgICAgIG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZW5ldCksIGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnMpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7XG5AQCAtNDcxLDcgKzQ3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4rXHRcdGlmIChyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuIFx0XHRcdHJldHVybiBkZXZpY2U7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC02MjYsNiArNjM1LDkgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuK1x0XHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRzZXFfcHJpbnRmKHNmLCBcIiVzIFwiLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4gXG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG5AQCAtNjQ4LDYgKzY2MCw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG4rXHRcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG4gXG4gXHRcdHNlcV9wcmludGYoc2YsIFwiJXMgXCIsIGRldmljZS1cdTAwM2VuYW1lKTtcbkBAIC02NzcsNiArNjkyLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdG11dGV4X2xvY2soXHUwMDI2cmRtYWNnX211dGV4KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbitcdFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbiBcdFx0c2VxX3ByaW50ZihzZiwgXCIlcyBcIiwgZGV2aWNlLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xuaW5kZXggNjNlMjg2ZTJkZmFhOGQuLmZmOWM5YzM1Y2MyZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXG4rKysgYi9uZXQvc21jL3NtY19wbmV0LmNcbkBAIC0zMDQsMTMgKzMwNCwxOCBAQCBzdGF0aWMgYm9vbCBzbWNfcG5ldGlkX3ZhbGlkKGNvbnN0IGNoYXIgKnBuZXRfbmFtZSwgY2hhciAqcG5ldGlkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi9cbi1zdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoY2hhciAqaWJfbmFtZSlcbisvKlxuKyAqIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLCByZXN0cmljdGVkIHRvIHRoZSBkZXZpY2VzXG4rICogYWNjZXNzaWJsZSBmcm9tIEBuZXQuIFRoZSBkZXZpY2UgbWlnaHQgbm90IGV4aXN0LlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmliX25hbWUpXG4ge1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGliZGV2LCBcdTAwMjZzbWNfaWJfZGV2aWNlcy5saXN0LCBsaXN0KSB7XG4rXHRcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKGliZGV2LVx1MDAzZWliZGV2LCBuZXQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXN0cm5jbXAoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSwgaWJfbmFtZSxcbiBcdFx0XHQgICAgIHNpemVvZihpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VuYW1lKSkgfHxcbiBcdFx0ICAgIChpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VkZXYucGFyZW50IFx1MDAyNlx1MDAyNlxuQEAgLTQwOCw4ICs0MTMsOCBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9ldGgoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuLVx0XHRcdCAgIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbitzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0ICAgY2hhciAqaWJfbmFtZSwgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxuIHtcbiBcdHN0cnVjdCBzbWNfcG5ldGVudHJ5ICp0bXBfcGUsICpuZXdfcGU7XG4gXHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJfZGV2O1xuQEAgLTQxOSw3ICs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuIFx0Ym9vbCBuZXdfaWJkZXY7XG4gXG4gXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xuLVx0aWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihpYl9uYW1lKTtcbitcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcbiBcdGlmIChpYl9kZXYpIHtcbiBcdFx0aWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTtcbiBcdFx0aWYgKGliZGV2X2FwcGxpZWQpXG5AQCAtNTE4LDcgKzUyMyw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZW50ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdKVxuIFx0XHRcdGlmIChpYnBvcnQgXHUwMDNjIDEgfHwgaWJwb3J0IFx1MDAzZSBTTUNfTUFYX1BPUlRTKVxuIFx0XHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuLVx0XHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIHN0cmluZywgaWJwb3J0LCBwbmV0X25hbWUpO1xuK1x0XHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmICghcmMpXG4gXHRcdFx0bmV3X2liZGV2ID0gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAocmMgIT0gLUVFWElTVClcbkBAIC0xMTcwLDYgKzExNzUsOSBAQCBpbnQgc21jX3BuZXRpZF9ieV90YWJsZV9pYihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGliX3BvcnQpXG4gXHRzdHJ1Y3Qgc21jX25ldCAqc247XG4gXHRpbnQgcmMgPSAtRU5PRU5UO1xuIFxuK1x0aWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoc21jaWJkZXYtXHUwMDNlaWJkZXYsIFx1MDAyNmluaXRfbmV0KSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4gXHQvKiBnZXQgcG5ldHRhYmxlIGZvciBpbml0IG5hbWVzcGFjZSAqL1xuIFx0c24gPSBuZXRfZ2VuZXJpYyhcdTAwMjZpbml0X25ldCwgc21jX25ldF9pZCk7XG4gXHRwbmV0dGFibGUgPSBcdTAwMjZzbi1cdTAwM2VwbmV0dGFibGU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbmluZGV4IDA3YWY3ZjE1YzFiZjc0Li5hOTFjMTRjNDUwMDZlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQCBURVNUX1BST0dTIDo9IHJ4ZV9ycGluZ19iZXR3ZWVuX25ldG5zLnNoIFxcXG4gXHRcdHJ4ZV9pcHY2LnNoIFxcXG4gXHRcdHJ4ZV9zb2NrZXRfd2l0aF9uZXRucy5zaCBcXFxuIFx0XHRyeGVfdGVzdF9ORVRERVZfVU5SRUdJU1RFUi5zaCBcXFxuLVx0XHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoXG4rXHRcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXFxcbitcdFx0cnhlX25ldG5zX25hbWVzLnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5pbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbkBAIC0xLDMgKzEsNSBAQFxuIENPTkZJR19UVU5cbiBDT05GSUdfVkVUSFxuK0NPTkZJR19EVU1NWVxuK0NPTkZJR19ORVRfTlNcbiBDT05GSUdfUkRNQV9SWEVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE3ZTU3NzA2ZmRmZjc1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxuQEAgLTAsMCArMSwyODIgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBFeGVyY2lzZSBSRE1BIGRldmljZSBuYW1lIGhhbmRsaW5nIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXG4rXG4rc291cmNlIFwiJChkaXJuYW1lIFwiJDBcIikvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFwiXG4rXG4rTkFNRV9QUkVGSVg9XCJyeGVfbmV0bnNfbmFtZXNfJCRcIlxuK05FVERFVl9QUkVGSVg9XCJyeG4kJFwiXG4rTlMxPVwiJHtOQU1FX1BSRUZJWH1uczFcIlxuK05TMj1cIiR7TkFNRV9QUkVGSVh9bnMyXCJcbitSWEVfQT1cIiR7TkFNRV9QUkVGSVh9cnhlX2FcIlxuK1JYRV9CPVwiJHtOQU1FX1BSRUZJWH1yeGVfYlwiXG4rUlhFX1NBTUU9XCIke05BTUVfUFJFRklYfXJ4ZV9zYW1lXCJcbitSWEVfTkVXPVwiJHtOQU1FX1BSRUZJWH1yeGVfbmV3XCJcbitEVU1NWV9BPVwiJHtORVRERVZfUFJFRklYfWFcIlxuK0RVTU1ZX0I9XCIke05FVERFVl9QUkVGSVh9YlwiXG4rT0xEX01PREU9XCJcIlxuK01PREVfQ0hBTkdFRD0wXG4rTU9EUz0oXCJkdW1teVwiIFwicmRtYV9yeGVcIilcbitURVNUX1NBTUVfTkFNRVM9XCJzYW1lIFJETUEgZGV2aWNlIG5hbWUgY2FuIGV4aXN0IGluIHR3byBuZXQgbmFtZXNwYWNlc1wiXG4rVEVTVF9NT1ZFX0NPTkZMSUNUPVwibW92ZSB3aXRob3V0IHJlbmFtZSBmYWlscyBvbiBkZXN0aW5hdGlvbiBuYW1lIGNvbmZsaWN0XCJcbitURVNUX01PVkVfUkVOQU1FPVwibW92ZSB0aGVuIHJlbmFtZSBzdWNjZWVkc1wiXG4rVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRT1cIm1vdmUgd2l0aCByZXF1ZXN0ZWQgZGVzdGluYXRpb24gbmFtZSBzdWNjZWVkc1wiXG4rVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUU9XCJzYW1lLW5ldG5zIHJlbmFtZSByZWplY3RzIGR1cGxpY2F0ZSBuYW1lXCJcbitURVNUX1RFQVJET1dOX1JFVFVSTj1cIm5ldG5zIGRlbGV0ZSByZXR1cm5zIGRldmljZSB0byBpbml0X25ldCBhbmQgcmVuYW1lcyBvbiBjb25mbGljdFwiXG4rXG4ra3NmdF9za2lwKClcbit7XG4rXHRrdGFwX3NraXBfYWxsIFwiJCpcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK31cbitcbitmYWlsKClcbit7XG4rXHRrdGFwX2V4aXRfZmFpbF9tc2cgXCIkKlwiXG4rfVxuK1xuK25lZWRfY21kKClcbit7XG4rXHRjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwga3NmdF9za2lwIFwibWlzc2luZyBjb21tYW5kOiAkMVwiXG4rfVxuK1xuK3JkbWFfbnMoKVxuK3tcbitcdGxvY2FsIG5zPSQxXG4rXG4rXHRzaGlmdFxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc1wiIHJkbWEgXCIkQFwiXG4rfVxuK1xuK3JkbWFfZGV2X2V4aXN0cygpXG4re1xuK1x0bG9jYWwgbnM9JDFcbitcdGxvY2FsIGRldj0kMlxuK1xuK1x0aWYgWyAtbiBcIiRuc1wiIF07IHRoZW5cbitcdFx0cmRtYV9ucyBcIiRuc1wiIGRldiBzaG93IFwiJGRldlwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0ZWxzZVxuK1x0XHRyZG1hIGRldiBzaG93IFwiJGRldlwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0Zmlcbit9XG4rXG4rYWRkX2R1bW15KClcbit7XG4rXHRsb2NhbCBuZXRkZXY9JDFcbitcbitcdGlwIGxpbmsgYWRkIFwiJG5ldGRldlwiIHR5cGUgZHVtbXkgfHwgcmV0dXJuIDFcbitcdGlwIGxpbmsgc2V0IFwiJG5ldGRldlwiIHVwIHx8IHJldHVybiAxXG4rfVxuK1xuK2FkZF9yeGUoKVxuK3tcbitcdGxvY2FsIGRldj0kMVxuK1x0bG9jYWwgbmV0ZGV2PSQyXG4rXG4rXHRyZG1hIGxpbmsgYWRkIFwiJGRldlwiIHR5cGUgcnhlIG5ldGRldiBcIiRuZXRkZXZcIlxuK31cbitcbityZG1hX2Rldl9vbl9uZXRkZXYoKVxuK3tcbitcdGxvY2FsIG5ldGRldj0kMVxuK1xuK1x0cmRtYSBsaW5rIHNob3cgMlx1MDAzZS9kZXYvbnVsbCB8IGF3ayAtdiB3YW50PVwiJG5ldGRldlwiICdcbitcdFx0e1xuK1x0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIE5GOyBpKyspXG4rXHRcdFx0XHRpZiAoJGkgPT0gXCJuZXRkZXZcIiBcdTAwMjZcdTAwMjYgJChpICsgMSkgPT0gd2FudCkge1xuK1x0XHRcdFx0XHRkZXYgPSAkMlxuK1x0XHRcdFx0XHRzdWIoL1xcLy4qLywgXCJcIiwgZGV2KVxuK1x0XHRcdFx0XHRwcmludCBkZXZcbitcdFx0XHRcdFx0ZXhpdFxuK1x0XHRcdFx0fVxuK1x0XHR9J1xuK31cbitcbit3YWl0X3JkbWFfZGV2X29uX25ldGRldigpXG4re1xuK1x0bG9jYWwgbmV0ZGV2PSQxXG4rXHRsb2NhbCBkZXZcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRkZXY9JChyZG1hX2Rldl9vbl9uZXRkZXYgXCIkbmV0ZGV2XCIpXG4rXHRcdGlmIFsgLW4gXCIkZGV2XCIgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCIkZGV2XCJcbitcdFx0XHRyZXR1cm4gMFxuK1x0XHRmaVxuK1x0XHRzbGVlcCAwLjFcbitcdGRvbmVcbitcbitcdHJldHVybiAxXG4rfVxuK1xuK3NldHVwX2RldnMoKVxuK3tcbitcdGNsZWFudXBfZGV2c1xuK1xuK1x0YWRkX2R1bW15IFwiJERVTU1ZX0FcIiB8fCByZXR1cm4gMVxuK1x0YWRkX2R1bW15IFwiJERVTU1ZX0JcIiB8fCByZXR1cm4gMVxuK1xuK1x0YWRkX3J4ZSBcIiRSWEVfQVwiIFwiJERVTU1ZX0FcIiB8fCByZXR1cm4gMVxuK1x0YWRkX3J4ZSBcIiRSWEVfQlwiIFwiJERVTU1ZX0JcIiB8fCByZXR1cm4gMVxuK31cbitcbitjbGVhbnVwX2RldnMoKVxuK3tcbitcdGlwIGxpbmsgZGVsIFwiJERVTU1ZX0FcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBsaW5rIGRlbCBcIiREVU1NWV9CXCIgMlx1MDAzZS9kZXYvbnVsbFxuK31cbitcbitzZXR1cCgpXG4re1xuK1x0T0xEX01PREU9JChyZG1hIHN5c3RlbSBzaG93IDJcdTAwM2UvZGV2L251bGwgfFxuK1x0XHQgICBzZWQgLW4gJ3MvLipuZXRucyBcXChbXiBdKlxcKS4qL1xcMS9wJylcbitcdFsgLW4gXCIkT0xEX01PREVcIiBdIHx8IGtzZnRfc2tpcCBcImZhaWxlZCB0byByZWFkIFJETUEgbmV0bnMgbW9kZVwiXG4rXG4rXHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fFxuK1x0XHRrc2Z0X3NraXAgXCJyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcIlxuK1x0TU9ERV9DSEFOR0VEPTFcbitcbitcdGlwIG5ldG5zIGFkZCBcIiROUzFcIiB8fCByZXR1cm4gMVxuK1x0aXAgbmV0bnMgYWRkIFwiJE5TMlwiIHx8IHJldHVybiAxXG4rfVxuK1xuK2NsZWFudXAoKVxuK3tcbitcdGNsZWFudXBfZGV2c1xuK1xuK1x0aXAgbmV0bnMgZGVsIFwiJE5TMVwiIDJcdTAwM2UvZGV2L251bGxcbitcdGlwIG5ldG5zIGRlbCBcIiROUzJcIiAyXHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiBbIFwiJE1PREVfQ0hBTkdFRFwiIC1lcSAxIF07IHRoZW5cbitcdFx0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIFwiJE9MRF9NT0RFXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbitcbitcdGZvciBtIGluIFwiJHtNT0RTW0BdfVwiOyBkb1xuK1x0XHRtb2Rwcm9iZSAtciBcIiRtXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZG9uZVxuK31cbitcbityZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lKClcbit7XG4rXHRyZG1hIGRldiBoZWxwIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtRXEgJ25ldG5zIC4qbmFtZXxuYW1lIC4qbmV0bnMnXG4rfVxuK1xuK1sgXCIkKGlkIC11KVwiIC1lcSAwIF0gfHwga3NmdF9za2lwIFwibXVzdCBiZSBydW4gYXMgcm9vdFwiXG4rbmVlZF9jbWQgaXBcbituZWVkX2NtZCByZG1hXG4rbmVlZF9jbWQgbW9kcHJvYmVcbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK2ZvciBtIGluIFwiJHtNT0RTW0BdfVwiOyBkb1xuK1x0bW9kaW5mbyBcIiRtXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8IGtzZnRfc2tpcCBcIm1vZHVsZSAkbSBub3QgZm91bmRcIlxuK1x0bW9kcHJvYmUgXCIkbVwiIHx8IGZhaWwgXCJmYWlsZWQgdG8gbG9hZCAkbVwiXG4rZG9uZVxuK1xuK3NldHVwIHx8IGZhaWwgXCJmYWlsZWQgdG8gY3JlYXRlIG5ldCBuYW1lc3BhY2VzXCJcbitcbitrdGFwX3ByaW50X2hlYWRlclxuK2t0YXBfc2V0X3BsYW4gN1xuK1xuK2lmIHNldHVwX2RldnMgXHUwMDI2XHUwMDI2XG4rICAgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmV0bnMgXCIkTlMxXCIgXHUwMDI2XHUwMDI2XG4rICAgcmRtYV9ucyBcIiROUzFcIiBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWEgZGV2IHNldCBcIiRSWEVfQlwiIG5ldG5zIFwiJE5TMlwiIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWFfbnMgXCIkTlMyXCIgZGV2IHNldCBcIiRSWEVfQlwiIG5hbWUgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hX2Rldl9leGlzdHMgXCIkTlMxXCIgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX1NBTUVcIjsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9TQU1FX05BTUVTXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1NBTUVfTkFNRVNcIlxuK2ZpXG4rY2xlYW51cF9kZXZzXG4rXG4raWYgISBzZXR1cF9kZXZzIHx8XG4rICAgISByZG1hIGRldiBzZXQgXCIkUlhFX0FcIiBuZXRucyBcIiROUzFcIiB8fFxuKyAgICEgcmRtYV9ucyBcIiROUzFcIiBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfU0FNRVwiIHx8XG4rICAgISByZG1hIGRldiBzZXQgXCIkUlhFX0JcIiBuZXRucyBcIiROUzJcIiB8fFxuKyAgICEgcmRtYV9ucyBcIiROUzJcIiBkZXYgc2V0IFwiJFJYRV9CXCIgbmFtZSBcIiRSWEVfU0FNRVwiOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfQ09ORkxJQ1RcIlxuK2VsaWYgcmRtYV9ucyBcIiROUzFcIiBkZXYgc2V0IFwiJFJYRV9TQU1FXCIgbmV0bnMgXCIkTlMyXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfQ09ORkxJQ1RcIlxuK2VsaWYgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMVwiIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rICAgICByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX1NBTUVcIjsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfQ09ORkxJQ1RcIlxuK2ZpXG4rY2xlYW51cF9kZXZzXG4rXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfUkVOQU1FXCJcbitlbGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5ldG5zIFwiJE5TMlwiIFx1MDAyNlx1MDAyNlxuKyAgICAgcmRtYV9ucyBcIiROUzJcIiBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdGlmIHJkbWFfZGV2X2V4aXN0cyBcIiROUzJcIiBcIiRSWEVfTkVXXCIgXHUwMDI2XHUwMDI2XG4rXHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9BXCI7IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9NT1ZFX1JFTkFNRVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfTU9WRV9SRU5BTUVcIlxuK1x0ZmlcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfUkVOQU1FXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgcmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZTsgdGhlblxuK1x0a3RhcF90ZXN0X3NraXAgXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwiXG4rZWxpZiAhIHNldHVwX2RldnM7IHRoZW5cbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK2VsaWYgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmV0bnMgXCIkTlMyXCIgbmFtZSBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdGlmIHJkbWFfZGV2X2V4aXN0cyBcIiROUzJcIiBcIiRSWEVfTkVXXCIgXHUwMDI2XHUwMDI2XG4rXHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9BXCI7IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK1x0ZmlcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2czsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK2VsaWYgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuKyAgICAgcmRtYSBkZXYgc2V0IFwiJFJYRV9CXCIgbmFtZSBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX05FV1wiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwiXG4rXHRlbGlmIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9ORVdcIjsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK2ZpXG4rY2xlYW51cF9kZXZzXG4rXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1RFQVJET1dOX1JFVFVSTlwiXG4rZWxpZiAhIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiB8fFxuKyAgICAgISByZG1hIGRldiBzZXQgXCIkUlhFX0JcIiBuZXRucyBcIiROUzJcIiB8fFxuKyAgICAgISByZG1hX25zIFwiJE5TMlwiIGRldiBzZXQgXCIkUlhFX0JcIiBuYW1lIFwiJFJYRV9TQU1FXCIgfHxcbisgICAgICEgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMlwiIFwiJFJYRV9TQU1FXCI7IHRoZW5cbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXCJcbitlbHNlXG4rXHRpcCBuZXRucyBkZWwgXCIkTlMyXCJcbitcdHJldHVybmVkPSQod2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYgXCIkRFVNTVlfQlwiKVxuK1x0a3RhcF9wcmludF9tc2cgXCJkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJyR7cmV0dXJuZWQ6LVx1MDAzY21pc3NpbmdcdTAwM2V9J1wiXG4rXHRpZiByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuK1x0ICAgWyAtbiBcIiRyZXR1cm5lZFwiIF0gXHUwMDI2XHUwMDI2XG4rXHQgICBbIFwiJHJldHVybmVkXCIgIT0gXCIkUlhFX1NBTUVcIiBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgWyBcIiR7cmV0dXJuZWQjaWJkZXZ9XCIgIT0gXCIkcmV0dXJuZWRcIiBdOyB0aGVuXG4rXHRcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXCJcbitcdGVsc2VcbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cIlxuK1x0ZmlcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2t0YXBfZmluaXNoZWRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjI3LjUwMDY1NTgyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTMwMjQzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRNQSBDb3JlIGFuZCBDZ3JvdXAgU3Vic3lzdGVtIENoYW5nZXM6IFJlYWNoYWJpbGl0eSBhbmQgRnV6emFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSBhbmQgaXRzIGNncm91cCBpbnRlZ3JhdGlvbi4gSXQncyB0b3VjaGluZyBhIGxvdCBvZiBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB0aGUgZGV2aWNlIG5hbWluZyBhbmQgbmV0d29yayBuYW1lc3BhY2UgaGFuZGxpbmcgd2l0aGluIHRoZSBSRE1BIHN1YnN5c3RlbS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYW5kIHRoZSBgYWxsb2NfbmFtZWAgZnVuY3Rpb24sIGFsb25nIHdpdGggYWx0ZXJhdGlvbnMgdG8gYGNncm91cF9yZG1hLmhgIGFuZCBgY2dyb3VwL3JkbWEuY2AgaXRzZWxmLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIFJETUEgY2dyb3VwcyBuZXR3b3JrIG5hbWVzcGFjZS1hd2FyZSwgd2hpY2ggaXMgYSBiaWcgZGVhbCBmb3IgaXNvbGF0aW9uLlxuXG5JIGFsc28gc2VlIHRoYXQgaXQncyByZXN0cmljdGluZyBgc21jX3BuZXRfZmluZF9pYmAgdG8gb25seSBzZWUgZGV2aWNlcyBhdmFpbGFibGUgaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHRocm91Z2ggY2hhbmdlcyB0byBgc21jX3BuZXQuY2AuICBUaGVyZSBhcmUgYWRkaXRpb25zIG9mIGByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0YCBpbiBgcnhlX3ZlcmJzLmNgLCBhbmQgYSBuZXcgYHNycF9uZXRfbmFtZXNwYWNlYCB2YXJpYWJsZSBpcyBhZGRlZCB0byBgaWJfc3JwLmNgLiBQbHVzIGl0J3MgbW9kaWZ5aW5nIGBubGRldi5jYCB0byBhbGxvdyBwYXNzaW5nIGEgZGV2aWNlIG5hbWUgd2hlbiBjaGFuZ2luZyBuZXRucy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBIb3cgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSBpcyB0aGlzIGNvZGU/XCIgV2UgbmVlZCB0byBiZSBhYmxlIHRvIGhpdCB0aGlzIGNvZGUgcGF0aCBhbmQgdmVyaWZ5IGl0cyBiZWhhdmlvciB3aXRoIHJlYXNvbmFibGUgY29uZmlkZW5jZS4gVGhlIG1haW4gZmlsZXMgb2YgaW50ZXJlc3QgYXJlIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY2AsIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jYCwgYW5kIGBrZXJuZWwvY2dyb3VwL3JkbWEuY2AsIGFzIHRoZXNlIGFyZSB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBkaXJlY3RseSBtb2RpZmllZC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIOKAkyBhZGRpbmcgbmV0bnMgc3VwcG9ydCwgcG90ZW50aWFsbHkgcmVuYW1pbmcgZGV2aWNlcyBwZXIgbmV0bnMg4oCTIHRoaXMgc21lbGxzIGxpa2UgYSBwb3RlbnRpYWwgYXZlbnVlIGZvciBmdXp6aW5nLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gUkRNQSBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIGdpdmVuIHN5emthbGxlciBjb3ZlcmFnZSwgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGljaCBgQ09ORklHX2Agb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBjb2RlIHBhdGhzIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfQ0dST1VQX1JETUFgIGFuZCBgQ09ORklHX0lORklOSUJBTkRgLiBBbmQgSSBrbm93IGBDT05GSUdfUkRNQV9SWEVgIGlzIHVzZWQgaW4gdGhlIHNlbGZ0ZXN0LiBUaGUgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfSU5GSU5JQkFORGAgaXMgZW5hYmxlZC4gYGtlcm5lbC9jZ3JvdXAvcmRtYS5jYCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfQ0dST1VQX1JETUFgLCBhbmQgYG5ldC9zbWMvc21jX3BuZXQuY2AgYnkgYENPTkZJR19TTUNgLiBgZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY2AgcmVxdWlyZXMgYENPTkZJR19SRE1BX1JYRWAgdG8gYmUgZW5hYmxlZCwgYW5kIGBkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY2AgcmVsaWVzIG9uIGBDT05GSUdfSU5GSU5JQkFORF9TUlBgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgcGF0aHMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NTozNi45OTM2ODI0NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NDA0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5vYmotXFxcXCRcXFxcKENPTkZJR19DR1JPVVBfUkRNQVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9jZ3JvdXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9jZ3JvdXAvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfQ0dST1VQX1BJRFMpICs9IHBpZHMub1xcbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQ0dST1VQX1JETUEpICs9IHJkbWEub1xcbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfQ1BVU0VUUykgKz0gY3B1c2V0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6MzcuMTA5MDkzNzIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODcyNDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSW5maW5pYmFuZCBDb3JlIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGNvcmUgbW9kdWxlIGlzIGJ1aWx0LCBhbmQgZnJhbmtseSwgSSBleHBlY3QgdGhpcyBNYWtlZmlsZSB0byBiZSB0aGUgaGVhcnQgb2YgdGhhdC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBzdHVmZjogb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBpbmNsdWRlIHBhdGhzLCBtYXliZSBzb21lIGFyY2gtc3BlY2lmaWMgZGVmaW5pdGlvbnMgaWYgd2UncmUgbHVja3ksIGFuZCBvZiBjb3Vyc2UsIHRoZSBsaW5rZXIgZmxhZ3MuIE15IGd1dCBzYXlzIHRoaXMgd2lsbCBsaWtlbHkgYmUgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBNYWtlZmlsZTsgaXQncyB0aGUgY29yZSwgc28gaXQgc2hvdWxkIGJlIHdlbGwtb3JnYW5pemVkIGFuZCBtb2R1bGFyLCByaWdodD8gTGV0J3Mgc2VlIGlmIHRoZSBidWlsZCBwcm9jZXNzIHV0aWxpemVzIHRoZSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgc3lzdGVtIHZhcmlhYmxlcyBhbmQgY29udmVudGlvbnMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mIG9yIGlzIGl0IGEgZmFpcmx5IGdlbmVyaWMgYnVpbGQgZm9yIG5vdz8gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjQwLjUwNzgyMDUzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODk4MTMwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXm9iai1cXFxcJFxcXFwoQ09ORklHX0lORklOSUJBTkRcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGU9Mz11c2VyX2FjY2Vzcy0kKENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlMpXFx0Oj0gcmRtYV91Y20ub1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlLTQtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfSU5GSU5JQkFORCkgKz1cXHRcXHRpYl9jb3JlLm8gaWJfY20ubyBpd19jbS5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZS02LVxcdFxcdFxcdFxcdFxcdCQoaW5maW5pYmFuZC15KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NTo0MS4wOTc2Mzc3NzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM0MDI2NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgUlhFIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUlhFIChSZWxpYWJsZSBlWHByZXNzIEV0aGVybmV0KSBkcml2ZXIncyBidWlsZCBwcm9jZXNzIGlzIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGJ1aWxkIG1hZ2ljIGZvciB0aGlzIG1vZHVsZSBzaG91bGQgYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBvYmplY3QgZmlsZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBydWxlcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtb3JnYW5pemVkIGFuZCBkb2Vzbid0IGludm9sdmUgYW55IG92ZXJseSBjb252b2x1dGVkIG9yIG9ic2N1cmUgbWFrZWZpbGUgdHJpY2tzLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhbnkgc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzIG9yIHRvb2xzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhleSBoYW5kbGUgdGhpbmdzIGxpa2UgaGVhZGVyIGluY2x1c2lvbiwgbW9kdWxlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBhbmQgYW55IHNwZWNpYWwgb3B0aW9ucyBvciBsaWJyYXJpZXMgdGhleSdyZSBsaW5raW5nIGFnYWluc3QuIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQ2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NDQuNDMxNjY3MDM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzI0NTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLVxcXFwkXFxcXChDT05GSUdfUkRNQV9SWEVcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUkRNQV9SWEUpICs9IHJkbWFfcnhlLm9cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlLTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjQ0LjU0NDkxODI2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDAxMDM1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgdGhvdWdodCBwcm9jZXNzIGRlc2NyaWJlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU1JQIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGBkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIFNSUCAoU0NTSSBSRE1BIFByb3RvY29sKSBkcml2ZXIgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN0YWNrIHdpbGwgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgdGhpcyBzcGVjaWZpYyBVTFAgKFVwcGVyIExheWVyIFByb3RvY29sKSBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgd2FudCB0byBzZWUgaG93IHRoZSBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBJbmZpbmliYW5kIGNvbXBvbmVudHMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGN1c3RvbSBidWlsZCBmbGFncyBvciBsaW5rZXIgZGlyZWN0aXZlcyBzcGVjaWZpYyB0byBTUlAuIFVuZGVyc3RhbmRpbmcgdGhpcyBNYWtlZmlsZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3VlcywgZm9yIG1ha2luZyBjdXN0b21pemF0aW9ucywgYW5kIGZvciB2ZXJpZnlpbmcgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIElCIHN0YWNrLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgaW5jbHVkZXMgb2Ygb3RoZXIgcmVsZXZhbnQgaGVhZGVycyB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5IG9yIGZyb20gaGlnaGVyIGluIHRoZSBJQiBzdHJ1Y3R1cmUsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjI0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NDcuOTg1MDI1MzI5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU2ODYwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXm9iai1cXFxcJFxcXFwoQ09ORklHX0lORklOSUJBTkRfU1JQXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tidWlsZC0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LYnVpbGQ6MjpvYmotJChDT05GSUdfSU5GSU5JQkFORF9TUlApXFx0XFx0XFx0Kz0gaWJfc3JwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NDguMTEwNzIxMTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTg4ODA4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrJ3MgaGFuZGxpbmcgb2YgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb24pLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpbnZlc3RpZ2F0aW5nIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gU01DIGZ1bmN0aW9uYWxpdHkuIEJ5IGV4YW1pbmluZyB0aGlzIE1ha2VmaWxlLCBJIGNhbiBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTTUMgbW9kdWxlcyBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgb3IgcmVsZXZhbnQgbmV0d29yayBjb21wb25lbnRzLiBJdCdsbCByZXZlYWwgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLCBwb3RlbnRpYWwgdGFyZ2V0LXNwZWNpZmljIHNldHRpbmdzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYW55IGFyZWFzIHdoZXJlIHRoZXJlIG1pZ2h0IGJlIG1pc2NvbmZpZ3VyYXRpb25zIG9yIG92ZXJsb29rZWQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGNhdXNpbmcgaXNzdWVzIHdpdGggdGhlIFNNQyBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgZmFzdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGZvciB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NTIuMzA5NjA0ODM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE4Njk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLVxcXFwkXFxcXChDT05GSUdfU01DXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9NYWtlZmlsZT0yPWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbm5ldC9zbWMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfU01DKVxcdCs9IHNtYy5vXFxubmV0L3NtYy9NYWtlZmlsZS00LW9iai0kKENPTkZJR19TTUNfRElBRylcXHQrPSBzbWNfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjUyLjQwNDc5NzgxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzcwNzk4OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgbnVtYmVyIG9mIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIFJETUEuIEkgc2VlIGl0J3MgbW9kaWZ5aW5nIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYW5kIGBzcnBfbmV0X25hbWVzcGFjZWAuIFJpZ2h0IGF3YXksIHRoaXMgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBSRE1BIGRldmljZXMgYXJlIGhhbmRsZWQgd2l0aGluIGRpZmZlcmVudCBuZXR3b3JrIGNvbnRleHRzLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdGhlIGltcGFjdCBvbiBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMsIGJhc2VkIG9uIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLCBpcyBob3cgdGhlIGRldmljZSBpcyBtb3ZlZCBiZXR3ZWVuIG5hbWVzcGFjZXMsIGhvdyBpdCBwaWNrcyB0aGUgY29ycmVjdCBuYW1lc3BhY2UgbmFtZSwgYW5kIGhvdyBpdHMgdmlzaWJpbGl0eSBpcyBkZXRlcm1pbmVkIHdpdGhpbiB0aGUgUkRNQSBlY29zeXN0ZW0uIEkgd2lsbCBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGBubGRldl9zZXRfZG9pdGAsIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgLCBgc21jX3BuZXRfZmluZF9pYmAsIGFuZCBgc3JwX25ldF9uYW1lc3BhY2VgLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBkZXZpY2UgbWFuYWdlbWVudCBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgYG5sZGV2X3NldF9kb2l0YCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdGhlIGFjY3VyYXRlIG5hbWUuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBpcyBub3QgYSB0eXBvIG9yIHBsYWNlaG9sZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMwMywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NTo1Ny43NzU1OTkzMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTA5MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubGRldl9zZXRfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTExMj1zdGF0aWMgaW50IG5sZGV2X2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMTYxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTE2MjpzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTE2My1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9Mjk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJkbWFfbmxfY2JzIG5sZGV2X2NiX3RhYmxlW1JETUFfTkxERVZfTlVNX09QU10gPSB7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI5NzgtXFx0W1JETUFfTkxERVZfQ01EX1NFVF0gPSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyOTc5OlxcdFxcdC5kb2l0ID0gbmxkZXZfc2V0X2RvaXQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yOTgwLVxcdFxcdC5mbGFncyA9IFJETUFfTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NTcuOTA0Njk0NTk5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU1NDkyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipWZXJpZnlpbmcgdGhlIFNldHVwKipcblxuQWxyaWdodCwgdGhhdCBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYG5sZGV2X3NldF9kb2l0YCBpcyBzcG90IG9uLCBzZWVtcyBsaWtlIHdlJ3JlIGdvb2QgdG8gZ28gdGhlcmUuIE5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiBgcmRtYWNnX2RldmljZV92aXNpYmxlYC4gV2FudCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGFsaWduZWQgYW5kIHdlIGRpZG4ndCBtaXNzIGFueXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBpbml0aWFsIHNldHVwLiBJIGFsd2F5cyBsaWtlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBiYXNlIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjAxLjc1MDI0Njk2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwMzQ2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRtYWNnX2RldmljZV92aXNpYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9jZ3JvdXAvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9jZ3JvdXAvcmRtYS5jPTQ2Nj1FWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00NjgtLyogbmV0bnNfc2hhcmVkIGlzIHRvZ2dsZWQgd2l0aG91dCByZG1hY2dfbXV0ZXgsIGhlbmNlIFJFQURfT05DRSgpLiAqL1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjQ2OTpzdGF0aWMgYm9vbCByZG1hY2dfZGV2aWNlX3Zpc2libGUoY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00NzAte1xcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NDc1PXN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00ODEtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFxcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NDgyOlxcdFxcdGlmIChyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ4My1cXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZpY2UtXFx1MDAzZW5hbWUpKVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NjI5PXN0YXRpYyBpbnQgcmRtYWNnX3Jlc291cmNlX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTYzNy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjYzODpcXHRcXHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTYzOS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTY1Mz1zdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNjYyLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6NjYzOlxcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNjY0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9Njg1PXN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFxcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo2OTU6XFx0XFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjAxLjgzNDI4ODM5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk3MTI5ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IHRoaW5raW5nIHJpZ2h0IG5vdyBpcyBjZW50ZXJlZCBvbiB0aGlzIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgIGZ1bmN0aW9uLiBTaW5jZSBpdCdzIHN0YXRpYywgaW5jbHVkaW5nIGl0IHNlZW1zIHNhZmUgZW5vdWdoLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHdoZXRoZXIgdG8gYnJpbmcgaW4gYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAsIGByZG1hY2dfcmVzb3VyY2VfcmVhZGAsIGByZG1hY2dfZXZlbnRzX3Nob3dgLCBhbmQgYHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvd2AuIFdhaXQsIG9uIHNlY29uZCB0aG91Z2h0LCBgcmRtYWNnX2RldmljZV92aXNpYmxlYCBzaG91bGQgYmUgcGVyZmVjdGx5IGFkZXF1YXRlIG9uIGl0cyBvd24gZm9yIHRoZSBjdXJyZW50IHB1cnBvc2UuXG5cbk5vdywgSSdsbCBzd2l0Y2ggZ2VhcnMgdG8gZXhhbWluZSBgc21jX3BuZXRfZmluZF9pYmAuIExldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAyMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjA1LjAzMTQyMTI2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjEzOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz0yODU9c3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0zMTAtICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjMxMTpzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKVxcbm5ldC9zbWMvc21jX3BuZXQuYy0zMTIte1xcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTQxNj1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtNDI2LVxcdC8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjQyNzpcXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTQyOC1cXHRpZiAoaWJfZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjA1LjE0NzA0MjQ2N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc3MzUxNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgYHNycF9uZXRfbmFtZXNwYWNlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgc3JwX25ldF9uYW1lc3BhY2VgLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHNldHRpbmdzIHRvIGVuc3VyZSB0aGF0IGl0J3MgY29uc2lzdGVudCB3aXRoIG15IG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBkZXNpZ24gYW5kIHRoYXQgaXQncyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBuZXR3b3JrLiBObyBwb2ludCBpbiBwcm9jZWVkaW5nIHdpdGhvdXQgdGhpcyBiYXNlIGJlaW5nIHN0cm9uZy4gTGV0J3MgZGVsdmUgaW4gYW5kIGZpbmQgb3V0IHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjA4LjQyNDM5Nzk2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0ODA3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3JwX25ldF9uYW1lc3BhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM9MzE5MD1BVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMTk1LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jOjMxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKnNycF9uZXRfbmFtZXNwYWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMTk3LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTMyMDQ9c3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMjA4LVxcdC5uc190eXBlID0gXFx1MDAyNm5ldF9uc190eXBlX29wZXJhdGlvbnMsXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM6MzIwOTpcXHQubmFtZXNwYWNlID0gc3JwX25ldF9uYW1lc3BhY2UsXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzIxMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjowOC41MTU4ODQyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUyMzM2MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbiBOYW1pbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5k4oCmIGxldCdzIGRpdmUgcmlnaHQgaW4uIFRoZSBpbW1lZGlhdGUgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgbWluZCBpcyB0byB6ZXJvIGluIG9uIGBfX2FsbG9jX25hbWVfaWRgLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbiwgaXNu4oCZdCBpdD8gQW55IHRpbWUgSSBzZWUgYSBtZW1vcnkgYWxsb2NhdGlvbi1yZWxhdGVkIGlzc3VlLCB1bmRlcnN0YW5kaW5nIGhvdyBhbGxvY2F0aW9uIG5hbWVzIGFyZSBoYW5kbGVkLCBvciByYXRoZXIsIHRoZSBpbnRlcm5hbCBJRCBnZW5lcmF0aW9uLCBiZWNvbWVzIHBhcmFtb3VudC4gQSBsb3Qgb2Ygc3VidGxlIHByb2JsZW1zIGNhbiBzdGVtIGZyb20gbWlzbWFuYWdlZCBuYW1lcywgcGFydGljdWxhcmx5IGluIGNvbXBsZXgsIG11bHRpdGhyZWFkZWQgc3lzdGVtcy4gU28sIG15IGluaXRpYWwgdGhvdWdodD8gTGV0J3MgdmVyaWZ5IGhvdyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gYmVoYXZlcywgbWFrZSBzdXJlIHRoZSBJRCdzIGFyZSBjb3JyZWN0bHkgc2V0IGFuZCBtYW5hZ2VkLiBUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IHN0ZXAgaW4gbXkgYW5hbHlzaXMuIEl0J3MgdGhlIGx5bmNocGluIGZvciB0cmFja2luZyBhbmQgZGVidWdnaW5nIHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucyBvciBsZWFrcy4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3VyIGlzIHRoZSBiYXNlbGluZSBmb3IgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjoxNC42NjgyMjQwMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjY4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfbmFtZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz00MzI9aW50IGliX2RldmljZV9zZXRfZGltKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCB1c2VfZGltKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDQ1LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjQ0NjpzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDQ3LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKnNraXApXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz00ODE9c3RhdGljIGludCBhbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy00ODIte1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjQ4MzpcXHRyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDg0LX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jPTE3Mzk9c3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzcxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3NzI6XFx0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NzMtXFx0aWYgKGlkIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6MTQuNzUzODk4MzgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njc0NjAxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgLiBJIGtub3cgdGhpcyBmdW5jdGlvbi92YXJpYWJsZS9tZWNoYW5pc20gKGNvbnRleHQgZGVwZW5kaW5nLCBuYXR1cmFsbHkpIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIFJETUEgZGV2aWNlcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBJJ20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGlzc3VlIHJlbGF0ZWQgdG8gZGV2aWNlIHZpc2liaWxpdHkgb3IgcGVyaGFwcyBjcm9zcy1uYW1lc3BhY2UgY29tbXVuaWNhdGlvbiBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2F1c2UuIFRoaXMgaW1wbGllcyBJJ20gZWl0aGVyIGRlYnVnZ2luZyBhIGxpdmUgc3lzdGVtLCBleGFtaW5pbmcgY29kZSwgb3IgcmV2aWV3aW5nIGEgcG90ZW50aWFsIHBhdGNoL2NvbmZpZ3VyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQncyBkZWZpbmVkLCBob3cgaXQncyB1c2VkLCBhbmQgd2hhdCBpdHMgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhcmUuIEknbGwgbGlrZWx5IGJlIGFzc2Vzc2luZyBpdHMgcm9sZSBpbiBkZXZpY2UgZW51bWVyYXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBvciByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGUgc3BlY2lmaWNzIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB0aGUgcGFydGljdWxhciBSRE1BIHN0YWNrIGluIHF1ZXN0aW9uLCBidXQgdGhlIGNvcmUgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBuZXR3b3JrIG5hbWVzcGFjZSBpc29sYXRpb24gaXMgKG9yIGlzbid0KSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byBSRE1BIGRldmljZSBuYW1pbmcuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGVsaW1pbmF0ZSB0aGUgc2ltcGxlIHBvc3NpYmlsaXRpZXMgYW5kIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwMCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjE4LjUyMTM2MTQ3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODU4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM9MTcxND1FWFBPUlRfU1lNQk9MKGliX3VucmVnaXN0ZXJfZGV2aWNlX3F1ZXVlZCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTcxNS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzE2OnN0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jPTE3Mzk9c3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzQ5LVxcdGlmIChyZXF1ZXN0ZWRfbmFtZSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3NTA6XFx0XFx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSkpIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzUxLVxcdFxcdFxcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTc1Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzU4OlxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzU5LVxcdFxcdCpuZXdfbmFtZSA9IGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzY2LVxcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXFxcImliZGV2JXVcXFwiLCBkZXZpY2UtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzY3OlxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NjgtXFx0XFx0Km5ld19uYW1lID0gYnVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjoxOC42MjIyMjUwNDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNzcyNjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSRE1BIE5ldCBOYW1lc3BhY2UgUGF0Y2g6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcy4gRXNzZW50aWFsbHksIGl0IGFsbG93cyB0aGVzZSBkZXZpY2VzIHRvIGhhdmUgdW5pcXVlIG5hbWVzIHdpdGhpbiBlYWNoIG5ldHdvcmsgbmFtZXNwYWNlLCB3aGljaCBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0IHRvdWNoZXMgYm90aCB0aGUgY29yZSBSRE1BIHN1YnN5c3RlbSBhbmQgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYW5kIGNvcm5lciBjYXNlcyBpcyBoaWdoIHdpdGggdGhpcyBsZXZlbCBvZiBjb3JlIG1vZGlmaWNhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSBhIHByb3BlciB0ZXN0IGVudmlyb25tZW50LiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBDR1JPVVBfUkRNQWAsIGBJTkZJTklCQU5EYCwgYE5FVF9OU2AsIGBTTUNgLCBhbmQgYElORklOSUJBTkRfU1JQYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBORVRfTlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQgb3IgaWYgaXQncyB1c3VhbGx5IGNvbXBpbGVkIGluIGFscmVhZHksIHdoaWNoIGlzIGxpa2VseS4gYENHUk9VUF9SRE1BYCBzZWVtcyBlc3NlbnRpYWwgZm9yIHRoZSBjZ3JvdXAtcmVsYXRlZCBtb2RpZmljYXRpb25zLCBhbmQgYElORklOSUJBTkRgIGlzIG9idmlvdXNseSBuZWNlc3NhcnkgZm9yIHRoZSBjb3JlIFJETUEgY2hhbmdlcy4gVGhlIHByZXNlbmNlIG9mIGBTTUNgIGluZGljYXRlcyBsaWtlbHkgY2hhbmdlcyB0byB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucy4gRmluYWxseSwgYElORklOSUJBTkRfU1JQYCBpcyByZXF1aXJlZCBmb3IgdGhlIFNSUCBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZG8gYSBxdWljayBzY2FuIG9uIGBDT05GSUdfU01DYCB0byBjb25maXJtIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTEwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjIzLjIyOTk1NTY4M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTY4Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6MjMuMzg1OTMwMDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NDY3NjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIEluZmluaUJhbmQgU1JQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2UncmUgbG9va2luZyBhdCBgQ09ORklHX0lORklOSUJBTkRfU1JQYFwiLiBUaGF0IGltbWVkaWF0ZWx5IHNpZ25hbHMgd2UncmUgZGVhbGluZyB3aXRoIFNlcmlhbGl6ZWQgUmVzZXJ2ZSBQcm90b2NvbCwgd2hpY2ggb2YgY291cnNlIEknbSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGguIFRoZSBmb2N1cyBoZXJlIGlzIGxpa2VseSBvbiBob3cgaXQncyBiZWluZyBjb25maWd1cmVkLCBvciBwZXJoYXBzIHdoZXRoZXIgaXQgKmlzKiBjb25maWd1cmVkLiBBcmUgd2UgdHJ5aW5nIHRvIGVuYWJsZSBpdCwgZGlzYWJsZSBpdCwgb3Igc2ltcGx5IGF1ZGl0IGl0cyBjdXJyZW50IHN0YXRlPyBUaGUgY29udGV4dCBoZXJlIGlzIGtleS4gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnM6IHBvdGVudGlhbCBpbXBhY3Qgb24gc3RvcmFnZSBwZXJmb3JtYW5jZSwgdGhlIGludGVycGxheSB3aXRoIG90aGVyIEluZmluaUJhbmQgb3B0aW9ucyBsaWtlIFJETUEgYW5kIHZlcmJzLCBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2hlcmUgYXJlIHdlIHJ1bm5pbmc/IFdoYXQncyB0aGUgdGFyZ2V0IHBsYXRmb3JtPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGFmZmVjdCBob3cgSSBpbnRlcnByZXQgdGhpcyBzaW1wbGUgY2hlY2suIERlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQsIG15IG5leHQgc3RlcCBjb3VsZCBiZSB0byB2ZXJpZnkgbW9kdWxlIGxvYWRpbmcsIGNoZWNrIGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcnMsIG9yIHJldmlldyBleGlzdGluZyBibG9jayBkZXZpY2Ugc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6MjYuODYwNjA4ODIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1NDU0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRfU1JQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjoyNy4wMDYxNTkxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3ODM2Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQ2hlY2tpbmcgdGhlIFJETUEgQ2dyb3VwIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBSRE1BLXJlbGF0ZWQgaXNzdWUsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYSBiYXNpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBjaGVjayB0aGUgc3RhdGUgb2YgYENPTkZJR19DR1JPVVBfUkRNQWAuIEl0J3MgYSBjcml0aWNhbCBrbm9iIHdoZW4gd29ya2luZyB3aXRoIFJETUEgd2l0aGluIGNncm91cHMuIElmIGl0J3MgZGlzYWJsZWQsIHRoZW4gbW9zdCBvZiBteSBlZmZvcnRzIHdpbGwgYmUgaGFtcGVyZWQgZnJvbSB0aGUgc3RhcnQuIEkgd2FudCB0byBydWxlIG91dCBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uIGJlZm9yZSBJIHN0YXJ0IHRyb3VibGVzaG9vdGluZyB0aGUgY29tcGxleGl0aWVzIHRoYXQgbWlnaHQgZm9sbG93LiBUaGlzIGlzIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCwgc28gdG8gc3BlYWssIGFuZCBJJ2QgYmUgcmVtaXNzIG5vdCB0byBlbGltaW5hdGUgaXQgYXMgYSBwcmltYXJ5IGNhdXNlLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgc2V0dGluZyBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjozMC4wMTM5OTgwMTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTQ5OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfUkRNQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyMzc9Y29uZmlnIENHUk9VUF9QSURTXFxuLS1cXG5pbml0L0tjb25maWctMTI1Mi1cXG5pbml0L0tjb25maWc6MTI1Mzpjb25maWcgQ0dST1VQX1JETUFcXG5pbml0L0tjb25maWctMTI1NC1cXHRib29sIFxcXCJSRE1BIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjMwLjEwNzk1MjU3NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ4NDY0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb246XG5cbioqQ2hlY2tpbmcgYENPTkZJR19SRE1BX1JYRWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1JETUFfUlhFYCBpcyBjb3JyZWN0bHkgc2V0LiBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MgdGhlIGx5bmNocGluIGZvciBSZWNlaXZlciBFeHRlbnNpb25zIChSWEUpIHN1cHBvcnQgaW4gb3VyIFJETUEgc2V0dXAuIFRoaXMgcGFyYW1ldGVyIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IgZm9yIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBlbmFibGUgdGhlIFJYRSBmdW5jdGlvbmFsaXR5OyB3aXRob3V0IGl0IGVuYWJsZWQgd2XigJlyZSBzdW5rLlxuXG5JIGltbWVkaWF0ZWx5IG5lZWQgdG8gY29uZmlybSBpdHMgdmFsdWUsIGJlY2F1c2UgaWYgaXQncyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlbiB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciBjb25maWd1cmluZywgaXNuJ3QgZ29pbmcgdG8gd29yay4gSXMgaXQgZW5hYmxlZD8gRGlzYWJsZWQ/IFNldCBhcyBhIG1vZHVsZT8gVGhlIG51YW5jZXMgdGhlcmUgY2FuIGRyYW1hdGljYWxseSBzaGlmdCBob3cgSSBuZWVkIHRvIHByb2NlZWQgYW5kIHdoYXQgSSBtYXkgYmUgZW5jb3VudGVyaW5nLiBJZiBpdCdzIGRpc2FibGVkLCBJIGtub3cgdG8gcHVyc3VlIG90aGVyIGF2ZW51ZXMgYW5kIHNvbHV0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGhvdXQgUlhFLCBidXQsIGlmIGVuYWJsZWQsIEkga25vdyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLiBUaGlzIG9wdGlvbiB3aWxsIGluZmx1ZW5jZSBvdGhlciBkZXBlbmRlbmNpZXMsIGFuZCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjozNC42NTY0MTk3NDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTg0NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSRE1BX1JYRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnOjI6Y29uZmlnIFJETUFfUlhFXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjozNC43NDY2MTA5MTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5NTk5MDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJETUEgTmV0d29yayBOYW1lc3BhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGNoYW5nZXMsIHNvIEkgc2VlIGl0IHRvdWNoZXMgYSB3aWRlIHJhbmdlIG9mIFJETUEtcmVsYXRlZCBjb2RlOiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNgLCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY2AsIGBrZXJuZWwvY2dyb3VwL3JkbWEuY2AsIGBuZXQvc21jL3NtY19wbmV0LmNgLCBgZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY2AsIGFuZCBgZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNgLiBUaGF0J3MgYSBwcmV0dHkgZGl2ZXJzZSBzZXQgb2YgYXJlYXMg4oCTIGNvcmUgZGV2aWNlIGhhbmRsaW5nLCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLCBjZ3JvdXAgaW50ZWdyYXRpb24sIFNNQywgU1JQLCBhbmQgZXZlbiBSWEUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cbk15IG5leHQgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJ20gc2VlaW5nIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYHNycF9uZXRfbmFtZXNwYWNlYCwgYF9fYWxsb2NfbmFtZV9pZGAsIGFuZCBgcmRtYV9kZXZfbmFtZV9pbl9uZXRuc2AuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBSRE1BIGRldmljZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgaW52b2x2ZSBuYW1lIGFsbG9jYXRpb24gKGBfX2FsbG9jX25hbWVfaWRgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgKSBhbmQgdmlzaWJpbGl0eSBjaGVja3MgKGByZG1hY2dfZGV2aWNlX3Zpc2libGVgKSBzdWdnZXN0cyBzaWduaWZpY2FudCB3b3JrIG9uIGhvdyBSRE1BIGRldmljZXMgYW5kIHRoZWlyIG5hbWVzIGFyZSBtYW5hZ2VkIHdpdGhpbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLiBUaGUgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBhbmQgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AgZnVuY3Rpb25zIGFyZSBhbHNvIGNyaXRpY2FsbHkgaW1wb3J0YW50LlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCwgYElORklOSUJBTkRgLCBgQ0dST1VQX1JETUFgLCBgU01DYCwgYElORklOSUJBTkRfU1JQYCwgYW5kIGBSRE1BX1JYRWAgdGVsbHMgbWUgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiB0aGUgUkRNQSBmZWF0dXJlIHNldC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsIG9mIHRoZXNlIGZlYXR1cmVzIGlzIGNvcnJlY3QuXG5cbkFscmlnaHQsIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9mIHRoZSBcIndoYXQuXCIgTm93LCBpdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kICpob3cqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kICp3aHkqIHRoZXNlIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBlbnN1cmUgcHJvcGVyIG5ldHdvcmsgbmFtZXNwYWNlIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3ltYm9scyBpbnRlcmFjdCBpbiB0aGUgb3ZlcmFsbCBkZXZpY2UgbWFuYWdlbWVudCwgY2dyb3VwIGludGVncmF0aW9uLCBhbmQgU01DL1NSUCBzdXBwb3J0LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIHRoZW4gY29tcGFyZSB0aGlzIHdpdGggcHJldmlvdXMgcGF0Y2hlcy5cblxuTm93LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI2MSwiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6NDIuNzQyNjA1MDY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzI4NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EX1NSUFwiLFxuICAgIFwiUkRNQV9SWEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfZGV2aWNlX3Zpc2libGVcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgICBcInNycF9uZXRfbmFtZXNwYWNlXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiQ0dST1VQX1JETUFcIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORF9TUlBcIixcbiAgICBcIlJETUFfUlhFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZGV2aWNlX3NldF9uZXRuc19wdXRcIixcbiAgICBcInJkbWFfZGV2X2NoYW5nZV9uZXRuc1wiLFxuICAgIFwicmRtYV9kZXZfcGlja19uZXRuc19uYW1lXCIsXG4gICAgXCJubGRldl9zZXRfZG9pdFwiLFxuICAgIFwicmRtYWNnX2RldmljZV92aXNpYmxlXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX2liXCIsXG4gICAgXCJzcnBfbmV0X25hbWVzcGFjZVwiLFxuICAgIFwiX19hbGxvY19uYW1lX2lkXCIsXG4gICAgXCJyZG1hX2Rldl9uYW1lX2luX25ldG5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcywgYWxsb3dpbmcgdGhlbSB0byBiZSBpc29sYXRlZCBhbmQgcmVuYW1lZCBwZXIgbmV0d29yayBuYW1lc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBSRE1BIGNvcmUsIFJETUEgY2dyb3VwcywgU01DLCBhbmQgU1JQLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGNncm91cGZzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 03:27:12 +0000 UTC FinishedAt: 2026-07-10 03:56:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0850cfd16dca49228fd18f1d12b37157f8c4e8ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "CGROUP_RDMA", "SMC", "INFINIBAND_SRP", "RDMA_RXE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0850cfd16dca49228fd18f1d12b37157f8c4e8ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "CGROUP_RDMA", "SMC", "INFINIBAND_SRP", "RDMA_RXE" ], "series_id": "e90e9b9d-d3f5-434e-ab40-e221903237e3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ib_device_set_netns_put", "rdma_dev_change_netns", "rdma_dev_pick_netns_name", "nldev_set_doit", "rdmacg_device_visible", "smc_pnet_find_ib", "srp_net_namespace", "__alloc_name_id", "rdma_dev_name_in_netns" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1JETUEmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfU1JQJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICAgJiMzNDtzcnBfbmV0X25hbWVzcGFjZSYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNzZhZTlmN2M1NTkzNWZiMWMzOGI4OTg2ZDkwNWQ0ZWVkNTU5ZjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDM6NTU6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuQEAgLTEyLDYgJiM0MzsxMiwxMCBAQCBEZXNjcmlwdGlvbjogXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cbiBcdFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxuIFx0XHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlXG4gXG4mIzQzO1x0XHROb3RlOiBjb25maWdmcyBoYXMgbm8gbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCwgc28gdGhpc1xuJiM0MztcdFx0aW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW5cbiYjNDM7XHRcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cbiYjNDM7XG4gXG4gV2hhdDogXHRcdC9jb25maWcvcmRtYV9jbS9cdTAwM2NoY2FcdTAwM2UvcG9ydHMvXHUwMDNjcG9ydC1udW1cdTAwM2UvZGVmYXVsdF9yb2NlX21vZGVcbiBEYXRlOiBcdFx0Tm92ZW1iZXIgMjksIDIwMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbmluZGV4IDk5MzQ0NmFiNjZkMGZiLi40NTIzYzE4ODRkNjcxNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjc1Miw2ICYjNDM7Mjc1MiwxMyBAQCBSRE1BXG4gVGhlIFwmIzM0O3JkbWFcJiMzNDsgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZlxuIFJETUEgcmVzb3VyY2VzLlxuIFxuJiM0MztXaGVuIFJETUEgZGV2aWNlcyBhcmUgaXNvbGF0ZWQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIChleGNsdXNpdmUgbW9kZSksXG4mIzQzO2RldmljZSBuYW1lcyBhcmUgdW5pcXVlIG9ubHkgd2l0aGluIGEgbmV0d29yayBuYW1lc3BhY2UuIFRoZSBkZXZpY2UgbGluZXNcbiYjNDM7YmVsb3cgYXJlIHRoZXJlZm9yZSBzY29wZWQgdG8gdGhlIHJlYWRpbmcgb3Igd3JpdGluZyBwcm9jZXNzJiMzOTtzIG5ldHdvcmtcbiYjNDM7bmFtZXNwYWNlOiBvbmx5IGRldmljZXMgYWNjZXNzaWJsZSBmcm9tIHRoYXQgbmFtZXNwYWNlIGFyZSBsaXN0ZWQsIGFuZCBhXG4mIzQzO2xpbWl0IGlzIGFwcGxpZWQgdG8gdGhlIGRldmljZSBvZiB0aGF0IG5hbWUgaW4gdGhhdCBuYW1lc3BhY2UuIENvbmZpZ3VyZVxuJiM0MztsaW1pdHMgZnJvbSB0aGUgc2FtZSBuZXR3b3JrIG5hbWVzcGFjZSBhcyB0aGUgd29ya2xvYWRzLlxuJiM0MztcbiBSRE1BIEludGVyZmFjZSBGaWxlc1xuIH5+fn5+fn5+fn5+fn5+fn5+fn5+XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuaW5kZXggMWYwMzdmZTAxNDUwZWYuLjdhMjE2ZWQ0NTE5OWJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG5AQCAtMTcsNiAmIzQzOzE3LDggQEBcbiB2b2lkIGliX2RldmljZV9yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIHtcbiBcdGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmFtZSA9IGRldmljZS1cdTAwM2VuYW1lO1xuJiM0MztcdGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0bnNfc2hhcmVkID0gaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM7XG4mIzQzO1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5ldCwgcmRtYV9kZXZfbmV0KGRldmljZSkpO1xuIFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG5AQCAtMzQsNiAmIzQzOzM2LDE2IEBAIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiBcdHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG4mIzQzO3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0LCBuZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGJvb2wgc2hhcmVkKVxuJiM0Mzt7XG4mIzQzO1x0V1JJVEVfT05DRShkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5ldG5zX3NoYXJlZCwgc2hhcmVkKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcbiBcdFx0XHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdCBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbmluZGV4IDg5MWU1MmFmYjhmNGJhLi5jMzg5ZDRlMzdiNmJjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuQEAgLTY1LDYgJiM0Mzs2NSwxMCBAQCBzdGF0aWMgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCAqdG9fZGV2X3BvcnRfZ3JvdXAoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuIFx0cmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogY29uZmlnZnMgaXMgbm90IG5ldCBuYW1lc3BhY2UgYXdhcmUsIHNvIGEgbmFtZSBzaGFyZWQgYnkgZGV2aWNlcyBpblxuJiM0MzsgKiBkaWZmZXJlbnQgbmFtZXNwYWNlcyByZXNvbHZlcyB0byB0aGUgZmlyc3QgbWF0Y2ggaGVyZS5cbiYjNDM7ICovXG4gc3RhdGljIGJvb2wgZmlsdGVyX2J5X25hbWUoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB2b2lkICpjb29raWUpXG4ge1xuIFx0cmV0dXJuICFzdHJjbXAoZGV2X25hbWUoXHUwMDI2aWJfZGV2LVx1MDAzZWRldiksIGNvb2tpZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuaW5kZXggMTkxMDRjNTQyYjI3MGQuLjljZDY3MWUyZGIyMDQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG5AQCAtMTU2LDYgJiM0MzsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfUkRNQVxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XG4mIzQzO3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpO1xuJiM0Mzt2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGJvb2wgc2hhcmVkKTtcbiBcbiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcbiBcdFx0XHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuQEAgLTE3Myw2ICYjNDM7MTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYm9vbCBzaGFyZWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBpYl9yZG1hY2dfdHJ5X2NoYXJnZShzdHJ1Y3QgaWJfcmRtYWNnX29iamVjdCAqY2dfb2JqLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdCAgICAgICBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxuQEAgLTM1Niw3ICYjNDM7MzY4LDggQEAgdm9pZCBpYl9wb3J0X3VucmVnaXN0ZXJfY2xpZW50X2dyb3VwcyhzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTtcbiBcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpO1xuJiM0MztcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIGludCByZG1hX25sX25ldF9pbml0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xuIHZvaWQgcmRtYV9ubF9uZXRfZXhpdChzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG5pbmRleCBiODE5M2UwNzdhNzQ2Zi4uY2ZmYjBkZTFjMDAxNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0YXRpYyBERUNMQVJFX1JXU0VNKHJkbWFfbmV0c19yd3NlbSk7XG4gYm9vbCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucyA9IHRydWU7XG4gbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5ldG5zX21vZGUsXG4tXHRcdCBcJiMzNDtTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVwmIzM0Oyk7XG4mIzQzO1x0XHQgXCYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiAvKipcbiAgKiByZG1hX2Rldl9hY2Nlc3NfbmV0bnMoKSAtIFJldHVybiB3aGV0aGVyIGFuIHJkbWEgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZFxuICAqXHRcdFx0ICAgICBmcm9tIGEgc3BlY2lmaWVkIG5ldCBuYW1lc3BhY2Ugb3Igbm90LlxuQEAgLTI2OCw3ICYjNDM7MjY4LDggQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpYmRldl9sc21fbmIgPSB7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4tXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KTtcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbiYjNDM7XHRcdFx0XHQgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7XG4gXG4gLyogUG9pbnRlciB0byB0aGUgUkNVIGhlYWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpYl9wb3J0X2RhdGEgYXJyYXkgKi9cbiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7XG5AQCAtMzUxLDEzICYjNDM7MzUyLDE1IEBAIHZvaWQgaWJfZGV2aWNlX3B1dChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4gfVxuIEVYUE9SVF9TWU1CT0woaWJfZGV2aWNlX3B1dCk7XG4gXG4tc3RhdGljIHN0cnVjdCBpYl9kZXZpY2UgKl9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXG4gXHR4YV9mb3JfZWFjaCAoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSlcbi1cdFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKVxuJiM0MztcdFx0aWYgKHJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4gXHRcdFx0cmV0dXJuIGRldmljZTtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTM5NSw3ICYjNDM7Mzk4LDcgQEAgaW50IGliX2RldmljZV9yZW5hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUpKSB7XG4mIzQzO1x0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdH1cbkBAIC00MzUsNyAmIzQzOzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0MzsvKlxuJiM0MzsgKiBQaWNrIGEgZnJlZSBpbmRleCBmb3IgdGhlICYjMzk7JWQmIzM5OyBzdHlsZSBAbmFtZSBwYXR0ZXJuIHdpdGhpbiBuZXQgbmFtZXNwYWNlXG4mIzQzOyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHNcbiYjNDM7ICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuQEAgLTQ0OCw2ICYjNDM7NDU3LDggQEAgc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuIFx0eGFfZm9yX2VhY2ggKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpIHtcbiBcdFx0Y2hhciBidWZbSUJfREVWSUNFX05BTUVfTUFYXTtcbiBcbiYjNDM7XHRcdGlmIChkZXZpY2UgPT0gc2tpcCB8fCAhcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzc2NhbmYoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksIG5hbWUsIFx1MDAyNmkpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSBJTlRfTUFYKVxuQEAgLTQ2MiwxNSAmIzQzOzQ3MywyNyBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR9XG4gXG4gXHRyYyA9IGlkYV9hbGxvYyhcdTAwMjZpbnVzZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0cmMgPSBkZXZfc2V0X25hbWUoXHUwMDI2aWJkZXYtXHUwMDNlZGV2LCBuYW1lLCByYyk7XG4gb3V0OlxuIFx0aWRhX2Rlc3Ryb3koXHUwMDI2aW51c2UpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2FsbG9jX25hbWVfaWQobmV0LCBuYW1lLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiYjNDM7XHRpZCA9IGFsbG9jX25hbWVfaWQocmRtYV9kZXZfbmV0KGliZGV2KSwgbmFtZSk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGlkO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpO1xuQEAgLTEwOTQsNiAmIzQzOzExMTcsNyBAQCBzdGF0aWMgaW50IGFkZF9hbGxfY29tcGF0X2RldnModm9pZClcbiBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcbiB7XG4gXHRzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0O1xuJiM0MztcdHN0cnVjdCBpYl9kZXZpY2UgKmRldjtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC0xMTE2LDYgJiM0MzsxMTQwLDEyIEBAIGludCByZG1hX2NvbXBhdGRldl9zZXQodTggZW5hYmxlKVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiYjNDM7XHQvKiBLZWVwIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UmIzM5O3MgcmRtYSBjZ3JvdXAgdmlzaWJpbGl0eSBpbiBzeW5jLiAqL1xuJiM0MztcdGRvd25fcmVhZChcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHR4YV9mb3JfZWFjaF9tYXJrZWQoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldiwgREVWSUNFX1JFR0lTVEVSRUQpXG4mIzQzO1x0XHRpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoZGV2LCBlbmFibGUpO1xuJiM0MztcdHVwX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1xuIFx0aWYgKGVuYWJsZSlcbiBcdFx0cmV0ID0gYWRkX2FsbF9jb21wYXRfZGV2cygpO1xuIFx0ZWxzZVxuQEAgLTExNTEsOCAmIzQzOzExODEsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gdGhlIE5TIHRoZW4gbW92ZSBpdCBiYWNrIHRvIGluaXQuXG4mIzQzO1x0XHQgKiBQcm92aWRlIGEgZmFsbGJhY2sgcGF0dGVybiBzbyBhIG5hbWUgY29uZmxpY3QgaW4gaW5pdF9uZXRcbiYjNDM7XHRcdCAqIGNhbm5vdCBtYWtlIHRoZSB0ZWFyZG93biBtb3ZlIGZhaWwuXG4gXHRcdCAqL1xuLVx0XHRyZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2ZGV2LVx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xuJiM0MztcdFx0XHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFx1MDAyNmluaXRfbmV0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgTlVMTCwgXCYjMzQ7aWJkZXYlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0V0FSTigxLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIG1vdmUgUkRNQSBkZXZpY2UgJXMgdG8gaW5pdF9uZXQgb24gbmV0bnMgZXhpdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBkZXZfbmFtZShcdTAwMjZkZXYtXHUwMDNlZGV2KSwgcmV0KTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiBcdFx0ZG93bl9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuQEAgLTEyMDYsNyAmIzQzOzEyNDUsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcmRtYV9kZXZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIH1cbiBcbiAvKlxuLSAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoaXMgaXNcbiYjNDM7ICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZVxuJiM0MzsgKiBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIG5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0by4gVGhpcyBpc1xuICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS5cbiAgKi9cbiBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbkBAIC0xMjIzLDcgJiM0MzsxMjYzLDggQEAgc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpIHtcbiYjNDM7XHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdFx0ICAgIHJkbWFfZGV2X25ldChkZXZpY2UpKSkge1xuIFx0XHRyZXQgPSAtRU5GSUxFO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMzIyLDYgJiM0MzsxMzYzLDcgQEAgc3RhdGljIGludCBlbmFibGVfZGV2aWNlX2FuZF9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIFx0ICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlZmNvdW50LCAyKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1x0aWJfZGV2aWNlX3JkbWFjZ19zZXRfbmV0bnNfc2hhcmVkKGRldmljZSwgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpO1xuIFx0eGFfc2V0X21hcmsoXHUwMDI2ZGV2aWNlcywgZGV2aWNlLVx1MDAzZWluZGV4LCBERVZJQ0VfUkVHSVNURVJFRCk7XG4gXG4gXHQvKlxuQEAgLTEzODgsOCAmIzQzOzE0MzAsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiAvKipcbiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlXG4gICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsXG4tICogXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXG4mIzQzOyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJiMzOTtzIG5ldCBuYW1lc3BhY2UuIFRoaXMgbWF5XG4mIzQzOyAqXHQgIGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZVxuJiM0MzsgKlx0ICBwYXNzZWQgZGV2aWNlIG5hbWUuXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxuICAqXHQgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseVxuICAqXHRcdHNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLlxuQEAgLTE2NzAsMTQgJiM0MzsxNzEzLDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCByZG1hX2Rldl9uYW1lX2luX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKnNraXAsIHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4mIzQzO1x0XHRpZiAoZGV2aWNlICE9IHNraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2hvb3NlIHRoZSBuYW1lIEBkZXZpY2Ugc2hvdWxkIHVzZSBpbiBuZXQgbmFtZXNwYWNlIEBuZXQuIEByZXF1ZXN0ZWRfbmFtZVxuJiM0MzsgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZVxuJiM0MzsgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJiMzOTslZCYjMzk7IEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlXG4mIzQzOyAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybixcbiYjNDM7XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbiYjNDM7XHRcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XG4mIzQzO1x0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4mIzQzO1x0XHQqbmV3X25hbWUgPSBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXCYjMzQ7aWJkZXYldVwmIzM0OywgZGV2aWNlLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGJ1ZikpIHtcbiYjNDM7XHRcdCpuZXdfbmFtZSA9IGJ1ZjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBpZDtcbiYjNDM7XHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIGZhbGxiYWNrX3BhdHRlcm4sIGlkKTtcbiYjNDM7XHQqbmV3X25hbWUgPSBidWY7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnRcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcbiAgKiBpbnRvIG5ldC5cbiYjNDM7ICpcbiYjNDM7ICogTmFtaW5nIHJ1bGVzIGFyZSBoYW5kbGVkIGJ5IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSgpLlxuICAqL1xuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbi1cdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pXG4ge1xuJiM0MztcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XG4mIzQzO1x0Y29uc3QgY2hhciAqbmV3X25hbWU7XG4gXHRpbnQgcmV0MiA9IC1FSU5WQUw7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE2OTQsMzAgJiM0MzsxODA2LDY4IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZ1xuJiM0MztcdFx0ICogZG93biwgc28gYSBkb29tZWQgdXNlciBtb3ZlIGRvZXMgbm90IGRpc2FibGUgYSBsaXZlIGRldmljZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHNpemVvZihidWYpLCBcdTAwMjZuZXdfbmFtZSk7XG4mIzQzO1x0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTtcbiBcdGRpc2FibGVfZGV2aWNlKGRldmljZSk7XG4gXG4gXHQvKlxuLVx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cbi1cdCAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLlxuJiM0MztcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXG4mIzQzO1x0ICogbm93IHRoYXQgdGhlIGRldmljZSBpcyBkaXNhYmxlZCwgY2xvc2luZyByYWNlcyB3aXRoIGEgY29uY3VycmVudFxuJiM0MztcdCAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnNcbiYjNDM7XHQgKiBsZXZlbC5cbiBcdCAqL1xuLVx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNm5ld19uYW1lKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xuJiM0MztcdFx0XHRXQVJOKDEsXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7JXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuJiM0MztcdFx0XHRpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIG5ldCk7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIHJlbmFtZV9kb25lO1xuJiM0MztcdH1cbiBcbi1cdGRvd25fcmVhZChcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbi1cdC8qXG4tXHQgKiBDdXJyZW50bHkgcmRtYSBkZXZpY2VzIGFyZSBzeXN0ZW0gd2lkZSB1bmlxdWUuIFNvIHRoZSBkZXZpY2UgbmFtZVxuLVx0ICogaXMgZ3VhcmFudGVlZCBmcmVlIGluIHRoZSBuZXcgbmFtZXNwYWNlLiBQdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlXG4tXHQgKiBhdCB0aGUgc3lzZnMgbGV2ZWwuXG4tXHQgKi9cbi1cdHJldCA9IGRldmljZV9yZW5hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpO1xuLVx0dXBfcmVhZChcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuJiM0MztcdGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKGRldmljZSwgbmV0KTtcbiYjNDM7XHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIG5ld19uYW1lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7JXM6IENvdWxkbiYjMzk7dCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cJiMzNDssXG4tXHRcdFx0IF9fZnVuY19fKTtcbi1cdFx0LyogVHJ5IGFuZCBwdXQgdGhpbmdzIGJhY2sgYW5kIHJlLWVuYWJsZSB0aGUgZGV2aWNlICovXG4tXHRcdHdyaXRlX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xuJiM0MztcdFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcbiYjNDM7XHRcdFx0V0FSTigxLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0OyVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbiYjNDM7XHRcdFx0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBjdXJfbmV0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Ryc2NweShkZXZpY2UtXHUwMDNlbmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdElCX0RFVklDRV9OQU1FX01BWCk7XG4gXHR9XG4mIzQzO3JlbmFtZV9kb25lOlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuIFxuIFx0cmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpO1xuIFx0aWYgKHJldDIpIHtcbkBAIC0xNzQwLDM2ICYjNDM7MTg5MCw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4gfVxuIFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCByZXQ7XG4gXG4gXHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5zX2ZkKTtcbiBcdGlmIChJU19FUlIobmV0KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXCYjMzQ7KTtcbiBcdFx0cmV0ID0gUFRSX0VSUihuZXQpO1xuIFx0XHRnb3RvIG5ldF9lcnI7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FUEVSTTtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZpbmcgYSBkZXZpY2UgdG8gdGhlIG5hbWVzcGFjZSBpdCBhbHJlYWR5IGxpdmVzIGluIGlzIGEgbm8tb3A7IGFcbiYjNDM7XHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcdTAwMjZkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XG4mIzQzO1x0XHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O1VuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbCB0aGUgaWJfY2xpZW50cywgaW5jbHVkaW5nIHV2ZXJicywgYXJlIHJlc2V0IHdoZW4gdGhlIG5hbWVzcGFjZSBpc1xuIFx0ICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG9cbiBcdCAqIHNvbWV0aGluZywgc28gZGlzYXNzb2NpYXRpb24gaXMgbWFuZGF0b3J5LlxuIFx0ICovXG4tXHRpZiAoIWRldi1cdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0IHx8IGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0aWYgKGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGVcJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0RldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcJiMzNDspO1xuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0aWJfZGV2aWNlX3B1dChkZXYpO1xuLVx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0KTtcbiYjNDM7XHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCBuZXQsIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIE5VTEwpO1xuIFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiBcbiBcdHB1dF9uZXQobmV0KTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbmluZGV4IGY1OTljMjRiMzRlODFiLi40NzNiZjk2NjdmODNlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbkBAIC0xMTc3LDYgJiM0MzsxMTc3LDI0IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIWRldmljZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xuJiM0MztcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiYjNDM7XHRcdHUzMiBuc19mZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuJiM0MztcdFx0XHRubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLFxuJiM0MztcdFx0XHRcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuJiM0MztcdFx0XHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuJiM0MztcdFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgbmFtZVswXSA/IG5hbWUgOiBOVUxMLCBleHRhY2spO1xuJiM0MztcdFx0Z290byBwdXRfZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHtcbiBcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiBcbkBAIC0xMTkwLDE0ICYjNDM7MTIwOCw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbi1cdFx0dTMyIG5zX2ZkO1xuLVxuLVx0XHRuc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7XG4tXHRcdGVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7XG4tXHRcdGdvdG8gcHV0X2RvbmU7XG4tXHR9XG4tXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XG4gXHRcdHU4IHVzZV9kaW07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbkBAIC03MDAsNiAmIzQzOzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxuIFx0aWYgKHFwX3R5cGUgIT0gSUJfUVBUX1NNSSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbFxuJiM0MztcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxuJiM0MztcdCAqIHRoZSBzYW1lIGxhYmVsOyBkaXN0aW5ndWlzaGluZyB0aGVtIHdvdWxkIG5lZWQgbmV0IG5hbWVzcGFjZSBzdXBwb3J0XG4mIzQzO1x0ICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy5cbiYjNDM7XHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcbiBcdHJldCA9IHNlY3VyaXR5X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldChhZ2VudC1cdTAwM2VzZWN1cml0eSxcbiBcdFx0XHRcdFx0XHRkZXZfbmFtZShcdTAwMjZhZ2VudC1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2KSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuQEAgLTI0MCw2ICYjNDM7MjQwLDEwIEBAIHN0YXRpYyB2b2lkIHJ4ZV9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcbiBcdFx0cnhlX2Vycl91Yyh1YywgXCYjMzQ7Y2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnhlX2Rpc2Fzc29jaWF0ZV91Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiAvKiBwZCAqL1xuIHN0YXRpYyBpbnQgcnhlX2FsbG9jX3BkKHN0cnVjdCBpYl9wZCAqaWJwZCwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSlcbiB7XG5AQCAtMTQ3OCw2ICYjNDM7MTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHtcbiBcdC5kZXN0cm95X3NycSA9IHJ4ZV9kZXN0cm95X3NycSxcbiBcdC5kZXRhY2hfbWNhc3QgPSByeGVfZGV0YWNoX21jYXN0LFxuIFx0LmRldmljZV9ncm91cCA9IFx1MDAyNnJ4ZV9hdHRyX2dyb3VwLFxuJiM0MztcdC5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LFxuIFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcbiBcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXG4gXHQuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG5pbmRleCBhY2JkNzg3ZGUyNjViNS4uYTA3MGZjZjg2ZThhNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbkBAIC0zMTg5LDEwICYjNDM7MzE4OSwyNCBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3JwX2NsYXNzX2F0dHJzW107XG4gXG4gQVRUUklCVVRFX0dST1VQUyhzcnBfY2xhc3MpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcbiYjNDM7ICogZGV2aWNlJiMzOTtzIG5ldCBuYW1lc3BhY2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqc3JwX25ldF9uYW1lc3BhY2UoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LVx1MDAzZXNycF9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGNsYXNzIHNycF9jbGFzcyA9IHtcbiBcdC5uYW1lICAgID0gXCYjMzQ7aW5maW5pYmFuZF9zcnBcJiMzNDssXG4gXHQuZGV2X2dyb3VwcyA9IHNycF9jbGFzc19ncm91cHMsXG4tXHQuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXZcbiYjNDM7XHQuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXYsXG4mIzQzO1x0Lm5zX3R5cGUgPSBcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxuJiM0MztcdC5uYW1lc3BhY2UgPSBzcnBfbmV0X25hbWVzcGFjZSxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjcxMTcwY2IwZTE5ZTM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAjZGVmaW5lIF9DR1JPVVBfUkRNQV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuIFxuIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUge1xuIFx0UkRNQUNHX1JFU09VUkNFX0hDQV9IQU5ETEUsXG5AQCAtMzQsNiAmIzQzOzM1LDE1IEBAIHN0cnVjdCByZG1hY2dfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9ub2RlO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0cnBvb2xzO1xuIFx0Y2hhclx0XHRcdCpuYW1lO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8uIEBuZXRuc19zaGFyZWQgbWlycm9yc1xuJiM0MztcdCAqIGliX2RldmljZXNfc2hhcmVkX25ldG5zOiB3aGVuIHRydWUgdGhlIGRldmljZSBpcyB2aXNpYmxlIGZyb20gZXZlcnlcbiYjNDM7XHQgKiBuZXQgbmFtZXNwYWNlIChzaGFyZWQgbW9kZSk7IG90aGVyd2lzZSBAbmV0IGlzIHRoZSBvbmx5IG5hbWVzcGFjZVxuJiM0MztcdCAqIHRoYXQgbWF5IHNlZSBhbmQgY29uZmlndXJlIGl0LiBAbmV0bnNfc2hhcmVkIGlzIHVwZGF0ZWQgd2hlbiB0aGVcbiYjNDM7XHQgKiBzaGFyaW5nIG1vZGUgY2hhbmdlcywgc28gdXNlIHtSRUFELFdSSVRFfV9PTkNFKCkgdG8gYWNjZXNzIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHBvc3NpYmxlX25ldF90XHRcdG5ldDtcbiYjNDM7XHRib29sXHRcdFx0bmV0bnNfc2hhcmVkO1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG5pbmRleCAzYWY5NDZlY2JhYzNlZC4uZWUxMWMzYmJiYWUyMmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbkBAIC01MTYsNyAmIzQzOzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XG4gXHRSRE1BX05MREVWX0FUVFJfREVWX1BST1RPQ09MLFx0XHQvKiBzdHJpbmcgKi9cbiBcbiBcdC8qXG4tXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxuJiM0MztcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcbiYjNDM7XHQgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZVxuJiM0MztcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXG4mIzQzO1x0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXG4gXHQgKi9cbiBcdFJETUFfTkxERVZfTkVUX05TX0ZELFx0XHRcdC8qIHUzMiAqL1xuIFx0LypcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL3JkbWEuYyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Nncm91cC9yZG1hLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nncm91cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFyc2VyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXBfcmRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuIFxuICNkZWZpbmUgUkRNQUNHX01BWF9TVFIgXCYjMzQ7bWF4XCYjMzQ7XG4gXG5AQCAtNDY0LDYgJiM0Mzs0NjUsMTMgQEAgdm9pZCByZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChyZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2UpO1xuIFxuJiM0MzsvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXG4mIzQzO3N0YXRpYyBib29sIHJkbWFjZ19kZXZpY2VfdmlzaWJsZShjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShkZXZpY2UtXHUwMDNlbmV0bnNfc2hhcmVkKSB8fFxuJiM0MztcdCAgICAgICBuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2VuZXQpLCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7XG5AQCAtNDcxLDcgJiM0Mzs0NzksOCBAQCBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcbi1cdFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuJiM0MztcdFx0aWYgKHJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuIFx0XHRcdHJldHVybiBkZXZpY2U7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC02MjYsNiAmIzQzOzYzNSw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX3Jlc291cmNlX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdG11dGV4X2xvY2soXHUwMDI2cmRtYWNnX211dGV4KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiYjNDM7XHRcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7JXMgXCYjMzQ7LCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4gXG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG5AQCAtNjQ4LDYgJiM0Mzs2NjAsOSBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuJiM0MztcdFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xuIFxuIFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcyBcJiMzNDssIGRldmljZS1cdTAwM2VuYW1lKTtcbkBAIC02NzcsNiAmIzQzOzY5Miw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG4mIzQzO1x0XHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG4gXG4gXHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyVzIFwmIzM0OywgZGV2aWNlLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xuaW5kZXggNjNlMjg2ZTJkZmFhOGQuLmZmOWM5YzM1Y2MyZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19wbmV0LmNcbkBAIC0zMDQsMTMgJiM0MzszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZS4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuICovXG4tc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpXG4mIzQzOy8qXG4mIzQzOyAqIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLCByZXN0cmljdGVkIHRvIHRoZSBkZXZpY2VzXG4mIzQzOyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmliX25hbWUpXG4ge1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGliZGV2LCBcdTAwMjZzbWNfaWJfZGV2aWNlcy5saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi1cdTAwM2VpYmRldiwgbmV0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghc3RybmNtcChpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VuYW1lLCBpYl9uYW1lLFxuIFx0XHRcdCAgICAgc2l6ZW9mKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZW5hbWUpKSB8fFxuIFx0XHQgICAgKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZWRldi5wYXJlbnQgXHUwMDI2XHUwMDI2XG5AQCAtNDA4LDggJiM0Mzs0MTMsOCBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9ldGgoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuLVx0XHRcdCAgIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbiYjNDM7c3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHQgICBjaGFyICppYl9uYW1lLCB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpXG4ge1xuIFx0c3RydWN0IHNtY19wbmV0ZW50cnkgKnRtcF9wZSwgKm5ld19wZTtcbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYl9kZXY7XG5AQCAtNDE5LDcgJiM0Mzs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuIFx0Ym9vbCBuZXdfaWJkZXY7XG4gXG4gXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xuLVx0aWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihpYl9uYW1lKTtcbiYjNDM7XHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XG4gXHRpZiAoaWJfZGV2KSB7XG4gXHRcdGliZGV2X2FwcGxpZWQgPSBzbWNfcG5ldF9hcHBseV9pYihpYl9kZXYsIGliX3BvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmIChpYmRldl9hcHBsaWVkKVxuQEAgLTUxOCw3ICYjNDM7NTIzLDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9lbnRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10pXG4gXHRcdFx0aWYgKGlicG9ydCBcdTAwM2MgMSB8fCBpYnBvcnQgXHUwMDNlIFNNQ19NQVhfUE9SVFMpXG4gXHRcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHR9XG4tXHRcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XG4mIzQzO1x0XHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmICghcmMpXG4gXHRcdFx0bmV3X2liZGV2ID0gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAocmMgIT0gLUVFWElTVClcbkBAIC0xMTcwLDYgJiM0MzsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KVxuIFx0c3RydWN0IHNtY19uZXQgKnNuO1xuIFx0aW50IHJjID0gLUVOT0VOVDtcbiBcbiYjNDM7XHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhzbWNpYmRldi1cdTAwM2VpYmRldiwgXHUwMDI2aW5pdF9uZXQpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuIFx0LyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi9cbiBcdHNuID0gbmV0X2dlbmVyaWMoXHUwMDI2aW5pdF9uZXQsIHNtY19uZXRfaWQpO1xuIFx0cG5ldHRhYmxlID0gXHUwMDI2c24tXHUwMDNlcG5ldHRhYmxlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5pbmRleCAwN2FmN2YxNWMxYmY3NC4uYTkxYzE0YzQ1MDA2ZTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAIFRFU1RfUFJPR1MgOj0gcnhlX3JwaW5nX2JldHdlZW5fbmV0bnMuc2ggXFxcbiBcdFx0cnhlX2lwdjYuc2ggXFxcbiBcdFx0cnhlX3NvY2tldF93aXRoX25ldG5zLnNoIFxcXG4gXHRcdHJ4ZV90ZXN0X05FVERFVl9VTlJFR0lTVEVSLnNoIFxcXG4tXHRcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2hcbiYjNDM7XHRcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXFxcbiYjNDM7XHRcdHJ4ZV9uZXRuc19uYW1lcy5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuaW5kZXggNGZmYjgxNGUyNTNiYmQuLmUxZmY1NGVjMGY1NzkwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5AQCAtMSwzICYjNDM7MSw1IEBAXG4gQ09ORklHX1RVTlxuIENPTkZJR19WRVRIXG4mIzQzO0NPTkZJR19EVU1NWVxuJiM0MztDT05GSUdfTkVUX05TXG4gQ09ORklHX1JETUFfUlhFXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hN2U1NzcwNmZkZmY3NVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2hcbkBAIC0wLDAgJiM0MzsxLDI4MiBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBFeGVyY2lzZSBSRE1BIGRldmljZSBuYW1lIGhhbmRsaW5nIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXG4mIzQzO1xuJiM0Mztzb3VyY2UgXCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQwXCYjMzQ7KS8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXCYjMzQ7XG4mIzQzO1xuJiM0MztOQU1FX1BSRUZJWD1cJiMzNDtyeGVfbmV0bnNfbmFtZXNfJCRcJiMzNDtcbiYjNDM7TkVUREVWX1BSRUZJWD1cJiMzNDtyeG4kJFwmIzM0O1xuJiM0MztOUzE9XCYjMzQ7JHtOQU1FX1BSRUZJWH1uczFcJiMzNDtcbiYjNDM7TlMyPVwmIzM0OyR7TkFNRV9QUkVGSVh9bnMyXCYjMzQ7XG4mIzQzO1JYRV9BPVwmIzM0OyR7TkFNRV9QUkVGSVh9cnhlX2FcJiMzNDtcbiYjNDM7UlhFX0I9XCYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfYlwmIzM0O1xuJiM0MztSWEVfU0FNRT1cJiMzNDske05BTUVfUFJFRklYfXJ4ZV9zYW1lXCYjMzQ7XG4mIzQzO1JYRV9ORVc9XCYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfbmV3XCYjMzQ7XG4mIzQzO0RVTU1ZX0E9XCYjMzQ7JHtORVRERVZfUFJFRklYfWFcJiMzNDtcbiYjNDM7RFVNTVlfQj1cJiMzNDske05FVERFVl9QUkVGSVh9YlwmIzM0O1xuJiM0MztPTERfTU9ERT1cJiMzNDtcJiMzNDtcbiYjNDM7TU9ERV9DSEFOR0VEPTBcbiYjNDM7TU9EUz0oXCYjMzQ7ZHVtbXlcJiMzNDsgXCYjMzQ7cmRtYV9yeGVcJiMzNDspXG4mIzQzO1RFU1RfU0FNRV9OQU1FUz1cJiMzNDtzYW1lIFJETUEgZGV2aWNlIG5hbWUgY2FuIGV4aXN0IGluIHR3byBuZXQgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztURVNUX01PVkVfQ09ORkxJQ1Q9XCYjMzQ7bW92ZSB3aXRob3V0IHJlbmFtZSBmYWlscyBvbiBkZXN0aW5hdGlvbiBuYW1lIGNvbmZsaWN0XCYjMzQ7XG4mIzQzO1RFU1RfTU9WRV9SRU5BTUU9XCYjMzQ7bW92ZSB0aGVuIHJlbmFtZSBzdWNjZWVkc1wmIzM0O1xuJiM0MztURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FPVwmIzM0O21vdmUgd2l0aCByZXF1ZXN0ZWQgZGVzdGluYXRpb24gbmFtZSBzdWNjZWVkc1wmIzM0O1xuJiM0MztURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRT1cJiMzNDtzYW1lLW5ldG5zIHJlbmFtZSByZWplY3RzIGR1cGxpY2F0ZSBuYW1lXCYjMzQ7XG4mIzQzO1RFU1RfVEVBUkRPV05fUkVUVVJOPVwmIzM0O25ldG5zIGRlbGV0ZSByZXR1cm5zIGRldmljZSB0byBpbml0X25ldCBhbmQgcmVuYW1lcyBvbiBjb25mbGljdFwmIzM0O1xuJiM0MztcbiYjNDM7a3NmdF9za2lwKClcbiYjNDM7e1xuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JCpcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZmFpbCgpXG4mIzQzO3tcbiYjNDM7XHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7JCpcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bmVlZF9jbWQoKVxuJiM0Mzt7XG4mIzQzO1x0Y29tbWFuZCAtdiBcJiMzNDskMVwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwga3NmdF9za2lwIFwmIzM0O21pc3NpbmcgY29tbWFuZDogJDFcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9ucygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IHJkbWEgXCYjMzQ7JEBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9kZXZfZXhpc3RzKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxXG4mIzQzO1x0bG9jYWwgZGV2PSQyXG4mIzQzO1xuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JG5zXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJkbWFfbnMgXCYjMzQ7JG5zXCYjMzQ7IGRldiBzaG93IFwmIzM0OyRkZXZcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmRtYSBkZXYgc2hvdyBcJiMzNDskZGV2XCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2FkZF9kdW1teSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuZXRkZXY9JDFcbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgXCYjMzQ7JG5ldGRldlwmIzM0OyB0eXBlIGR1bW15IHx8IHJldHVybiAxXG4mIzQzO1x0aXAgbGluayBzZXQgXCYjMzQ7JG5ldGRldlwmIzM0OyB1cCB8fCByZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzthZGRfcnhlKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIGRldj0kMVxuJiM0MztcdGxvY2FsIG5ldGRldj0kMlxuJiM0MztcbiYjNDM7XHRyZG1hIGxpbmsgYWRkIFwmIzM0OyRkZXZcJiMzNDsgdHlwZSByeGUgbmV0ZGV2IFwmIzM0OyRuZXRkZXZcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9kZXZfb25fbmV0ZGV2KClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5ldGRldj0kMVxuJiM0MztcbiYjNDM7XHRyZG1hIGxpbmsgc2hvdyAyXHUwMDNlL2Rldi9udWxsIHwgYXdrIC12IHdhbnQ9XCYjMzQ7JG5ldGRldlwmIzM0OyAmIzM5O1xuJiM0MztcdFx0e1xuJiM0MztcdFx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBORjsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0aWYgKCRpID09IFwmIzM0O25ldGRldlwmIzM0OyBcdTAwMjZcdTAwMjYgJChpICYjNDM7IDEpID09IHdhbnQpIHtcbiYjNDM7XHRcdFx0XHRcdGRldiA9ICQyXG4mIzQzO1x0XHRcdFx0XHRzdWIoL1xcLy4qLywgXCYjMzQ7XCYjMzQ7LCBkZXYpXG4mIzQzO1x0XHRcdFx0XHRwcmludCBkZXZcbiYjNDM7XHRcdFx0XHRcdGV4aXRcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHR9JiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7d2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmV0ZGV2PSQxXG4mIzQzO1x0bG9jYWwgZGV2XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdGRldj0kKHJkbWFfZGV2X29uX25ldGRldiBcJiMzNDskbmV0ZGV2XCYjMzQ7KVxuJiM0MztcdFx0aWYgWyAtbiBcJiMzNDskZGV2XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDskZGV2XCYjMzQ7XG4mIzQzO1x0XHRcdHJldHVybiAwXG4mIzQzO1x0XHRmaVxuJiM0MztcdFx0c2xlZXAgMC4xXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF9kZXZzKClcbiYjNDM7e1xuJiM0MztcdGNsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7XHRhZGRfZHVtbXkgXCYjMzQ7JERVTU1ZX0FcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XHRhZGRfZHVtbXkgXCYjMzQ7JERVTU1ZX0JcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0YWRkX3J4ZSBcJiMzNDskUlhFX0FcJiMzNDsgXCYjMzQ7JERVTU1ZX0FcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XHRhZGRfcnhlIFwmIzM0OyRSWEVfQlwmIzM0OyBcJiMzNDskRFVNTVlfQlwmIzM0OyB8fCByZXR1cm4gMVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjbGVhbnVwX2RldnMoKVxuJiM0Mzt7XG4mIzQzO1x0aXAgbGluayBkZWwgXCYjMzQ7JERVTU1ZX0FcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIGxpbmsgZGVsIFwmIzM0OyREVU1NWV9CXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXAoKVxuJiM0Mzt7XG4mIzQzO1x0T0xEX01PREU9JChyZG1hIHN5c3RlbSBzaG93IDJcdTAwM2UvZGV2L251bGwgfFxuJiM0MztcdFx0ICAgc2VkIC1uICYjMzk7cy8uKm5ldG5zIFxcKFteIF0qXFwpLiovXFwxL3AmIzM5OylcbiYjNDM7XHRbIC1uIFwmIzM0OyRPTERfTU9ERVwmIzM0OyBdIHx8IGtzZnRfc2tpcCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbiYjNDM7XHRcdGtzZnRfc2tpcCBcJiMzNDtyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDtcbiYjNDM7XHRNT0RFX0NIQU5HRUQ9MVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBhZGQgXCYjMzQ7JE5TMVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIGFkZCBcJiMzNDskTlMyXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NsZWFudXAoKVxuJiM0Mzt7XG4mIzQzO1x0Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskTlMxXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpcCBuZXRucyBkZWwgXCYjMzQ7JE5TMlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1xuJiM0MztcdGlmIFsgXCYjMzQ7JE1PREVfQ0hBTkdFRFwmIzM0OyAtZXEgMSBdOyB0aGVuXG4mIzQzO1x0XHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgXCYjMzQ7JE9MRF9NT0RFXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRmb3IgbSBpbiBcJiMzNDske01PRFNbQF19XCYjMzQ7OyBkb1xuJiM0MztcdFx0bW9kcHJvYmUgLXIgXCYjMzQ7JG1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZSgpXG4mIzQzO3tcbiYjNDM7XHRyZG1hIGRldiBoZWxwIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtRXEgJiMzOTtuZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7WyBcJiMzNDskKGlkIC11KVwmIzM0OyAtZXEgMCBdIHx8IGtzZnRfc2tpcCBcJiMzNDttdXN0IGJlIHJ1biBhcyByb290XCYjMzQ7XG4mIzQzO25lZWRfY21kIGlwXG4mIzQzO25lZWRfY21kIHJkbWFcbiYjNDM7bmVlZF9jbWQgbW9kcHJvYmVcbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0Mztmb3IgbSBpbiBcJiMzNDske01PRFNbQF19XCYjMzQ7OyBkb1xuJiM0MztcdG1vZGluZm8gXCYjMzQ7JG1cJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8IGtzZnRfc2tpcCBcJiMzNDttb2R1bGUgJG0gbm90IGZvdW5kXCYjMzQ7XG4mIzQzO1x0bW9kcHJvYmUgXCYjMzQ7JG1cJiMzNDsgfHwgZmFpbCBcJiMzNDtmYWlsZWQgdG8gbG9hZCAkbVwmIzM0O1xuJiM0Mztkb25lXG4mIzQzO1xuJiM0MztzZXR1cCB8fCBmYWlsIFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgbmV0IG5hbWVzcGFjZXNcJiMzNDtcbiYjNDM7XG4mIzQzO2t0YXBfcHJpbnRfaGVhZGVyXG4mIzQzO2t0YXBfc2V0X3BsYW4gN1xuJiM0MztcbiYjNDM7aWYgc2V0dXBfZGV2cyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuZXRucyBcJiMzNDskTlMxXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hX25zIFwmIzM0OyROUzFcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYV9ucyBcJiMzNDskTlMyXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMVwmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX1NBTUVfTkFNRVNcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkFNRVNcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHNldHVwX2RldnMgfHxcbiYjNDM7ICAgISByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzFcJiMzNDsgfHxcbiYjNDM7ICAgISByZG1hX25zIFwmIzM0OyROUzFcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgfHxcbiYjNDM7ICAgISByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzJcJiMzNDsgfHxcbiYjNDM7ICAgISByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDs7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYV9ucyBcJiMzNDskTlMxXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzJcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVFwmIzM0O1xuJiM0MztlbGlmIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMxXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgICByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDs7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7ZWxpZiByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzJcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgICAgcmRtYV9ucyBcJiMzNDskTlMyXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX05FV1wmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9BXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7aWYgISByZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3NraXAgXCYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7ZWxpZiAhIHNldHVwX2RldnM7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfTkVXXCYjMzQ7OyB0aGVuXG4mIzQzO1x0aWYgcmRtYV9kZXZfZXhpc3RzIFwmIzM0OyROUzJcJiMzNDsgXCYjMzQ7JFJYRV9ORVdcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgISByZG1hX2Rldl9leGlzdHMgXCYjMzQ7XCYjMzQ7IFwmIzM0OyRSWEVfQVwmIzM0OzsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgICAgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfTkVXXCYjMzQ7OyB0aGVuXG4mIzQzO1x0aWYgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfTkVXXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZWxpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7XCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7ZWxpZiAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgfHxcbiYjNDM7ICAgICAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyB8fFxuJiM0MzsgICAgICEgcmRtYV9ucyBcJiMzNDskTlMyXCYjMzQ7IGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IHx8XG4mIzQzOyAgICAgISByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDs7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskTlMyXCYjMzQ7XG4mIzQzO1x0cmV0dXJuZWQ9JCh3YWl0X3JkbWFfZGV2X29uX25ldGRldiBcJiMzNDskRFVNTVlfQlwmIzM0OylcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDtkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJiMzOTske3JldHVybmVkOi1cdTAwM2NtaXNzaW5nXHUwMDNlfSYjMzk7XCYjMzQ7XG4mIzQzO1x0aWYgcmRtYV9kZXZfZXhpc3RzIFwmIzM0O1wmIzM0OyBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgWyAtbiBcJiMzNDskcmV0dXJuZWRcJiMzNDsgXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICBbIFwmIzM0OyRyZXR1cm5lZFwmIzM0OyAhPSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICBbIFwmIzM0OyR7cmV0dXJuZWQjaWJkZXZ9XCYjMzQ7ICE9IFwmIzM0OyRyZXR1cm5lZFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk5cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2t0YXBfZmluaXNoZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX1NSUCYjMzQ7LAogICAgJiMzNDtSRE1BX1JYRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2liX2RldmljZV9zZXRfbmV0bnNfcHV0JiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X2NoYW5nZV9uZXRucyYjMzQ7LAogICAgJiMzNDtyZG1hX2Rldl9waWNrX25ldG5zX25hbWUmIzM0OywKICAgICYjMzQ7bmxkZXZfc2V0X2RvaXQmIzM0OywKICAgICYjMzQ7cmRtYWNnX2RldmljZV92aXNpYmxlJiMzNDssCiAgICAmIzM0O3NtY19wbmV0X2ZpbmRfaWImIzM0OywKICAgICYjMzQ7c3JwX25ldF9uYW1lc3BhY2UmIzM0OywKICAgICYjMzQ7X19hbGxvY19uYW1lX2lkJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X25hbWVfaW5fbmV0bnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcywgYWxsb3dpbmcgdGhlbSB0byBiZSBpc29sYXRlZCBhbmQgcmVuYW1lZCBwZXIgbmV0d29yayBuYW1lc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBSRE1BIGNvcmUsIFJETUEgY2dyb3VwcywgU01DLCBhbmQgU1JQLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGNncm91cGZzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNzZhZTlmN2M1NTkzNWZiMWMzOGI4OTg2ZDkwNWQ0ZWVkNTU5ZjZiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMDM6NTU6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20KaW5kZXggNzRmOTUwNmY0MmU3YWMuLjczOWY3YjZhMTI1OThiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20KJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtCkBAIC0xMiw2ICYjNDM7MTIsMTAgQEAgRGVzY3JpcHRpb246IAlJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG8KIAkJZm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOgogCQlta2RpciAtcCAvY29uZmlnL3JkbWFfY20vJmx0O2hjYSZndDsKIAomIzQzOwkJTm90ZTogY29uZmlnZnMgaGFzIG5vIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQsIHNvIHRoaXMKJiM0MzsJCWludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluCiYjNDM7CQlkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIChwb3NzaWJsZSBpbiBleGNsdXNpdmUgbmV0bnMgbW9kZSkuCiYjNDM7CiAKIFdoYXQ6IAkJL2NvbmZpZy9yZG1hX2NtLyZsdDtoY2EmZ3Q7L3BvcnRzLyZsdDtwb3J0LW51bSZndDsvZGVmYXVsdF9yb2NlX21vZGUKIERhdGU6IAkJTm92ZW1iZXIgMjksIDIwMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAppbmRleCA5OTM0NDZhYjY2ZDBmYi4uNDUyM2MxODg0ZDY3MTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTI3NTIsNiAmIzQzOzI3NTIsMTMgQEAgUkRNQQogVGhlICYjMzQ7cmRtYSYjMzQ7IGNvbnRyb2xsZXIgcmVndWxhdGVzIHRoZSBkaXN0cmlidXRpb24gYW5kIGFjY291bnRpbmcgb2YKIFJETUEgcmVzb3VyY2VzLgogCiYjNDM7V2hlbiBSRE1BIGRldmljZXMgYXJlIGlzb2xhdGVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZSAoZXhjbHVzaXZlIG1vZGUpLAomIzQzO2RldmljZSBuYW1lcyBhcmUgdW5pcXVlIG9ubHkgd2l0aGluIGEgbmV0d29yayBuYW1lc3BhY2UuIFRoZSBkZXZpY2UgbGluZXMKJiM0MztiZWxvdyBhcmUgdGhlcmVmb3JlIHNjb3BlZCB0byB0aGUgcmVhZGluZyBvciB3cml0aW5nIHByb2Nlc3MmIzM5O3MgbmV0d29yawomIzQzO25hbWVzcGFjZTogb25seSBkZXZpY2VzIGFjY2Vzc2libGUgZnJvbSB0aGF0IG5hbWVzcGFjZSBhcmUgbGlzdGVkLCBhbmQgYQomIzQzO2xpbWl0IGlzIGFwcGxpZWQgdG8gdGhlIGRldmljZSBvZiB0aGF0IG5hbWUgaW4gdGhhdCBuYW1lc3BhY2UuIENvbmZpZ3VyZQomIzQzO2xpbWl0cyBmcm9tIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIGFzIHRoZSB3b3JrbG9hZHMuCiYjNDM7CiBSRE1BIEludGVyZmFjZSBGaWxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYwppbmRleCAxZjAzN2ZlMDE0NTBlZi4uN2EyMTZlZDQ1MTk5YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jCkBAIC0xNyw2ICYjNDM7MTcsOCBAQAogdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKIAlkZXZpY2UtJmd0O2NnX2RldmljZS5uYW1lID0gZGV2aWNlLSZndDtuYW1lOwomIzQzOwlkZXZpY2UtJmd0O2NnX2RldmljZS5uZXRuc19zaGFyZWQgPSBpYl9kZXZpY2VzX3NoYXJlZF9uZXRuczsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y2dfZGV2aWNlLm5ldCwgcmRtYV9kZXZfbmV0KGRldmljZSkpOwogCXJkbWFjZ19yZWdpc3Rlcl9kZXZpY2UoJmFtcDtkZXZpY2UtJmd0O2NnX2RldmljZSk7CiB9CiAKQEAgLTM0LDYgJiM0MzszNiwxNiBAQCB2b2lkIGliX2RldmljZV91bnJlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiAJcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7ZGV2aWNlLSZndDtjZ19kZXZpY2UpOwogfQogCiYjNDM7dm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NnX2RldmljZS5uZXQsIG5ldCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19zZXRfbmV0bnNfc2hhcmVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgYm9vbCBzaGFyZWQpCiYjNDM7ewomIzQzOwlXUklURV9PTkNFKGRldmljZS0mZ3Q7Y2dfZGV2aWNlLm5ldG5zX3NoYXJlZCwgc2hhcmVkKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaiwKIAkJCSBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiAJCQkgZW51bSByZG1hY2dfcmVzb3VyY2VfdHlwZSByZXNvdXJjZV9pbmRleCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMKaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwpAQCAtNjUsNiAmIzQzOzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluCiYjNDM7ICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuCiYjNDM7ICovCiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSkKIHsKIAlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZSgmYW1wO2liX2Rldi0mZ3Q7ZGV2KSwgY29va2llKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmgKaW5kZXggMTkxMDRjNTQyYjI3MGQuLjljZDY3MWUyZGIyMDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaApAQCAtMTU2LDYgJiM0MzsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9SRE1BCiB2b2lkIGliX2RldmljZV9yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CiYjNDM7dm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7dm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZCk7CiAKIGludCBpYl9yZG1hY2dfdHJ5X2NoYXJnZShzdHJ1Y3QgaWJfcmRtYWNnX29iamVjdCAqY2dfb2JqLAogCQkJIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKQEAgLTE3Myw2ICYjNDM7MTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogewogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKJiM0MzsJCQkJCQkgc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiYjNDM7CQkJCQkJICAgICBib29sIHNoYXJlZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaiwKIAkJCQkgICAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAogCQkJCSAgICAgICBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KQpAQCAtMzU2LDcgJiM0MzszNjgsOCBAQCB2b2lkIGliX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRfZ3JvdXBzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydF9udW0sCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTsKIAogaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpOwomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IGI4MTkzZTA3N2E3NDZmLi5jZmZiMGRlMWMwMDE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKQEAgLTEyOSw3ICYjNDM7MTI5LDcgQEAgc3RhdGljIERFQ0xBUkVfUldTRU0ocmRtYV9uZXRzX3J3c2VtKTsKIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0bnNfbW9kZSwKLQkJICYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkmIzM0Oyk7CiYjNDM7CQkgJiMzNDtTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKS4gSW4gZXhjbHVzaXZlIG1vZGUgZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgcGVyIG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiAvKioKICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkCiAgKgkJCSAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC4KQEAgLTI2OCw3ICYjNDM7MjY4LDggQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpYmRldl9sc21fbmIgPSB7CiB9OwogCiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCi0JCQkJIHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7CiAKIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovCiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7CkBAIC0zNTEsMTMgJiM0MzszNTIsMTUgQEAgdm9pZCBpYl9kZXZpY2VfcHV0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIH0KIEVYUE9SVF9TWU1CT0woaWJfZGV2aWNlX3B1dCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAl4YV9mb3JfZWFjaCAoJmFtcDtkZXZpY2VzLCBpbmRleCwgZGV2aWNlKQotCQlpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiYjNDM7CQlpZiAocmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiAJCQlyZXR1cm4gZGV2aWNlOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0zOTUsNyAmIzQzOzM5OCw3IEBAIGludCBpYl9kZXZpY2VfcmVuYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHsKJiM0MzsJaWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7CiAJCXVwX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiAJCXJldHVybiAtRUVYSVNUOwogCX0KQEAgLTQzNSw3ICYjNDM7NDM4LDEzIEBAIGludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQomIzQzOy8qCiYjNDM7ICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAmIzM5OyVkJiMzOTsgc3R5bGUgQG5hbWUgcGF0dGVybiB3aXRoaW4gbmV0IG5hbWVzcGFjZQomIzQzOyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHMKJiM0MzsgKiB0aGUgZmluYWwgdW5pcXVlIGRldmljZSBuYW1lIGZyb20gdGhlIHJldHVybmVkIGluZGV4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpza2lwKQogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwpAQCAtNDQ4LDYgJiM0Mzs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiAJeGFfZm9yX2VhY2ggKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldmljZSkgewogCQljaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdOwogCiYjNDM7CQlpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChzc2NhbmYoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiksIG5hbWUsICZhbXA7aSkgIT0gMSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSAmbHQ7IDAgfHwgaSAmZ3Q7PSBJTlRfTUFYKQpAQCAtNDYyLDE1ICYjNDM7NDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKIAl9CiAKIAlyYyA9IGlkYV9hbGxvYygmYW1wO2ludXNlLCBHRlBfS0VSTkVMKTsKLQlpZiAocmMgJmx0OyAwKQotCQlnb3RvIG91dDsKLQotCXJjID0gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgcmMpOwogb3V0OgogCWlkYV9kZXN0cm95KCZhbXA7aW51c2UpOwogCXJldHVybiByYzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBpZDsKJiM0MzsKJiM0MzsJaWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpOwomIzQzOwlpZiAoaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGlkOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwpAQCAtMTA5NCw2ICYjNDM7MTExNyw3IEBAIHN0YXRpYyBpbnQgYWRkX2FsbF9jb21wYXRfZGV2cyh2b2lkKQogaW50IHJkbWFfY29tcGF0ZGV2X3NldCh1OCBlbmFibGUpCiB7CiAJc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldDsKJiM0MzsJc3RydWN0IGliX2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKQEAgLTExMTYsNiAmIzQzOzExNDAsMTIgQEAgaW50IHJkbWFfY29tcGF0ZGV2X3NldCh1OCBlbmFibGUpCiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FQlVTWTsKIAomIzQzOwkvKiBLZWVwIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UmIzM5O3MgcmRtYSBjZ3JvdXAgdmlzaWJpbGl0eSBpbiBzeW5jLiAqLwomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJeGFfZm9yX2VhY2hfbWFya2VkKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldiwgREVWSUNFX1JFR0lTVEVSRUQpCiYjNDM7CQlpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoZGV2LCBlbmFibGUpOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CiAJaWYgKGVuYWJsZSkKIAkJcmV0ID0gYWRkX2FsbF9jb21wYXRfZGV2cygpOwogCWVsc2UKQEAgLTExNTEsOCAmIzQzOzExODEsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCiAJCS8qCiAJCSAqIElmIHRoZSByZWFsIGRldmljZSBpcyBpbiB0aGUgTlMgdGhlbiBtb3ZlIGl0IGJhY2sgdG8gaW5pdC4KJiM0MzsJCSAqIFByb3ZpZGUgYSBmYWxsYmFjayBwYXR0ZXJuIHNvIGEgbmFtZSBjb25mbGljdCBpbiBpbml0X25ldAomIzQzOwkJICogY2Fubm90IG1ha2UgdGhlIHRlYXJkb3duIG1vdmUgZmFpbC4KIAkJICovCi0JCXJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgJmFtcDtpbml0X25ldCk7CiYjNDM7CQlpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KCZhbXA7ZGV2LSZndDtjb3JlZGV2LnJkbWFfbmV0KSkpIHsKJiM0MzsJCQlyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsICZhbXA7aW5pdF9uZXQsCiYjNDM7CQkJCQkJICAgIE5VTEwsICYjMzQ7aWJkZXYlZCYjMzQ7KTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlXQVJOKDEsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgICAgZGV2X25hbWUoJmFtcDtkZXYtJmd0O2RldiksIHJldCk7CiYjNDM7CQl9CiAKIAkJcHV0X2RldmljZSgmYW1wO2Rldi0mZ3Q7ZGV2KTsKIAkJZG93bl9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7CkBAIC0xMjA2LDcgJiM0MzsxMjQ1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHJkbWFfZGV2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIH0KIAogLyoKLSAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoaXMgaXMKJiM0MzsgKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGUgZGV2aWNlCiYjNDM7ICogbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBuZXQgbmFtZXNwYWNlIHRoZSBkZXZpY2UgaXMgYXNzaWduZWQgdG8uIFRoaXMgaXMKICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS4KICAqLwogc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xMjIzLDcgJiM0MzsxMjYzLDggQEAgc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpCiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldikpKSB7CiYjNDM7CWlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSwKJiM0MzsJCQkJICAgIHJkbWFfZGV2X25ldChkZXZpY2UpKSkgewogCQlyZXQgPSAtRU5GSUxFOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzIyLDYgJiM0MzsxMzYzLDcgQEAgc3RhdGljIGludCBlbmFibGVfZGV2aWNlX2FuZF9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogCSAqLwogCXJlZmNvdW50X3NldCgmYW1wO2RldmljZS0mZ3Q7cmVmY291bnQsIDIpOwogCWRvd25fd3JpdGUoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJaWJfZGV2aWNlX3JkbWFjZ19zZXRfbmV0bnNfc2hhcmVkKGRldmljZSwgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpOwogCXhhX3NldF9tYXJrKCZhbXA7ZGV2aWNlcywgZGV2aWNlLSZndDtpbmRleCwgREVWSUNFX1JFR0lTVEVSRUQpOwogCiAJLyoKQEAgLTEzODgsOCAmIzQzOzE0MzAsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIC8qKgogICogaWJfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgYW4gSUIgZGV2aWNlIHdpdGggSUIgY29yZQogICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyCi0gKiBAbmFtZTogdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZS4gVGhpcyBtYXkgaW5jbHVkZSBhICYjMzk7JSYjMzk7IHdoaWNoIHdpbGwKLSAqIAkgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuCiYjNDM7ICogQG5hbWU6IGRldmljZSBuYW1lLCB1bmlxdWUgd2l0aGluIHRoZSBkZXZpY2UmIzM5O3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXkKJiM0MzsgKgkgIGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZQomIzQzOyAqCSAgcGFzc2VkIGRldmljZSBuYW1lLgogICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQgogICoJICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxlciBzaG91bGQgZnVsbHkKICAqCQlzZXR1cCB0aGUgaWJkZXYgZm9yIERNQS4gVGhpcyB1c3VhbGx5IG1lYW5zIHVzaW5nIGRtYV92aXJ0X29wcy4KQEAgLTE2NzAsMTQgJiM0MzsxNzEzLDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldikKIH0KIEVYUE9SVF9TWU1CT0woaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKTsKIAomIzQzO3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LAomIzQzOwkJCQkgICBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldmljZSkKJiM0MzsJCWlmIChkZXZpY2UgIT0gc2tpcCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaG9vc2UgdGhlIG5hbWUgQGRldmljZSBzaG91bGQgdXNlIGluIG5ldCBuYW1lc3BhY2UgQG5ldC4gQHJlcXVlc3RlZF9uYW1lCiYjNDM7ICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWUKJiM0MzsgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJiMzOTslZCYjMzk7IEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlCiYjNDM7ICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LAomIzQzOwkJCQkgICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuLAomIzQzOwkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKipuZXdfbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBpZDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwomIzQzOwlpZiAocmVxdWVzdGVkX25hbWUpIHsKJiM0MzsJCWlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7CiYjNDM7CQkJKm5ld19uYW1lID0gcmVxdWVzdGVkX25hbWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKSkgewomIzQzOwkJKm5ld19uYW1lID0gZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZhbGxiYWNrX3BhdHRlcm4pCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBidWZfbGVuLCAmIzM0O2liZGV2JXUmIzM0OywgZGV2aWNlLSZndDtpbmRleCk7CiYjNDM7CWlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkgewomIzQzOwkJKm5ld19uYW1lID0gYnVmOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpOwomIzQzOwlpZiAoaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGlkOwomIzQzOwlzbnByaW50ZihidWYsIGJ1Zl9sZW4sIGZhbGxiYWNrX3BhdHRlcm4sIGlkKTsKJiM0MzsJKm5ld19uYW1lID0gYnVmOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgogICogVGhlIGNhbGxlciBtdXN0IHBhc3MgaW4gYSBkZXZpY2UgdGhhdCBoYXMgdGhlIGtyZWYgaGVsZCBhbmQgdGhlIHJlZmNvdW50CiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWQKICAqIGludG8gbmV0LgomIzQzOyAqCiYjNDM7ICogTmFtaW5nIHJ1bGVzIGFyZSBoYW5kbGVkIGJ5IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSgpLgogICovCiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCi0JCQkJIHN0cnVjdCBuZXQgKm5ldCkKJiM0MzsJCQkJIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsCiYjNDM7CQkJCSBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKQogewomIzQzOwljaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdOwomIzQzOwljb25zdCBjaGFyICpuZXdfbmFtZTsKIAlpbnQgcmV0MiA9IC1FSU5WQUw7CiAJaW50IHJldDsKIApAQCAtMTY5NCwzMCAmIzQzOzE4MDYsNjggQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKCFmYWxsYmFja19wYXR0ZXJuKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZwomIzQzOwkJICogZG93biwgc28gYSBkb29tZWQgdXNlciBtb3ZlIGRvZXMgbm90IGRpc2FibGUgYSBsaXZlIGRldmljZS4KJiM0MzsJCSAqLwomIzQzOwkJZG93bl93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwkJcmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSwKJiM0MzsJCQkJCSAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsCiYjNDM7CQkJCQkgICAgICAgc2l6ZW9mKGJ1ZiksICZhbXA7bmV3X25hbWUpOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAlrb2JqZWN0X3VldmVudCgmYW1wO2RldmljZS0mZ3Q7ZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlkaXNhYmxlX2RldmljZShkZXZpY2UpOwogCiAJLyoKLQkgKiBBdCB0aGlzIHBvaW50IG5vIG9uZSBjYW4gYmUgdXNpbmcgdGhlIGRldmljZSwgc28gaXQgaXMgc2FmZSB0bwotCSAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLgomIzQzOwkgKiBSZWNvbXB1dGUgdGhlIGRlc3RpbmF0aW9uIG5hbWUgdW5kZXIgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbQomIzQzOwkgKiBub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGRpc2FibGVkLCBjbG9zaW5nIHJhY2VzIHdpdGggYSBjb25jdXJyZW50CiYjNDM7CSAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnMKJiM0MzsJICogbGV2ZWwuCiAJICovCi0Jd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgbmV0KTsKJiM0MzsJZG93bl93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwlyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLCBzaXplb2YoYnVmKSwKJiM0MzsJCQkJICAgICAgICZhbXA7bmV3X25hbWUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAoZmFsbGJhY2tfcGF0dGVybikgewomIzQzOwkJCVdBUk4oMSwKJiM0MzsJCQkgICAgICYjMzQ7JXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgIF9fZnVuY19fLCByZXQpOwomIzQzOwkJCXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NvcmVkZXYucmRtYV9uZXQsIG5ldCk7CiYjNDM7CQkJaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpOwomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIHJlbmFtZV9kb25lOwomIzQzOwl9CiAKLQlkb3duX3JlYWQoJmFtcDtkZXZpY2VzX3J3c2VtKTsKLQkvKgotCSAqIEN1cnJlbnRseSByZG1hIGRldmljZXMgYXJlIHN5c3RlbSB3aWRlIHVuaXF1ZS4gU28gdGhlIGRldmljZSBuYW1lCi0JICogaXMgZ3VhcmFudGVlZCBmcmVlIGluIHRoZSBuZXcgbmFtZXNwYWNlLiBQdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlCi0JICogYXQgdGhlIHN5c2ZzIGxldmVsLgotCSAqLwotCXJldCA9IGRldmljZV9yZW5hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiwgZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldikpOwotCXVwX3JlYWQoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgbmV0KTsKJiM0MzsJaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpOwomIzQzOwlyZXQgPSBkZXZpY2VfcmVuYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYsIG5ld19uYW1lKTsKIAlpZiAocmV0KSB7Ci0JCWRldl93YXJuKCZhbXA7ZGV2aWNlLSZndDtkZXYsCi0JCQkgJiMzNDslczogQ291bGRuJiMzOTt0IHJlbmFtZSBkZXZpY2UgYWZ0ZXIgbmFtZXNwYWNlIGNoYW5nZVxuJiMzNDssCi0JCQkgX19mdW5jX18pOwotCQkvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi8KLQkJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgY3VyX25ldCk7CiYjNDM7CQlpZiAoZmFsbGJhY2tfcGF0dGVybikgewomIzQzOwkJCVdBUk4oMSwKJiM0MzsJCQkgICAgICYjMzQ7JXM6IGZhaWxlZCB0byByZW5hbWUgZGV2aWNlIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgIF9fZnVuY19fLCByZXQpOwomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWRldl93YXJuKCZhbXA7ZGV2aWNlLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXG4mIzM0OywKJiM0MzsJCQkJIF9fZnVuY19fKTsKJiM0MzsJCQkvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi8KJiM0MzsJCQl3cml0ZV9wbmV0KCZhbXA7ZGV2aWNlLSZndDtjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTsKJiM0MzsJCQlpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIGN1cl9uZXQpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Ryc2NweShkZXZpY2UtJmd0O25hbWUsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpLAomIzQzOwkJCUlCX0RFVklDRV9OQU1FX01BWCk7CiAJfQomIzQzO3JlbmFtZV9kb25lOgomIzQzOwl1cF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwogCiAJcmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpOwogCWlmIChyZXQyKSB7CkBAIC0xNzQwLDM2ICYjNDM7MTg5MCw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCiB9CiAKIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKQomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgcmV0OwogCiAJbmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7CiAJaWYgKElTX0VSUihuZXQpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0IG5hbWVzcGFjZSBmZCYjMzQ7KTsKIAkJcmV0ID0gUFRSX0VSUihuZXQpOwogCQlnb3RvIG5ldF9lcnI7CiAJfQogCiAJaWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZSYjMzQ7KTsKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIG5zX2VycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhCiYjNDM7CSAqIHN1cHBsaWVkIG5hbWUgc3RpbGwgcmVuYW1lcyBpdCBpbiBwbGFjZS4KJiM0MzsJICovCiYjNDM7CWlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoJmFtcDtkZXYtJmd0O2NvcmVkZXYucmRtYV9uZXQpKSkgewomIzQzOwkJcmV0ID0gbmFtZSA/IGliX2RldmljZV9yZW5hbWUoZGV2LCBuYW1lKSA6IDA7CiYjNDM7CiYjNDM7CQlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtVbmFibGUgdG8gdXNlIHJlcXVlc3RlZCBkZXZpY2UgbmFtZSBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQlnb3RvIG5zX2VycjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogQWxsIHRoZSBpYl9jbGllbnRzLCBpbmNsdWRpbmcgdXZlcmJzLCBhcmUgcmVzZXQgd2hlbiB0aGUgbmFtZXNwYWNlIGlzCiAJICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG8KIAkgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS4KIAkgKi8KLQlpZiAoIWRldi0mZ3Q7b3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykgewomIzQzOwlpZiAoaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGUmIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gbnNfZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlIGNoYW5nZXMgKG5vIGRpc2Fzc29jaWF0ZSBzdXBwb3J0KSYjMzQ7KTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gbnNfZXJyOwogCX0KIAogCWdldF9kZXZpY2UoJmFtcDtkZXYtJmd0O2Rldik7CiAJaWJfZGV2aWNlX3B1dChkZXYpOwotCXJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9ucywgbmV0KTsKJiM0MzsJcmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC0mZ3Q7bnNwcm94eS0mZ3Q7bmV0X25zLCBuZXQsIG5hbWUsCiYjNDM7CQkJCSAgICBOVUxMKTsKIAlwdXRfZGV2aWNlKCZhbXA7ZGV2LSZndDtkZXYpOwomIzQzOwlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwogCiAJcHV0X25ldChuZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwppbmRleCBmNTk5YzI0YjM0ZTgxYi4uNDczYmY5NjY3ZjgzZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwpAQCAtMTE3Nyw2ICYjNDM7MTE3NywyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7CiYjNDM7CQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwomIzQzOwkJdTMyIG5zX2ZkOwomIzQzOwomIzQzOwkJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHsKJiM0MzsJCQlubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLAomIzQzOwkJCQkgICAgSUJfREVWSUNFX05BTUVfTUFYKTsKJiM0MzsJCQlpZiAoc3RybGVuKG5hbWUpID09IDApIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBkb25lOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCW5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTsKJiM0MzsJCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCwKJiM0MzsJCQkJCSAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTsKJiM0MzsJCWdvdG8gcHV0X2RvbmU7CiYjNDM7CX0KJiM0MzsKIAlpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkgewogCQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwogCkBAIC0xMTkwLDE0ICYjNDM7MTIwOCw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7Ci0JCXUzMiBuc19mZDsKLQotCQluc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7Ci0JCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7Ci0JCWdvdG8gcHV0X2RvbmU7Ci0JfQotCiAJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkgewogCQl1OCB1c2VfZGltOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwppbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwpAQCAtNzAwLDYgJiM0Mzs3MDAsMTIgQEAgaW50IGliX21hZF9hZ2VudF9zZWN1cml0eV9zZXR1cChzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCwKIAlpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbAomIzQzOwkgKiBwb2xpY3kuIElmIGRldmljZXMgaW4gZGlmZmVyZW50IG5ldCBuYW1lc3BhY2VzIHNoYXJlIGEgbmFtZSwgdGhleSBnZXQKJiM0MzsJICogdGhlIHNhbWUgbGFiZWw7IGRpc3Rpbmd1aXNoaW5nIHRoZW0gd291bGQgbmVlZCBuZXQgbmFtZXNwYWNlIHN1cHBvcnQKJiM0MzsJICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy4KJiM0MzsJICovCiAJc3Bpbl9sb2NrKCZhbXA7bWFkX2FnZW50X2xpc3RfbG9jayk7CiAJcmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LSZndDtzZWN1cml0eSwKIAkJCQkJCWRldl9uYW1lKCZhbXA7YWdlbnQtJmd0O2RldmljZS0mZ3Q7ZGV2KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCmluZGV4IDFlYzEzMGZlZThlYTdhLi42ZWIxMGQyZjA2NTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCkBAIC0yNDAsNiAmIzQzOzI0MCwxMCBAQCBzdGF0aWMgdm9pZCByeGVfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpCiAJCXJ4ZV9lcnJfdWModWMsICYjMzQ7Y2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXG4mIzM0OywgZXJyKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiAvKiBwZCAqLwogc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewpAQCAtMTQ3OCw2ICYjNDM7MTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHsKIAkuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsCiAJLmRldGFjaF9tY2FzdCA9IHJ4ZV9kZXRhY2hfbWNhc3QsCiAJLmRldmljZV9ncm91cCA9ICZhbXA7cnhlX2F0dHJfZ3JvdXAsCiYjNDM7CS5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LAogCS5lbmFibGVfZHJpdmVyID0gcnhlX2VuYWJsZV9kcml2ZXIsCiAJLmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tciwKIAkuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggYWNiZDc4N2RlMjY1YjUuLmEwNzBmY2Y4NmU4YTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMzE4OSwxMCAmIzQzOzMxODksMjQgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdOwogCiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7CiAKJiM0MzsvKgomIzQzOyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYgomIzQzOyAqIGRldmljZSYjMzk7cyBuZXQgbmFtZXNwYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LSZndDtzcnBfZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gbmV0ID8gdG9fbnNfY29tbW9uKG5ldCkgOiBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0gewogCS5uYW1lICAgID0gJiMzNDtpbmZpbmliYW5kX3NycCYjMzQ7LAogCS5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3VwcywKLQkuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXYKJiM0MzsJLmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LAomIzQzOwkubnNfdHlwZSA9ICZhbXA7bmV0X25zX3R5cGVfb3BlcmF0aW9ucywKJiM0MzsJLm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjcxMTcwY2IwZTE5ZTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNkZWZpbmUgX0NHUk9VUF9SRE1BX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nncm91cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0X25hbWVzcGFjZS5oJmd0OwogCiBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHsKIAlSRE1BQ0dfUkVTT1VSQ0VfSENBX0hBTkRMRSwKQEAgLTM0LDYgJiM0MzszNSwxNSBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJwb29sczsKIAljaGFyCQkJKm5hbWU7CiYjNDM7CS8qCiYjNDM7CSAqIE5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBiZWxvbmdzIHRvLiBAbmV0bnNfc2hhcmVkIG1pcnJvcnMKJiM0MzsJICogaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM6IHdoZW4gdHJ1ZSB0aGUgZGV2aWNlIGlzIHZpc2libGUgZnJvbSBldmVyeQomIzQzOwkgKiBuZXQgbmFtZXNwYWNlIChzaGFyZWQgbW9kZSk7IG90aGVyd2lzZSBAbmV0IGlzIHRoZSBvbmx5IG5hbWVzcGFjZQomIzQzOwkgKiB0aGF0IG1heSBzZWUgYW5kIGNvbmZpZ3VyZSBpdC4gQG5ldG5zX3NoYXJlZCBpcyB1cGRhdGVkIHdoZW4gdGhlCiYjNDM7CSAqIHNoYXJpbmcgbW9kZSBjaGFuZ2VzLCBzbyB1c2Uge1JFQUQsV1JJVEV9X09OQ0UoKSB0byBhY2Nlc3MgaXQuCiYjNDM7CSAqLwomIzQzOwlwb3NzaWJsZV9uZXRfdAkJbmV0OwomIzQzOwlib29sCQkJbmV0bnNfc2hhcmVkOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmgKaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaApAQCAtNTE2LDcgJiM0Mzs1MTYsMTAgQEAgZW51bSByZG1hX25sZGV2X2F0dHIgewogCVJETUFfTkxERVZfQVRUUl9ERVZfUFJPVE9DT0wsCQkvKiBzdHJpbmcgKi8KIAogCS8qCi0JICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QKJiM0MzsJICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QuIE1heSBiZSBjb21iaW5lZAomIzQzOwkgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZQomIzQzOwkgKiB0aGUgZGV2aWNlIGluIHRoZSBkZXN0aW5hdGlvbiBuYW1lc3BhY2U7IHRoZSBtb3ZlIGZhaWxzIHdpdGggLUVFWElTVAomIzQzOwkgKiBpZiB0aGF0IG5hbWUgaXMgYWxyZWFkeSB0YWtlbiB0aGVyZS4KIAkgKi8KIAlSRE1BX05MREVWX05FVF9OU19GRCwJCQkvKiB1MzIgKi8KIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9yZG1hLmMgYi9rZXJuZWwvY2dyb3VwL3JkbWEuYwppbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCkBAIC0xNSw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nncm91cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhcnNlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nncm91cF9yZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25zcHJveHkuaCZndDsKIAogI2RlZmluZSBSRE1BQ0dfTUFYX1NUUiAmIzM0O21heCYjMzQ7CiAKQEAgLTQ2NCw2ICYjNDM7NDY1LDEzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpCiB9CiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7CiAKJiM0MzsvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovCiYjNDM7c3RhdGljIGJvb2wgcmRtYWNnX2RldmljZV92aXNpYmxlKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKGRldmljZS0mZ3Q7bmV0bnNfc2hhcmVkKSB8fAomIzQzOwkgICAgICAgbmV0X2VxKHJlYWRfcG5ldCgmYW1wO2RldmljZS0mZ3Q7bmV0KSwgY3VycmVudC0mZ3Q7bnNwcm94eS0mZ3Q7bmV0X25zKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7CkBAIC00NzEsNyAmIzQzOzQ3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkbWFjZ19tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpCi0JCWlmICghc3RyY21wKG5hbWUsIGRldmljZS0mZ3Q7bmFtZSkpCiYjNDM7CQlpZiAocmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLSZndDtuYW1lKSkKIAkJCXJldHVybiBkZXZpY2U7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTYyNiw2ICYjNDM7NjM1LDkgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KQogCW11dGV4X2xvY2soJmFtcDtyZG1hY2dfbXV0ZXgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsICZhbXA7cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7CiYjNDM7CQlpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzICYjMzQ7LCBkZXZpY2UtJmd0O25hbWUpOwogCiAJCXJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7CkBAIC02NDgsNiAmIzQzOzY2MCw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJbXV0ZXhfbG9jaygmYW1wO3JkbWFjZ19tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKJiM0MzsJCWlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7CiAKIAkJc2VxX3ByaW50ZihzZiwgJiMzNDslcyAmIzM0OywgZGV2aWNlLSZndDtuYW1lKTsKQEAgLTY3Nyw2ICYjNDM7NjkyLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIAltdXRleF9sb2NrKCZhbXA7cmRtYWNnX211dGV4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCAmYW1wO3JkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkgewomIzQzOwkJaWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJcnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTsKIAogCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzICYjMzQ7LCBkZXZpY2UtJmd0O25hbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcG5ldC5jIGIvbmV0L3NtYy9zbWNfcG5ldC5jCmluZGV4IDYzZTI4NmUyZGZhYThkLi5mZjljOWMzNWNjMmY1YiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3BuZXQuYwpAQCAtMzA0LDEzICYjNDM7MzA0LDE4IEBAIHN0YXRpYyBib29sIHNtY19wbmV0aWRfdmFsaWQoY29uc3QgY2hhciAqcG5ldF9uYW1lLCBjaGFyICpwbmV0aWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihjaGFyICppYl9uYW1lKQomIzQzOy8qCiYjNDM7ICogRmluZCBhbiBpbmZpbmliYW5kIGRldmljZSBieSBhIGdpdmVuIG5hbWUsIHJlc3RyaWN0ZWQgdG8gdGhlIGRldmljZXMKJiM0MzsgKiBhY2Nlc3NpYmxlIGZyb20gQG5ldC4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWJfbmFtZSkKIHsKIAlzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXY7CiAKIAltdXRleF9sb2NrKCZhbXA7c21jX2liX2RldmljZXMubXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWJkZXYsICZhbXA7c21jX2liX2RldmljZXMubGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoaWJkZXYtJmd0O2liZGV2LCBuZXQpKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cm5jbXAoaWJkZXYtJmd0O2liZGV2LSZndDtuYW1lLCBpYl9uYW1lLAogCQkJICAgICBzaXplb2YoaWJkZXYtJmd0O2liZGV2LSZndDtuYW1lKSkgfHwKIAkJICAgIChpYmRldi0mZ3Q7aWJkZXYtJmd0O2Rldi5wYXJlbnQgJmFtcDsmYW1wOwpAQCAtNDA4LDggJiM0Mzs0MTMsOCBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9ldGgoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSwKLQkJCSAgIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSkKJiM0MztzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJICAgY2hhciAqaWJfbmFtZSwgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKQogewogCXN0cnVjdCBzbWNfcG5ldGVudHJ5ICp0bXBfcGUsICpuZXdfcGU7CiAJc3RydWN0IHNtY19pYl9kZXZpY2UgKmliX2RldjsKQEAgLTQxOSw3ICYjNDM7NDI0LDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSwKIAlib29sIG5ld19pYmRldjsKIAogCS8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovCi0JaWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihpYl9uYW1lKTsKJiM0MzsJaWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihuZXQsIGliX25hbWUpOwogCWlmIChpYl9kZXYpIHsKIAkJaWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTsKIAkJaWYgKGliZGV2X2FwcGxpZWQpCkBAIC01MTgsNyAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZW50ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdKQogCQkJaWYgKGlicG9ydCAmbHQ7IDEgfHwgaWJwb3J0ICZndDsgU01DX01BWF9QT1JUUykKIAkJCQlnb3RvIGVycm9yOwogCQl9Ci0JCXJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7CiYjNDM7CQlyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7CiAJCWlmICghcmMpCiAJCQluZXdfaWJkZXYgPSB0cnVlOwogCQllbHNlIGlmIChyYyAhPSAtRUVYSVNUKQpAQCAtMTE3MCw2ICYjNDM7MTE3NSw5IEBAIGludCBzbWNfcG5ldGlkX2J5X3RhYmxlX2liKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJfcG9ydCkKIAlzdHJ1Y3Qgc21jX25ldCAqc247CiAJaW50IHJjID0gLUVOT0VOVDsKIAomIzQzOwlpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhzbWNpYmRldi0mZ3Q7aWJkZXYsICZhbXA7aW5pdF9uZXQpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJLyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi8KIAlzbiA9IG5ldF9nZW5lcmljKCZhbXA7aW5pdF9uZXQsIHNtY19uZXRfaWQpOwogCXBuZXR0YWJsZSA9ICZhbXA7c24tJmd0O3BuZXR0YWJsZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlCmluZGV4IDA3YWY3ZjE1YzFiZjc0Li5hOTFjMTRjNDUwMDZlMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlCkBAIC0zLDYgJiM0MzszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcCiAJCXJ4ZV9pcHY2LnNoIFwKIAkJcnhlX3NvY2tldF93aXRoX25ldG5zLnNoIFwKIAkJcnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXAotCQlyeGVfc2VudF9yY3ZkX2J5dGVzLnNoCiYjNDM7CQlyeGVfc2VudF9yY3ZkX2J5dGVzLnNoIFwKJiM0MzsJCXJ4ZV9uZXRuc19uYW1lcy5zaAogCiBpbmNsdWRlIC4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZwppbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnCkBAIC0xLDMgJiM0MzsxLDUgQEAKIENPTkZJR19UVU4KIENPTkZJR19WRVRICiYjNDM7Q09ORklHX0RVTU1ZCiYjNDM7Q09ORklHX05FVF9OUwogQ09ORklHX1JETUFfUlhFCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hN2U1NzcwNmZkZmY3NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoCkBAIC0wLDAgJiM0MzsxLDI4MiBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIEV4ZXJjaXNlIFJETUEgZGV2aWNlIG5hbWUgaGFuZGxpbmcgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy4KJiM0MzsKJiM0Mztzb3VyY2UgJiMzNDskKGRpcm5hbWUgJiMzNDskMCYjMzQ7KS8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoJiMzNDsKJiM0MzsKJiM0MztOQU1FX1BSRUZJWD0mIzM0O3J4ZV9uZXRuc19uYW1lc18kJCYjMzQ7CiYjNDM7TkVUREVWX1BSRUZJWD0mIzM0O3J4biQkJiMzNDsKJiM0MztOUzE9JiMzNDske05BTUVfUFJFRklYfW5zMSYjMzQ7CiYjNDM7TlMyPSYjMzQ7JHtOQU1FX1BSRUZJWH1uczImIzM0OwomIzQzO1JYRV9BPSYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfYSYjMzQ7CiYjNDM7UlhFX0I9JiMzNDske05BTUVfUFJFRklYfXJ4ZV9iJiMzNDsKJiM0MztSWEVfU0FNRT0mIzM0OyR7TkFNRV9QUkVGSVh9cnhlX3NhbWUmIzM0OwomIzQzO1JYRV9ORVc9JiMzNDske05BTUVfUFJFRklYfXJ4ZV9uZXcmIzM0OwomIzQzO0RVTU1ZX0E9JiMzNDske05FVERFVl9QUkVGSVh9YSYjMzQ7CiYjNDM7RFVNTVlfQj0mIzM0OyR7TkVUREVWX1BSRUZJWH1iJiMzNDsKJiM0MztPTERfTU9ERT0mIzM0OyYjMzQ7CiYjNDM7TU9ERV9DSEFOR0VEPTAKJiM0MztNT0RTPSgmIzM0O2R1bW15JiMzNDsgJiMzNDtyZG1hX3J4ZSYjMzQ7KQomIzQzO1RFU1RfU0FNRV9OQU1FUz0mIzM0O3NhbWUgUkRNQSBkZXZpY2UgbmFtZSBjYW4gZXhpc3QgaW4gdHdvIG5ldCBuYW1lc3BhY2VzJiMzNDsKJiM0MztURVNUX01PVkVfQ09ORkxJQ1Q9JiMzNDttb3ZlIHdpdGhvdXQgcmVuYW1lIGZhaWxzIG9uIGRlc3RpbmF0aW9uIG5hbWUgY29uZmxpY3QmIzM0OwomIzQzO1RFU1RfTU9WRV9SRU5BTUU9JiMzNDttb3ZlIHRoZW4gcmVuYW1lIHN1Y2NlZWRzJiMzNDsKJiM0MztURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FPSYjMzQ7bW92ZSB3aXRoIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBuYW1lIHN1Y2NlZWRzJiMzNDsKJiM0MztURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRT0mIzM0O3NhbWUtbmV0bnMgcmVuYW1lIHJlamVjdHMgZHVwbGljYXRlIG5hbWUmIzM0OwomIzQzO1RFU1RfVEVBUkRPV05fUkVUVVJOPSYjMzQ7bmV0bnMgZGVsZXRlIHJldHVybnMgZGV2aWNlIHRvIGluaXRfbmV0IGFuZCByZW5hbWVzIG9uIGNvbmZsaWN0JiMzNDsKJiM0MzsKJiM0Mztrc2Z0X3NraXAoKQomIzQzO3sKJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0OyQqJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztmYWlsKCkKJiM0Mzt7CiYjNDM7CWt0YXBfZXhpdF9mYWlsX21zZyAmIzM0OyQqJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7bmVlZF9jbWQoKQomIzQzO3sKJiM0MzsJY29tbWFuZCAtdiAmIzM0OyQxJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fCBrc2Z0X3NraXAgJiMzNDttaXNzaW5nIGNvbW1hbmQ6ICQxJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9ucygpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMQomIzQzOwomIzQzOwlzaGlmdAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgcmRtYSAmIzM0OyRAJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9kZXZfZXhpc3RzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSQxCiYjNDM7CWxvY2FsIGRldj0kMgomIzQzOwomIzQzOwlpZiBbIC1uICYjMzQ7JG5zJiMzNDsgXTsgdGhlbgomIzQzOwkJcmRtYV9ucyAmIzM0OyRucyYjMzQ7IGRldiBzaG93ICYjMzQ7JGRldiYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJZWxzZQomIzQzOwkJcmRtYSBkZXYgc2hvdyAmIzM0OyRkZXYmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO2FkZF9kdW1teSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuZXRkZXY9JDEKJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgJiMzNDskbmV0ZGV2JiMzNDsgdHlwZSBkdW1teSB8fCByZXR1cm4gMQomIzQzOwlpcCBsaW5rIHNldCAmIzM0OyRuZXRkZXYmIzM0OyB1cCB8fCByZXR1cm4gMQomIzQzO30KJiM0MzsKJiM0MzthZGRfcnhlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIGRldj0kMQomIzQzOwlsb2NhbCBuZXRkZXY9JDIKJiM0MzsKJiM0MzsJcmRtYSBsaW5rIGFkZCAmIzM0OyRkZXYmIzM0OyB0eXBlIHJ4ZSBuZXRkZXYgJiMzNDskbmV0ZGV2JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9kZXZfb25fbmV0ZGV2KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5ldGRldj0kMQomIzQzOwomIzQzOwlyZG1hIGxpbmsgc2hvdyAyJmd0Oy9kZXYvbnVsbCB8IGF3ayAtdiB3YW50PSYjMzQ7JG5ldGRldiYjMzQ7ICYjMzk7CiYjNDM7CQl7CiYjNDM7CQkJZm9yIChpID0gMTsgaSAmbHQ7IE5GOyBpJiM0MzsmIzQzOykKJiM0MzsJCQkJaWYgKCRpID09ICYjMzQ7bmV0ZGV2JiMzNDsgJmFtcDsmYW1wOyAkKGkgJiM0MzsgMSkgPT0gd2FudCkgewomIzQzOwkJCQkJZGV2ID0gJDIKJiM0MzsJCQkJCXN1YigvXC8uKi8sICYjMzQ7JiMzNDssIGRldikKJiM0MzsJCQkJCXByaW50IGRldgomIzQzOwkJCQkJZXhpdAomIzQzOwkJCQl9CiYjNDM7CQl9JiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7d2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmV0ZGV2PSQxCiYjNDM7CWxvY2FsIGRldgomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJZGV2PSQocmRtYV9kZXZfb25fbmV0ZGV2ICYjMzQ7JG5ldGRldiYjMzQ7KQomIzQzOwkJaWYgWyAtbiAmIzM0OyRkZXYmIzM0OyBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0OyRkZXYmIzM0OwomIzQzOwkJCXJldHVybiAwCiYjNDM7CQlmaQomIzQzOwkJc2xlZXAgMC4xCiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJcmV0dXJuIDEKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfZGV2cygpCiYjNDM7ewomIzQzOwljbGVhbnVwX2RldnMKJiM0MzsKJiM0MzsJYWRkX2R1bW15ICYjMzQ7JERVTU1ZX0EmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlhZGRfZHVtbXkgJiMzNDskRFVNTVlfQiYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWFkZF9yeGUgJiMzNDskUlhFX0EmIzM0OyAmIzM0OyREVU1NWV9BJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJYWRkX3J4ZSAmIzM0OyRSWEVfQiYjMzQ7ICYjMzQ7JERVTU1ZX0ImIzM0OyB8fCByZXR1cm4gMQomIzQzO30KJiM0MzsKJiM0MztjbGVhbnVwX2RldnMoKQomIzQzO3sKJiM0MzsJaXAgbGluayBkZWwgJiMzNDskRFVNTVlfQSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIGxpbmsgZGVsICYjMzQ7JERVTU1ZX0ImIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0MztzZXR1cCgpCiYjNDM7ewomIzQzOwlPTERfTU9ERT0kKHJkbWEgc3lzdGVtIHNob3cgMiZndDsvZGV2L251bGwgfAomIzQzOwkJICAgc2VkIC1uICYjMzk7cy8uKm5ldG5zIFwoW14gXSpcKS4qL1wxL3AmIzM5OykKJiM0MzsJWyAtbiAmIzM0OyRPTERfTU9ERSYjMzQ7IF0gfHwga3NmdF9za2lwICYjMzQ7ZmFpbGVkIHRvIHJlYWQgUkRNQSBuZXRucyBtb2RlJiMzNDsKJiM0MzsKJiM0MzsJcmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8CiYjNDM7CQlrc2Z0X3NraXAgJiMzNDtyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQmIzM0OwomIzQzOwlNT0RFX0NIQU5HRUQ9MQomIzQzOwomIzQzOwlpcCBuZXRucyBhZGQgJiMzNDskTlMxJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgYWRkICYjMzQ7JE5TMiYjMzQ7IHx8IHJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJY2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyROUzEmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskTlMyJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsJaWYgWyAmIzM0OyRNT0RFX0NIQU5HRUQmIzM0OyAtZXEgMSBdOyB0aGVuCiYjNDM7CQlyZG1hIHN5c3RlbSBzZXQgbmV0bnMgJiMzNDskT0xEX01PREUmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlmaQomIzQzOwomIzQzOwlmb3IgbSBpbiAmIzM0OyR7TU9EU1tAXX0mIzM0OzsgZG8KJiM0MzsJCW1vZHByb2JlIC1yICYjMzQ7JG0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO3JkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWUoKQomIzQzO3sKJiM0MzsJcmRtYSBkZXYgaGVscCAyJmd0OyZhbXA7MSB8IGdyZXAgLUVxICYjMzk7bmV0bnMgLipuYW1lfG5hbWUgLipuZXRucyYjMzk7CiYjNDM7fQomIzQzOwomIzQzO1sgJiMzNDskKGlkIC11KSYjMzQ7IC1lcSAwIF0gfHwga3NmdF9za2lwICYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7CiYjNDM7bmVlZF9jbWQgaXAKJiM0MztuZWVkX2NtZCByZG1hCiYjNDM7bmVlZF9jbWQgbW9kcHJvYmUKJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2ZvciBtIGluICYjMzQ7JHtNT0RTW0BdfSYjMzQ7OyBkbwomIzQzOwltb2RpbmZvICYjMzQ7JG0mIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8IGtzZnRfc2tpcCAmIzM0O21vZHVsZSAkbSBub3QgZm91bmQmIzM0OwomIzQzOwltb2Rwcm9iZSAmIzM0OyRtJiMzNDsgfHwgZmFpbCAmIzM0O2ZhaWxlZCB0byBsb2FkICRtJiMzNDsKJiM0Mztkb25lCiYjNDM7CiYjNDM7c2V0dXAgfHwgZmFpbCAmIzM0O2ZhaWxlZCB0byBjcmVhdGUgbmV0IG5hbWVzcGFjZXMmIzM0OwomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7a3RhcF9zZXRfcGxhbiA3CiYjNDM7CiYjNDM7aWYgc2V0dXBfZGV2cyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmV0bnMgJiMzNDskTlMxJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgIHJkbWFfbnMgJiMzNDskTlMxJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5hbWUgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgIHJkbWFfbnMgJiMzNDskTlMyJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5hbWUgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMSYjMzQ7ICYjMzQ7JFJYRV9TQU1FJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfU0FNRV9OQU1FUyYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkFNRVMmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISBzZXR1cF9kZXZzIHx8CiYjNDM7ICAgISByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuZXRucyAmIzM0OyROUzEmIzM0OyB8fAomIzQzOyAgICEgcmRtYV9ucyAmIzM0OyROUzEmIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7IHx8CiYjNDM7ICAgISByZG1hIGRldiBzZXQgJiMzNDskUlhFX0ImIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyB8fAomIzQzOyAgICEgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVCYjMzQ7CiYjNDM7ZWxpZiByZG1hX25zICYjMzQ7JE5TMSYjMzQ7IGRldiBzZXQgJiMzNDskUlhFX1NBTUUmIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVCYjMzQ7CiYjNDM7ZWxpZiByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMxJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgICByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMyJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OzsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1QmIzM0OwomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUJiMzNDsKJiM0MztmaQomIzQzO2NsZWFudXBfZGV2cwomIzQzOwomIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX01PVkVfUkVOQU1FJiMzNDsKJiM0MztlbGlmIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICAgIHJkbWFfbnMgJiMzNDskTlMyJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5hbWUgJiMzNDskUlhFX05FVyYjMzQ7OyB0aGVuCiYjNDM7CWlmIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfTkVXJiMzNDsgJmFtcDsmYW1wOwomIzQzOwkgICAhIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyYjMzQ7ICYjMzQ7JFJYRV9BJiMzNDs7IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX01PVkVfUkVOQU1FJiMzNDsKJiM0MzsJZmkKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISByZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9za2lwICYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2VsaWYgISBzZXR1cF9kZXZzOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2VsaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJaWYgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMiYjMzQ7ICYjMzQ7JFJYRV9ORVcmIzM0OyAmYW1wOyZhbXA7CiYjNDM7CSAgICEgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JiMzNDsgJiMzNDskUlhFX0EmIzM0OzsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUUmIzM0OwomIzQzOwlmaQomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzO2VsaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICAgIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5hbWUgJiMzNDskUlhFX05FVyYjMzQ7OyB0aGVuCiYjNDM7CWlmIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5hbWUgJiMzNDskUlhFX05FVyYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzE7IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FJiMzNDsKJiM0MzsJZWxpZiByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsJICAgICByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJCWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzOwlmaQomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfVEVBUkRPV05fUkVUVVJOJiMzNDsKJiM0MztlbGlmICEgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7IHx8CiYjNDM7ICAgICAhIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7IHx8CiYjNDM7ICAgICAhIHJkbWFfbnMgJiMzNDskTlMyJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5hbWUgJiMzNDskUlhFX1NBTUUmIzM0OyB8fAomIzQzOyAgICAgISByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMyJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OzsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTiYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskTlMyJiMzNDsKJiM0MzsJcmV0dXJuZWQ9JCh3YWl0X3JkbWFfZGV2X29uX25ldGRldiAmIzM0OyREVU1NWV9CJiMzNDspCiYjNDM7CWt0YXBfcHJpbnRfbXNnICYjMzQ7ZGV2aWNlIHJldHVybmVkIHRvIGluaXRfbmV0IGFzICYjMzk7JHtyZXR1cm5lZDotJmx0O21pc3NpbmcmZ3Q7fSYjMzk7JiMzNDsKJiM0MzsJaWYgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7CSAgIFsgLW4gJiMzNDskcmV0dXJuZWQmIzM0OyBdICZhbXA7JmFtcDsKJiM0MzsJICAgWyAmIzM0OyRyZXR1cm5lZCYjMzQ7ICE9ICYjMzQ7JFJYRV9TQU1FJiMzNDsgXSAmYW1wOyZhbXA7CiYjNDM7CSAgIFsgJiMzNDske3JldHVybmVkI2liZGV2fSYjMzQ7ICE9ICYjMzQ7JHJldHVybmVkJiMzNDsgXTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk4mIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTiYjMzQ7CiYjNDM7CWZpCiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztrdGFwX2ZpbmlzaGVkCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgQ29yZSBhbmQgQ2dyb3VwIFN1YnN5c3RlbSBDaGFuZ2VzOiBSZWFjaGFiaWxpdHkgYW5kIEZ1enphYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBSRE1BIGNvcmUgYW5kIGl0cyBjZ3JvdXAgaW50ZWdyYXRpb24uIEl0JiMzOTtzIHRvdWNoaW5nIGEgbG90IG9mIGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IHRoZSBkZXZpY2UgbmFtaW5nIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSBoYW5kbGluZyB3aXRoaW4gdGhlIFJETUEgc3Vic3lzdGVtLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9ucyBsaWtlIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBhbmQgdGhlIGBhbGxvY19uYW1lYCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBhbHRlcmF0aW9ucyB0byBgY2dyb3VwX3JkbWEuaGAgYW5kIGBjZ3JvdXAvcmRtYS5jYCBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIFJETUEgY2dyb3VwcyBuZXR3b3JrIG5hbWVzcGFjZS1hd2FyZSwgd2hpY2ggaXMgYSBiaWcgZGVhbCBmb3IgaXNvbGF0aW9uLgoKSSBhbHNvIHNlZSB0aGF0IGl0JiMzOTtzIHJlc3RyaWN0aW5nIGBzbWNfcG5ldF9maW5kX2liYCB0byBvbmx5IHNlZSBkZXZpY2VzIGF2YWlsYWJsZSBpbiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCBjaGFuZ2VzIHRvIGBzbWNfcG5ldC5jYC4gIFRoZXJlIGFyZSBhZGRpdGlvbnMgb2YgYHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHRgIGluIGByeGVfdmVyYnMuY2AsIGFuZCBhIG5ldyBgc3JwX25ldF9uYW1lc3BhY2VgIHZhcmlhYmxlIGlzIGFkZGVkIHRvIGBpYl9zcnAuY2AuIFBsdXMgaXQmIzM5O3MgbW9kaWZ5aW5nIGBubGRldi5jYCB0byBhbGxvdyBwYXNzaW5nIGEgZGV2aWNlIG5hbWUgd2hlbiBjaGFuZ2luZyBuZXRucy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSG93IHJlYWNoYWJsZSBhbmQgZnV6emFibGUgaXMgdGhpcyBjb2RlPyYjMzQ7IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBoaXQgdGhpcyBjb2RlIHBhdGggYW5kIHZlcmlmeSBpdHMgYmVoYXZpb3Igd2l0aCByZWFzb25hYmxlIGNvbmZpZGVuY2UuIFRoZSBtYWluIGZpbGVzIG9mIGludGVyZXN0IGFyZSBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNgLCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY2AsIGFuZCBga2VybmVsL2Nncm91cC9yZG1hLmNgLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gZGlyZWN0bHkgbW9kaWZpZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyDigJMgYWRkaW5nIG5ldG5zIHN1cHBvcnQsIHBvdGVudGlhbGx5IHJlbmFtaW5nIGRldmljZXMgcGVyIG5ldG5zIOKAkyB0aGlzIHNtZWxscyBsaWtlIGEgcG90ZW50aWFsIGF2ZW51ZSBmb3IgZnV6emluZywgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFJETUEgaXMgZGVmaW5pdGVseSBmdXp6YWJsZSBnaXZlbiBzeXprYWxsZXIgY292ZXJhZ2UsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgd2hpY2ggYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgY29kZSBwYXRocyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19DR1JPVVBfUkRNQWAgYW5kIGBDT05GSUdfSU5GSU5JQkFORGAuIEFuZCBJIGtub3cgYENPTkZJR19SRE1BX1JYRWAgaXMgdXNlZCBpbiB0aGUgc2VsZnRlc3QuIFRoZSBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JTkZJTklCQU5EYCBpcyBlbmFibGVkLiBga2VybmVsL2Nncm91cC9yZG1hLmNgIGlzIGVuYWJsZWQgYnkgYENPTkZJR19DR1JPVVBfUkRNQWAsIGFuZCBgbmV0L3NtYy9zbWNfcG5ldC5jYCBieSBgQ09ORklHX1NNQ2AuIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jYCByZXF1aXJlcyBgQ09ORklHX1JETUFfUlhFYCB0byBiZSBlbmFibGVkLCBhbmQgYGRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jYCByZWxpZXMgb24gYENPTkZJR19JTkZJTklCQU5EX1NSUGAuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgcGF0aHMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19DR1JPVVBfUkRNQVxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9jZ3JvdXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9jZ3JvdXAvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfQ0dST1VQX1BJRFMpICYjNDM7PSBwaWRzLm9cbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQ0dST1VQX1JETUEpICYjNDM7PSByZG1hLm9cbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfQ1BVU0VUUykgJiM0Mzs9IGNwdXNldC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJbmZpbmliYW5kIENvcmUgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBjb3JlIG1vZHVsZSBpcyBidWlsdCwgYW5kIGZyYW5rbHksIEkgZXhwZWN0IHRoaXMgTWFrZWZpbGUgdG8gYmUgdGhlIGhlYXJ0IG9mIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHN0dWZmOiBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGluY2x1ZGUgcGF0aHMsIG1heWJlIHNvbWUgYXJjaC1zcGVjaWZpYyBkZWZpbml0aW9ucyBpZiB3ZSYjMzk7cmUgbHVja3ksIGFuZCBvZiBjb3Vyc2UsIHRoZSBsaW5rZXIgZmxhZ3MuIE15IGd1dCBzYXlzIHRoaXMgd2lsbCBsaWtlbHkgYmUgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBNYWtlZmlsZTsgaXQmIzM5O3MgdGhlIGNvcmUsIHNvIGl0IHNob3VsZCBiZSB3ZWxsLW9yZ2FuaXplZCBhbmQgbW9kdWxhciwgcmlnaHQ/IExldCYjMzk7cyBzZWUgaWYgdGhlIGJ1aWxkIHByb2Nlc3MgdXRpbGl6ZXMgdGhlIHN0YW5kYXJkIGtlcm5lbCBidWlsZCBzeXN0ZW0gdmFyaWFibGVzIGFuZCBjb252ZW50aW9ucy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mIG9yIGlzIGl0IGEgZmFpcmx5IGdlbmVyaWMgYnVpbGQgZm9yIG5vdz8gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19JTkZJTklCQU5EXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlPTM9dXNlcl9hY2Nlc3MtJChDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TKVx0Oj0gcmRtYV91Y20ub1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUtNC1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0lORklOSUJBTkQpICYjNDM7PVx0XHRpYl9jb3JlLm8gaWJfY20ubyBpd19jbS5vIFxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZS02LVx0XHRcdFx0XHQkKGluZmluaWJhbmQteSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBSWEUgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUlhFIChSZWxpYWJsZSBlWHByZXNzIEV0aGVybmV0KSBkcml2ZXImIzM5O3MgYnVpbGQgcHJvY2VzcyBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgSW5maW5pYmFuZCBzdWJzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgZm9yIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBvYmplY3QgZmlsZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBydWxlcy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLW9yZ2FuaXplZCBhbmQgZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgb3Zlcmx5IGNvbnZvbHV0ZWQgb3Igb2JzY3VyZSBtYWtlZmlsZSB0cmlja3MuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhleSYjMzk7cmUgdXNpbmcgYW55IHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyBvciB0b29scyBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGV5IGhhbmRsZSB0aGluZ3MgbGlrZSBoZWFkZXIgaW5jbHVzaW9uLCBtb2R1bGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCBhbnkgc3BlY2lhbCBvcHRpb25zIG9yIGxpYnJhcmllcyB0aGV5JiMzOTtyZSBsaW5raW5nIGFnYWluc3QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19SRE1BX1JYRVxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1JETUFfUlhFKSAmIzQzOz0gcmRtYV9yeGUub1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZS0zLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjI0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBkZXNjcmliZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTUlAgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBgZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgU1JQIChTQ1NJIFJETUEgUHJvdG9jb2wpIGRyaXZlciB3aXRoaW4gdGhlIEluZmluaWJhbmQgc3RhY2sgd2lsbCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyB0aGlzIHNwZWNpZmljIFVMUCAoVXBwZXIgTGF5ZXIgUHJvdG9jb2wpIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlcyBhcmUgY29tcGlsZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzIG9uIG90aGVyIEluZmluaWJhbmQgY29tcG9uZW50cywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY3VzdG9tIGJ1aWxkIGZsYWdzIG9yIGxpbmtlciBkaXJlY3RpdmVzIHNwZWNpZmljIHRvIFNSUC4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBwb3RlbnRpYWwgaXNzdWVzLCBmb3IgbWFraW5nIGN1c3RvbWl6YXRpb25zLCBhbmQgZm9yIHZlcmlmeWluZyBob3cgdGhpcyBtb2R1bGUgaXMgYnVpbHQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgSUIgc3RhY2suIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgaW5jbHVkZXMgb2Ygb3RoZXIgcmVsZXZhbnQgaGVhZGVycyB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5IG9yIGZyb20gaGlnaGVyIGluIHRoZSBJQiBzdHJ1Y3R1cmUsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xm9iai1cXCRcXChDT05GSUdfSU5GSU5JQkFORF9TUlBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2J1aWxkLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2J1aWxkOjI6b2JqLSQoQ09ORklHX0lORklOSUJBTkRfU1JQKVx0XHRcdCYjNDM7PSBpYl9zcnAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayYjMzk7cyBoYW5kbGluZyBvZiBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbiksIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpbnZlc3RpZ2F0aW5nIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gU01DIGZ1bmN0aW9uYWxpdHkuIEJ5IGV4YW1pbmluZyB0aGlzIE1ha2VmaWxlLCBJIGNhbiBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTTUMgbW9kdWxlcyBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgb3IgcmVsZXZhbnQgbmV0d29yayBjb21wb25lbnRzLiBJdCYjMzk7bGwgcmV2ZWFsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncywgcG90ZW50aWFsIHRhcmdldC1zcGVjaWZpYyBzZXR0aW5ncywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFueSBhcmVhcyB3aGVyZSB0aGVyZSBtaWdodCBiZSBtaXNjb25maWd1cmF0aW9ucyBvciBvdmVybG9va2VkIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBjYXVzaW5nIGlzc3VlcyB3aXRoIHRoZSBTTUMgaW1wbGVtZW50YXRpb24uIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBhIGZhc3QgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19TTUNcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL01ha2VmaWxlPTI9Y2NmbGFncy15ICYjNDM7PSAtSSQoc3JjKVxubmV0L3NtYy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19TTUMpXHQmIzQzOz0gc21jLm9cbm5ldC9zbWMvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfU01DX0RJQUcpXHQmIzQzOz0gc21jX2RpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwMwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBudW1iZXIgb2Yga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgbmFtZXNwYWNlcyBhbmQgUkRNQS4gSSBzZWUgaXQmIzM5O3MgbW9kaWZ5aW5nIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYW5kIGBzcnBfbmV0X25hbWVzcGFjZWAuIFJpZ2h0IGF3YXksIHRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgUkRNQSBkZXZpY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiBkaWZmZXJlbnQgbmV0d29yayBjb250ZXh0cy4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHRoZSBpbXBhY3Qgb24gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4KCk15IGltbWVkaWF0ZSBmb2N1cywgYmFzZWQgb24gdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGlzIGhvdyB0aGUgZGV2aWNlIGlzIG1vdmVkIGJldHdlZW4gbmFtZXNwYWNlcywgaG93IGl0IHBpY2tzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSBuYW1lLCBhbmQgaG93IGl0cyB2aXNpYmlsaXR5IGlzIGRldGVybWluZWQgd2l0aGluIHRoZSBSRE1BIGVjb3N5c3RlbS4gSSB3aWxsIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYW5kIGBzcnBfbmV0X25hbWVzcGFjZWAuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBkZXZpY2UgbWFuYWdlbWVudCBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgYG5sZGV2X3NldF9kb2l0YCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdGhlIGFjY3VyYXRlIG5hbWUuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQgaXMgbm90IGEgdHlwbyBvciBwbGFjZWhvbGRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxkZXZfc2V0X2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTExMj1zdGF0aWMgaW50IG5sZGV2X2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTE2MS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTE2MjpzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMTYzLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9Mjk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJkbWFfbmxfY2JzIG5sZGV2X2NiX3RhYmxlW1JETUFfTkxERVZfTlVNX09QU10gPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yOTc4LVx0W1JETUFfTkxERVZfQ01EX1NFVF0gPSB7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI5Nzk6XHRcdC5kb2l0ID0gbmxkZXZfc2V0X2RvaXQsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI5ODAtXHRcdC5mbGFncyA9IFJETUFfTkxfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqVmVyaWZ5aW5nIHRoZSBTZXR1cCoqCgpBbHJpZ2h0LCB0aGF0IGluaXRpYWwgYXNzZXNzbWVudCBvZiBgbmxkZXZfc2V0X2RvaXRgIGlzIHNwb3Qgb24sIHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGdvb2QgdG8gZ28gdGhlcmUuIE5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb24gYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAuIFdhbnQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYWxpZ25lZCBhbmQgd2UgZGlkbiYjMzk7dCBtaXNzIGFueXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBpbml0aWFsIHNldHVwLiBJIGFsd2F5cyBsaWtlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBiYXNlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvY2dyb3VwL3JkbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvY2dyb3VwL3JkbWEuYz00NjY9RVhQT1JUX1NZTUJPTChyZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2UpO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ2OC0vKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo0Njk6c3RhdGljIGJvb2wgcmRtYWNnX2RldmljZV92aXNpYmxlKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00NzAte1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTQ3NT1zdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ4MS1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo0ODI6XHRcdGlmIChyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ4My1cdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTYyOT1zdGF0aWMgaW50IHJkbWFjZ19yZXNvdXJjZV9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtNjM3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xua2VybmVsL2Nncm91cC9yZG1hLmM6NjM4Olx0XHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxua2VybmVsL2Nncm91cC9yZG1hLmMtNjM5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTY1Mz1zdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTY2Mi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjY2MzpcdFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTY2NC1cdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz02ODU9c3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo2OTU6XHRcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTYtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDIyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IHRoaW5raW5nIHJpZ2h0IG5vdyBpcyBjZW50ZXJlZCBvbiB0aGlzIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgIGZ1bmN0aW9uLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGluY2x1ZGluZyBpdCBzZWVtcyBzYWZlIGVub3VnaC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciB3aGV0aGVyIHRvIGJyaW5nIGluIGByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRgLCBgcmRtYWNnX3Jlc291cmNlX3JlYWRgLCBgcmRtYWNnX2V2ZW50c19zaG93YCwgYW5kIGByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3dgLiBXYWl0LCBvbiBzZWNvbmQgdGhvdWdodCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAgc2hvdWxkIGJlIHBlcmZlY3RseSBhZGVxdWF0ZSBvbiBpdHMgb3duIGZvciB0aGUgY3VycmVudCBwdXJwb3NlLgoKTm93LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgdG8gZXhhbWluZSBgc21jX3BuZXRfZmluZF9pYmAuIExldCYjMzk7cyB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3BuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19wbmV0LmM9Mjg1PXN0YXRpYyBib29sIHNtY19wbmV0aWRfdmFsaWQoY29uc3QgY2hhciAqcG5ldF9uYW1lLCBjaGFyICpwbmV0aWQpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTMxMC0gKi9cbm5ldC9zbWMvc21jX3BuZXQuYzozMTE6c3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWJfbmFtZSlcbm5ldC9zbWMvc21jX3BuZXQuYy0zMTIte1xuLS1cbm5ldC9zbWMvc21jX3BuZXQuYz00MTY9c3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy00MjYtXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xubmV0L3NtYy9zbWNfcG5ldC5jOjQyNzpcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcbm5ldC9zbWMvc21jX3BuZXQuYy00MjgtXHRpZiAoaWJfZGV2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTg4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIGBzcnBfbmV0X25hbWVzcGFjZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBzcnBfbmV0X25hbWVzcGFjZWAuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHRoZSBzZXR0aW5ncyB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBjb25zaXN0ZW50IHdpdGggbXkgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGRlc2lnbiBhbmQgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBuZXR3b3JrLiBObyBwb2ludCBpbiBwcm9jZWVkaW5nIHdpdGhvdXQgdGhpcyBiYXNlIGJlaW5nIHN0cm9uZy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIG91dCB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NycF9uZXRfbmFtZXNwYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM9MzE5MD1BVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzE5NS0gKi9cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jOjMxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKnNycF9uZXRfbmFtZXNwYWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jLTMxOTcte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTMyMDQ9c3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzIwOC1cdC5uc190eXBlID0gXHUwMDI2bmV0X25zX3R5cGVfb3BlcmF0aW9ucyxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jOjMyMDk6XHQubmFtZXNwYWNlID0gc3JwX25ldF9uYW1lc3BhY2UsXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMjEwLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IEFsbG9jYXRpb24gTmFtaW5nKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmTigKYgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIFRoZSBpbW1lZGlhdGUgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgbWluZCBpcyB0byB6ZXJvIGluIG9uIGBfX2FsbG9jX25hbWVfaWRgLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbiwgaXNu4oCZdCBpdD8gQW55IHRpbWUgSSBzZWUgYSBtZW1vcnkgYWxsb2NhdGlvbi1yZWxhdGVkIGlzc3VlLCB1bmRlcnN0YW5kaW5nIGhvdyBhbGxvY2F0aW9uIG5hbWVzIGFyZSBoYW5kbGVkLCBvciByYXRoZXIsIHRoZSBpbnRlcm5hbCBJRCBnZW5lcmF0aW9uLCBiZWNvbWVzIHBhcmFtb3VudC4gQSBsb3Qgb2Ygc3VidGxlIHByb2JsZW1zIGNhbiBzdGVtIGZyb20gbWlzbWFuYWdlZCBuYW1lcywgcGFydGljdWxhcmx5IGluIGNvbXBsZXgsIG11bHRpdGhyZWFkZWQgc3lzdGVtcy4gU28sIG15IGluaXRpYWwgdGhvdWdodD8gTGV0JiMzOTtzIHZlcmlmeSBob3cgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGJlaGF2ZXMsIG1ha2Ugc3VyZSB0aGUgSUQmIzM5O3MgYXJlIGNvcnJlY3RseSBzZXQgYW5kIG1hbmFnZWQuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciB0cmFja2luZyBhbmQgZGVidWdnaW5nIHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucyBvciBsZWFrcy4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3VyIGlzIHRoZSBiYXNlbGluZSBmb3IgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19uYW1lX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM9NDMyPWludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy00NDUtICovXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzo0NDY6c3RhdGljIGludCBfX2FsbG9jX25hbWVfaWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDQ3LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKnNraXApXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM9NDgxPXN0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy00ODIte1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM6NDgzOlx0cmV0dXJuIF9fYWxsb2NfbmFtZV9pZChuZXQsIG5hbWUsIE5VTEwpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDg0LX1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz0xNzM5PXN0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NzEtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzcyOlx0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTc3My1cdGlmIChpZCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MDAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgcmRtYV9kZXZfbmFtZV9pbl9uZXRuc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgLiBJIGtub3cgdGhpcyBmdW5jdGlvbi92YXJpYWJsZS9tZWNoYW5pc20gKGNvbnRleHQgZGVwZW5kaW5nLCBuYXR1cmFsbHkpIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIFJETUEgZGV2aWNlcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBhbiBpc3N1ZSByZWxhdGVkIHRvIGRldmljZSB2aXNpYmlsaXR5IG9yIHBlcmhhcHMgY3Jvc3MtbmFtZXNwYWNlIGNvbW11bmljYXRpb24gYW5kIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGlzIGlzIHRoZSByb290IGNhdXNlLiBUaGlzIGltcGxpZXMgSSYjMzk7bSBlaXRoZXIgZGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0sIGV4YW1pbmluZyBjb2RlLCBvciByZXZpZXdpbmcgYSBwb3RlbnRpYWwgcGF0Y2gvY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCwgaG93IGl0JiMzOTtzIHVzZWQsIGFuZCB3aGF0IGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGFyZS4gSSYjMzk7bGwgbGlrZWx5IGJlIGFzc2Vzc2luZyBpdHMgcm9sZSBpbiBkZXZpY2UgZW51bWVyYXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBvciByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGUgc3BlY2lmaWNzIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB0aGUgcGFydGljdWxhciBSRE1BIHN0YWNrIGluIHF1ZXN0aW9uLCBidXQgdGhlIGNvcmUgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBuZXR3b3JrIG5hbWVzcGFjZSBpc29sYXRpb24gaXMgKG9yIGlzbiYjMzk7dCkgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gUkRNQSBkZXZpY2UgbmFtaW5nLiBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBlbGltaW5hdGUgdGhlIHNpbXBsZSBwb3NzaWJpbGl0aWVzIGFuZCB0byBkaWcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jPTE3MTQ9RVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTcxNS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3MTY6c3RhdGljIGJvb2wgcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpza2lwLCBzdHJ1Y3QgbmV0ICpuZXQsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzE3LVx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz0xNzM5PXN0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NDktXHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3NTA6XHRcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzUxLVx0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NTctXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzU4Olx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpIHtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NTktXHRcdCpuZXdfbmFtZSA9IGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NjYtXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFwmIzM0O2liZGV2JXVcJiMzNDssIGRldmljZS1cdTAwM2VpbmRleCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzY3Olx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBidWYpKSB7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzY4LVx0XHQqbmV3X25hbWUgPSBidWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgTmV0IE5hbWVzcGFjZSBQYXRjaDogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcy4gRXNzZW50aWFsbHksIGl0IGFsbG93cyB0aGVzZSBkZXZpY2VzIHRvIGhhdmUgdW5pcXVlIG5hbWVzIHdpdGhpbiBlYWNoIG5ldHdvcmsgbmFtZXNwYWNlLCB3aGljaCBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0IHRvdWNoZXMgYm90aCB0aGUgY29yZSBSRE1BIHN1YnN5c3RlbSBhbmQgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYW5kIGNvcm5lciBjYXNlcyBpcyBoaWdoIHdpdGggdGhpcyBsZXZlbCBvZiBjb3JlIG1vZGlmaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgdG8gZW5zdXJlIGEgcHJvcGVyIHRlc3QgZW52aXJvbm1lbnQuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDR1JPVVBfUkRNQWAsIGBJTkZJTklCQU5EYCwgYE5FVF9OU2AsIGBTTUNgLCBhbmQgYElORklOSUJBTkRfU1JQYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBORVRfTlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQgb3IgaWYgaXQmIzM5O3MgdXN1YWxseSBjb21waWxlZCBpbiBhbHJlYWR5LCB3aGljaCBpcyBsaWtlbHkuIGBDR1JPVVBfUkRNQWAgc2VlbXMgZXNzZW50aWFsIGZvciB0aGUgY2dyb3VwLXJlbGF0ZWQgbW9kaWZpY2F0aW9ucywgYW5kIGBJTkZJTklCQU5EYCBpcyBvYnZpb3VzbHkgbmVjZXNzYXJ5IGZvciB0aGUgY29yZSBSRE1BIGNoYW5nZXMuIFRoZSBwcmVzZW5jZSBvZiBgU01DYCBpbmRpY2F0ZXMgbGlrZWx5IGNoYW5nZXMgdG8gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMuIEZpbmFsbHksIGBJTkZJTklCQU5EX1NSUGAgaXMgcmVxdWlyZWQgZm9yIHRoZSBTUlAgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIHF1aWNrIHNjYW4gb24gYENPTkZJR19TTUNgIHRvIGNvbmZpcm0gaWYgaXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxODYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgSW5maW5pQmFuZCBTUlAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfSU5GSU5JQkFORF9TUlBgJiMzNDsuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFNlcmlhbGl6ZWQgUmVzZXJ2ZSBQcm90b2NvbCwgd2hpY2ggb2YgY291cnNlIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoLiBUaGUgZm9jdXMgaGVyZSBpcyBsaWtlbHkgb24gaG93IGl0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQsIG9yIHBlcmhhcHMgd2hldGhlciBpdCAqaXMqIGNvbmZpZ3VyZWQuIEFyZSB3ZSB0cnlpbmcgdG8gZW5hYmxlIGl0LCBkaXNhYmxlIGl0LCBvciBzaW1wbHkgYXVkaXQgaXRzIGN1cnJlbnQgc3RhdGU/IFRoZSBjb250ZXh0IGhlcmUgaXMga2V5LiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnM6IHBvdGVudGlhbCBpbXBhY3Qgb24gc3RvcmFnZSBwZXJmb3JtYW5jZSwgdGhlIGludGVycGxheSB3aXRoIG90aGVyIEluZmluaUJhbmQgb3B0aW9ucyBsaWtlIFJETUEgYW5kIHZlcmJzLCBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2hlcmUgYXJlIHdlIHJ1bm5pbmc/IFdoYXQmIzM5O3MgdGhlIHRhcmdldCBwbGF0Zm9ybT8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgaG93IEkgaW50ZXJwcmV0IHRoaXMgc2ltcGxlIGNoZWNrLiBEZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LCBteSBuZXh0IHN0ZXAgY291bGQgYmUgdG8gdmVyaWZ5IG1vZHVsZSBsb2FkaW5nLCBjaGVjayBhc3NvY2lhdGVkIGtlcm5lbCBwYXJhbWV0ZXJzLCBvciByZXZpZXcgZXhpc3RpbmcgYmxvY2sgZGV2aWNlIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5GSU5JQkFORF9TUlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTUzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipDaGVja2luZyB0aGUgUkRNQSBDZ3JvdXAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBSRE1BLXJlbGF0ZWQgaXNzdWUsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGEgYmFzaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGNoZWNrIHRoZSBzdGF0ZSBvZiBgQ09ORklHX0NHUk9VUF9SRE1BYC4gSXQmIzM5O3MgYSBjcml0aWNhbCBrbm9iIHdoZW4gd29ya2luZyB3aXRoIFJETUEgd2l0aGluIGNncm91cHMuIElmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGVuIG1vc3Qgb2YgbXkgZWZmb3J0cyB3aWxsIGJlIGhhbXBlcmVkIGZyb20gdGhlIHN0YXJ0LiBJIHdhbnQgdG8gcnVsZSBvdXQgYSBzaW1wbGUgbWlzY29uZmlndXJhdGlvbiBiZWZvcmUgSSBzdGFydCB0cm91Ymxlc2hvb3RpbmcgdGhlIGNvbXBsZXhpdGllcyB0aGF0IG1pZ2h0IGZvbGxvdy4gVGhpcyBpcyB0aGUgbG93LWhhbmdpbmcgZnJ1aXQsIHNvIHRvIHNwZWFrLCBhbmQgSSYjMzk7ZCBiZSByZW1pc3Mgbm90IHRvIGVsaW1pbmF0ZSBpdCBhcyBhIHByaW1hcnkgY2F1c2UuIFRpbWUgdG8gc2VlIHdoYXQgdGhhdCBzZXR0aW5nIGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEyMzc9Y29uZmlnIENHUk9VUF9QSURTXG4tLVxuaW5pdC9LY29uZmlnLTEyNTItXG5pbml0L0tjb25maWc6MTI1Mzpjb25maWcgQ0dST1VQX1JETUFcbmluaXQvS2NvbmZpZy0xMjU0LVx0Ym9vbCBcJiMzNDtSRE1BIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NjkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb246CgoqKkNoZWNraW5nIGBDT05GSUdfUkRNQV9SWEVgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1JETUFfUlhFYCBpcyBjb3JyZWN0bHkgc2V0LiBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgUmVjZWl2ZXIgRXh0ZW5zaW9ucyAoUlhFKSBzdXBwb3J0IGluIG91ciBSRE1BIHNldHVwLiBUaGlzIHBhcmFtZXRlciBpcyB0aGUgZGVjaWRpbmcgZmFjdG9yIGZvciB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gZW5hYmxlIHRoZSBSWEUgZnVuY3Rpb25hbGl0eTsgd2l0aG91dCBpdCBlbmFibGVkIHdl4oCZcmUgc3Vuay4KCkkgaW1tZWRpYXRlbHkgbmVlZCB0byBjb25maXJtIGl0cyB2YWx1ZSwgYmVjYXVzZSBpZiBpdCYjMzk7cyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlbiB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgb3IgY29uZmlndXJpbmcsIGlzbiYjMzk7dCBnb2luZyB0byB3b3JrLiBJcyBpdCBlbmFibGVkPyBEaXNhYmxlZD8gU2V0IGFzIGEgbW9kdWxlPyBUaGUgbnVhbmNlcyB0aGVyZSBjYW4gZHJhbWF0aWNhbGx5IHNoaWZ0IGhvdyBJIG5lZWQgdG8gcHJvY2VlZCBhbmQgd2hhdCBJIG1heSBiZSBlbmNvdW50ZXJpbmcuIElmIGl0JiMzOTtzIGRpc2FibGVkLCBJIGtub3cgdG8gcHVyc3VlIG90aGVyIGF2ZW51ZXMgYW5kIHNvbHV0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGhvdXQgUlhFLCBidXQsIGlmIGVuYWJsZWQsIEkga25vdyBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4gVGhpcyBvcHRpb24gd2lsbCBpbmZsdWVuY2Ugb3RoZXIgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9SWEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNjEKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkRNQSBOZXR3b3JrIE5hbWVzcGFjZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBjaGFuZ2VzLCBzbyBJIHNlZSBpdCB0b3VjaGVzIGEgd2lkZSByYW5nZSBvZiBSRE1BLXJlbGF0ZWQgY29kZTogYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNgLCBga2VybmVsL2Nncm91cC9yZG1hLmNgLCBgbmV0L3NtYy9zbWNfcG5ldC5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmNgLCBhbmQgYGRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiBhcmVhcyDigJMgY29yZSBkZXZpY2UgaGFuZGxpbmcsIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGNncm91cCBpbnRlZ3JhdGlvbiwgU01DLCBTUlAsIGFuZCBldmVuIFJYRS4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCk15IG5leHQgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJiMzOTttIHNlZWluZyBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGBubGRldl9zZXRfZG9pdGAsIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgLCBgc21jX3BuZXRfZmluZF9pYmAsIGBzcnBfbmV0X25hbWVzcGFjZWAsIGBfX2FsbG9jX25hbWVfaWRgLCBhbmQgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9uIHdpdGggUkRNQSBkZXZpY2VzLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGludm9sdmUgbmFtZSBhbGxvY2F0aW9uIChgX19hbGxvY19uYW1lX2lkYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCkgYW5kIHZpc2liaWxpdHkgY2hlY2tzIChgcmRtYWNnX2RldmljZV92aXNpYmxlYCkgc3VnZ2VzdHMgc2lnbmlmaWNhbnQgd29yayBvbiBob3cgUkRNQSBkZXZpY2VzIGFuZCB0aGVpciBuYW1lcyBhcmUgbWFuYWdlZCB3aXRoaW4gZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhlIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAgYW5kIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgIGZ1bmN0aW9ucyBhcmUgYWxzbyBjcml0aWNhbGx5IGltcG9ydGFudC4KCkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIGFmZmVjdGVkLCBgSU5GSU5JQkFORGAsIGBDR1JPVVBfUkRNQWAsIGBTTUNgLCBgSU5GSU5JQkFORF9TUlBgLCBhbmQgYFJETUFfUlhFYCB0ZWxscyBtZSB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBSRE1BIGZlYXR1cmUgc2V0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGwgb2YgdGhlc2UgZmVhdHVyZXMgaXMgY29ycmVjdC4KCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvZiB0aGUgJiMzNDt3aGF0LiYjMzQ7IE5vdywgaXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgKndoeSogdGhlc2UgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIGVuc3VyZSBwcm9wZXIgbmV0d29yayBuYW1lc3BhY2UgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzeW1ib2xzIGludGVyYWN0IGluIHRoZSBvdmVyYWxsIGRldmljZSBtYW5hZ2VtZW50LCBjZ3JvdXAgaW50ZWdyYXRpb24sIGFuZCBTTUMvU1JQIHN1cHBvcnQuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIHRoZW4gY29tcGFyZSB0aGlzIHdpdGggcHJldmlvdXMgcGF0Y2hlcy4KCk5vdywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1JETUEmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfU1JQJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICAgJiMzNDtzcnBfbmV0X25hbWVzcGFjZSYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1JETUEmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfU1JQJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZGV2aWNlX3Zpc2libGUmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7LAogICAgJiMzNDtzcnBfbmV0X25hbWVzcGFjZSYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfbmFtZV9pbl9uZXRucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NToyNi42NzcxODgxODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIwMDc2NDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EX1NSUFwiLFxuICAgIFwiUkRNQV9SWEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfZGV2aWNlX3Zpc2libGVcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgICBcInNycF9uZXRfbmFtZXNwYWNlXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjI2LjY3NzE5NDU1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyNjkxODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDc2YWU5ZjdjNTU5MzVmYjFjMzhiODk4NmQ5MDVkNGVlZDU1OWY2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMzo1NToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuQEAgLTEyLDYgKzEyLDEwIEBAIERlc2NyaXB0aW9uOiBcXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cXG4gXFx0XFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxcbiBcXHRcXHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2VcXG4gXFxuK1xcdFxcdE5vdGU6IGNvbmZpZ2ZzIGhhcyBubyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LCBzbyB0aGlzXFxuK1xcdFxcdGludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluXFxuK1xcdFxcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cXG4rXFxuIFxcbiBXaGF0OiBcXHRcXHQvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2UvcG9ydHMvXFx1MDAzY3BvcnQtbnVtXFx1MDAzZS9kZWZhdWx0X3JvY2VfbW9kZVxcbiBEYXRlOiBcXHRcXHROb3ZlbWJlciAyOSwgMjAxNVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uNDUyM2MxODg0ZDY3MTUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuQEAgLTI3NTIsNiArMjc1MiwxMyBAQCBSRE1BXFxuIFRoZSBcXFwicmRtYVxcXCIgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZlxcbiBSRE1BIHJlc291cmNlcy5cXG4gXFxuK1doZW4gUkRNQSBkZXZpY2VzIGFyZSBpc29sYXRlZCBwZXIgbmV0d29yayBuYW1lc3BhY2UgKGV4Y2x1c2l2ZSBtb2RlKSxcXG4rZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgb25seSB3aXRoaW4gYSBuZXR3b3JrIG5hbWVzcGFjZS4gVGhlIGRldmljZSBsaW5lc1xcbitiZWxvdyBhcmUgdGhlcmVmb3JlIHNjb3BlZCB0byB0aGUgcmVhZGluZyBvciB3cml0aW5nIHByb2Nlc3MncyBuZXR3b3JrXFxuK25hbWVzcGFjZTogb25seSBkZXZpY2VzIGFjY2Vzc2libGUgZnJvbSB0aGF0IG5hbWVzcGFjZSBhcmUgbGlzdGVkLCBhbmQgYVxcbitsaW1pdCBpcyBhcHBsaWVkIHRvIHRoZSBkZXZpY2Ugb2YgdGhhdCBuYW1lIGluIHRoYXQgbmFtZXNwYWNlLiBDb25maWd1cmVcXG4rbGltaXRzIGZyb20gdGhlIHNhbWUgbmV0d29yayBuYW1lc3BhY2UgYXMgdGhlIHdvcmtsb2Fkcy5cXG4rXFxuIFJETUEgSW50ZXJmYWNlIEZpbGVzXFxuIH5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXFxuaW5kZXggMWYwMzdmZTAxNDUwZWYuLjdhMjE2ZWQ0NTE5OWJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcXG5AQCAtMTcsNiArMTcsOCBAQFxcbiB2b2lkIGliX2RldmljZV9yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuIFxcdGRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5hbWUgPSBkZXZpY2UtXFx1MDAzZW5hbWU7XFxuK1xcdGRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5ldG5zX3NoYXJlZCA9IGliX2RldmljZXNfc2hhcmVkX25ldG5zO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNnX2RldmljZS5uZXQsIHJkbWFfZGV2X25ldChkZXZpY2UpKTtcXG4gXFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UpO1xcbiB9XFxuIFxcbkBAIC0zNCw2ICszNiwxNiBAQCB2b2lkIGliX2RldmljZV91bnJlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UpO1xcbiB9XFxuIFxcbit2b2lkIGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5ldCwgbmV0KTtcXG4rfVxcbitcXG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZClcXG4re1xcbitcXHRXUklURV9PTkNFKGRldmljZS1cXHUwMDNlY2dfZGV2aWNlLm5ldG5zX3NoYXJlZCwgc2hhcmVkKTtcXG4rfVxcbitcXG4gaW50IGliX3JkbWFjZ190cnlfY2hhcmdlKHN0cnVjdCBpYl9yZG1hY2dfb2JqZWN0ICpjZ19vYmosXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdFxcdCBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXFxuaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcXG5AQCAtNjUsNiArNjUsMTAgQEAgc3RhdGljIHN0cnVjdCBjbWFfZGV2X3BvcnRfZ3JvdXAgKnRvX2Rldl9wb3J0X2dyb3VwKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4gXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApO1xcbiB9XFxuIFxcbisvKlxcbisgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluXFxuKyAqIGRpZmZlcmVudCBuYW1lc3BhY2VzIHJlc29sdmVzIHRvIHRoZSBmaXJzdCBtYXRjaCBoZXJlLlxcbisgKi9cXG4gc3RhdGljIGJvb2wgZmlsdGVyX2J5X25hbWUoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB2b2lkICpjb29raWUpXFxuIHtcXG4gXFx0cmV0dXJuICFzdHJjbXAoZGV2X25hbWUoXFx1MDAyNmliX2Rldi1cXHUwMDNlZGV2KSwgY29va2llKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxcbmluZGV4IDE5MTA0YzU0MmIyNzBkLi45Y2Q2NzFlMmRiMjA0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXFxuQEAgLTE1Niw2ICsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7XFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1JETUFcXG4gdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XFxuIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XFxuK3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpO1xcbit2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGJvb2wgc2hhcmVkKTtcXG4gXFxuIGludCBpYl9yZG1hY2dfdHJ5X2NoYXJnZShzdHJ1Y3QgaWJfcmRtYWNnX29iamVjdCAqY2dfb2JqLFxcbiBcXHRcXHRcXHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxcbkBAIC0xNzMsNiArMTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBzaGFyZWQpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUgcmVzb3VyY2VfaW5kZXgpXFxuQEAgLTM1Niw3ICszNjgsOCBAQCB2b2lkIGliX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRfZ3JvdXBzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydF9udW0sXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XFxuIFxcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFxuIGludCByZG1hX25sX25ldF9pbml0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xcbiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcXG5pbmRleCBiODE5M2UwNzdhNzQ2Zi4uY2ZmYjBkZTFjMDAxNmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xcbkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIERFQ0xBUkVfUldTRU0ocmRtYV9uZXRzX3J3c2VtKTtcXG4gYm9vbCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucyA9IHRydWU7XFxuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobmV0bnNfbW9kZSxcXG4tXFx0XFx0IFxcXCJTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVxcXCIpO1xcbitcXHRcXHQgXFxcIlNoYXJlIGRldmljZSBhbW9uZyBuZXQgbmFtZXNwYWNlczsgZGVmYXVsdD0xIChzaGFyZWQpLiBJbiBleGNsdXNpdmUgbW9kZSBkZXZpY2UgbmFtZXMgYXJlIHVuaXF1ZSBwZXIgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbiAvKipcXG4gICogcmRtYV9kZXZfYWNjZXNzX25ldG5zKCkgLSBSZXR1cm4gd2hldGhlciBhbiByZG1hIGRldmljZSBjYW4gYmUgYWNjZXNzZWRcXG4gICpcXHRcXHRcXHQgICAgIGZyb20gYSBzcGVjaWZpZWQgbmV0IG5hbWVzcGFjZSBvciBub3QuXFxuQEAgLTI2OCw3ICsyNjgsOCBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGliZGV2X2xzbV9uYiA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCk7XFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLFxcbitcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7XFxuIFxcbiAvKiBQb2ludGVyIHRvIHRoZSBSQ1UgaGVhZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGliX3BvcnRfZGF0YSBhcnJheSAqL1xcbiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7XFxuQEAgLTM1MSwxMyArMzUyLDE1IEBAIHZvaWQgaWJfZGV2aWNlX3B1dChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpYl9kZXZpY2VfcHV0KTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgc3RydWN0IGliX2RldmljZSAqX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcbiBcXHR4YV9mb3JfZWFjaCAoXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXFxuLVxcdFxcdGlmICghc3RyY21wKG5hbWUsIGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldikpKVxcbitcXHRcXHRpZiAocmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGRldmljZTtcXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0zOTUsNyArMzk4LDcgQEAgaW50IGliX2RldmljZV9yZW5hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHtcXG4rXFx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdH1cXG5AQCAtNDM1LDcgKzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuKy8qXFxuKyAqIFBpY2sgYSBmcmVlIGluZGV4IGZvciB0aGUgJyVkJyBzdHlsZSBAbmFtZSBwYXR0ZXJuIHdpdGhpbiBuZXQgbmFtZXNwYWNlXFxuKyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHNcXG4rICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cXG4rICovXFxuK3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuQEAgLTQ0OCw2ICs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdHhhX2Zvcl9lYWNoIChcXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSkge1xcbiBcXHRcXHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xcbiBcXG4rXFx0XFx0aWYgKGRldmljZSA9PSBza2lwIHx8ICFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKHNzY2FuZihkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpLCBuYW1lLCBcXHUwMDI2aSkgIT0gMSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChpIFxcdTAwM2MgMCB8fCBpIFxcdTAwM2U9IElOVF9NQVgpXFxuQEAgLTQ2MiwxNSArNDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBpZGFfYWxsb2MoXFx1MDAyNmludXNlLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRyYyA9IGRldl9zZXRfbmFtZShcXHUwMDI2aWJkZXYtXFx1MDAzZWRldiwgbmFtZSwgcmMpO1xcbiBvdXQ6XFxuIFxcdGlkYV9kZXN0cm95KFxcdTAwMjZpbnVzZSk7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRpbnQgaWQ7XFxuK1xcbitcXHRpZCA9IGFsbG9jX25hbWVfaWQocmRtYV9kZXZfbmV0KGliZGV2KSwgbmFtZSk7XFxuK1xcdGlmIChpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBpZDtcXG4rXFxuK1xcdHJldHVybiBkZXZfc2V0X25hbWUoXFx1MDAyNmliZGV2LVxcdTAwM2VkZXYsIG5hbWUsIGlkKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaWJfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbiB7XFxuIFxcdHN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7XFxuQEAgLTEwOTQsNiArMTExNyw3IEBAIHN0YXRpYyBpbnQgYWRkX2FsbF9jb21wYXRfZGV2cyh2b2lkKVxcbiBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0O1xcbitcXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG5AQCAtMTExNiw2ICsxMTQwLDEyIEBAIGludCByZG1hX2NvbXBhdGRldl9zZXQodTggZW5hYmxlKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4rXFx0LyogS2VlcCBlYWNoIHJlZ2lzdGVyZWQgZGV2aWNlJ3MgcmRtYSBjZ3JvdXAgdmlzaWJpbGl0eSBpbiBzeW5jLiAqL1xcbitcXHRkb3duX3JlYWQoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXHR4YV9mb3JfZWFjaF9tYXJrZWQoXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXYsIERFVklDRV9SRUdJU1RFUkVEKVxcbitcXHRcXHRpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoZGV2LCBlbmFibGUpO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4rXFxuIFxcdGlmIChlbmFibGUpXFxuIFxcdFxcdHJldCA9IGFkZF9hbGxfY29tcGF0X2RldnMoKTtcXG4gXFx0ZWxzZVxcbkBAIC0xMTUxLDggKzExODEsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIHRoZSBOUyB0aGVuIG1vdmUgaXQgYmFjayB0byBpbml0LlxcbitcXHRcXHQgKiBQcm92aWRlIGEgZmFsbGJhY2sgcGF0dGVybiBzbyBhIG5hbWUgY29uZmxpY3QgaW4gaW5pdF9uZXRcXG4rXFx0XFx0ICogY2Fubm90IG1ha2UgdGhlIHRlYXJkb3duIG1vdmUgZmFpbC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgXFx1MDAyNmluaXRfbmV0KTtcXG4rXFx0XFx0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcXHUwMDI2ZGV2LVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0KSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcXHUwMDI2aW5pdF9uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLCBcXFwiaWJkZXYlZFxcXCIpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBtb3ZlIFJETUEgZGV2aWNlICVzIHRvIGluaXRfbmV0IG9uIG5ldG5zIGV4aXQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGRldl9uYW1lKFxcdTAwMjZkZXYtXFx1MDAzZWRldiksIHJldCk7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG5AQCAtMTIwNiw3ICsxMjQ1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHJkbWFfZGV2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gfVxcbiBcXG4gLypcXG4tICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhpcyBpc1xcbisgKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGUgZGV2aWNlXFxuKyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzXFxuICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS5cXG4gICovXFxuIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxcbkBAIC0xMjIzLDcgKzEyNjMsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICByZG1hX2Rldl9uZXQoZGV2aWNlKSkpIHtcXG4gXFx0XFx0cmV0ID0gLUVORklMRTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtMTMyMiw2ICsxMzYzLDcgQEAgc3RhdGljIGludCBlbmFibGVfZGV2aWNlX2FuZF9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiBcXHQgKi9cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlZmNvdW50LCAyKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChkZXZpY2UsIGliX2RldmljZXNfc2hhcmVkX25ldG5zKTtcXG4gXFx0eGFfc2V0X21hcmsoXFx1MDAyNmRldmljZXMsIGRldmljZS1cXHUwMDNlaW5kZXgsIERFVklDRV9SRUdJU1RFUkVEKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEzODgsOCArMTQzMCw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiAvKipcXG4gICogaWJfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgYW4gSUIgZGV2aWNlIHdpdGggSUIgY29yZVxcbiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXJcXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbFxcbi0gKiBcXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXFxuKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXlcXG4rICpcXHQgIGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbCBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGVcXG4rICpcXHQgIHBhc3NlZCBkZXZpY2UgbmFtZS5cXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxcbiAgKlxcdCAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4gSW4gdGhpcyBjYXNlIHRoZSBjYWxsZXIgc2hvdWxkIGZ1bGx5XFxuICAqXFx0XFx0c2V0dXAgdGhlIGliZGV2IGZvciBETUEuIFRoaXMgdXN1YWxseSBtZWFucyB1c2luZyBkbWFfdmlydF9vcHMuXFxuQEAgLTE2NzAsMTQgKzE3MTMsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKTtcXG4gXFxuK3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXFxuK1xcdFxcdGlmIChkZXZpY2UgIT0gc2tpcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWVcXG4rICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWVcXG4rICogd2hlbiBpdCBpcyBmcmVlLCBvciB1c2UgYSB0cnVzdGVkICclZCcgQGZhbGxiYWNrX3BhdHRlcm4gZm9yIHRlYXJkb3duLiBUaGVcXG4rICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLlxcbisgKi9cXG4rc3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sXFxuK1xcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxcbit7XFxuK1xcdGludCBpZDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0aWYgKHJlcXVlc3RlZF9uYW1lKSB7XFxuK1xcdFxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XFxuK1xcdFxcdFxcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0Km5ld19uYW1lID0gZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybilcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFxcXCJpYmRldiV1XFxcIiwgZGV2aWNlLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkge1xcbitcXHRcXHQqbmV3X25hbWUgPSBidWY7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7XFxuK1xcdGlmIChpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBpZDtcXG4rXFx0c25wcmludGYoYnVmLCBidWZfbGVuLCBmYWxsYmFja19wYXR0ZXJuLCBpZCk7XFxuK1xcdCpuZXdfbmFtZSA9IGJ1ZjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBjYWxsZXIgbXVzdCBwYXNzIGluIGEgZGV2aWNlIHRoYXQgaGFzIHRoZSBrcmVmIGhlbGQgYW5kIHRoZSByZWZjb3VudFxcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcXG4gICogaW50byBuZXQuXFxuKyAqXFxuKyAqIE5hbWluZyBydWxlcyBhcmUgaGFuZGxlZCBieSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKVxcbiB7XFxuK1xcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XFxuK1xcdGNvbnN0IGNoYXIgKm5ld19uYW1lO1xcbiBcXHRpbnQgcmV0MiA9IC1FSU5WQUw7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0xNjk0LDMwICsxODA2LDY4IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nXFxuK1xcdFxcdCAqIGRvd24sIHNvIGEgZG9vbWVkIHVzZXIgbW92ZSBkb2VzIG5vdCBkaXNhYmxlIGEgbGl2ZSBkZXZpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4rXFx0XFx0cmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihidWYpLCBcXHUwMDI2bmV3X25hbWUpO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYua29iaiwgS09CSl9SRU1PVkUpO1xcbiBcXHRkaXNhYmxlX2RldmljZShkZXZpY2UpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cXG4tXFx0ICogY2hhbmdlIHRoZSBuYW1lc3BhY2UuXFxuK1xcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXFxuK1xcdCAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnRcXG4rXFx0ICogcmVnaXN0cmF0aW9uIG9yIHJlbmFtZSwgdGhlbiBwdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBzeXNmc1xcbitcXHQgKiBsZXZlbC5cXG4gXFx0ICovXFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsIHNpemVvZihidWYpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm5ld19uYW1lKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdCAgICAgXFxcIiVzOiBmYWlsZWQgdG8gcGljayBkZXZpY2UgbmFtZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xcbitcXHRcXHRcXHRpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIG5ldCk7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byByZW5hbWVfZG9uZTtcXG4rXFx0fVxcbiBcXG4tXFx0ZG93bl9yZWFkKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4tXFx0LypcXG4tXFx0ICogQ3VycmVudGx5IHJkbWEgZGV2aWNlcyBhcmUgc3lzdGVtIHdpZGUgdW5pcXVlLiBTbyB0aGUgZGV2aWNlIG5hbWVcXG4tXFx0ICogaXMgZ3VhcmFudGVlZCBmcmVlIGluIHRoZSBuZXcgbmFtZXNwYWNlLiBQdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlXFxuLVxcdCAqIGF0IHRoZSBzeXNmcyBsZXZlbC5cXG4tXFx0ICovXFxuLVxcdHJldCA9IGRldmljZV9yZW5hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKTtcXG4tXFx0dXBfcmVhZChcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcXG4rXFx0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpO1xcbitcXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiwgbmV3X25hbWUpO1xcbiBcXHRpZiAocmV0KSB7XFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0IFxcXCIlczogQ291bGRuJ3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgX19mdW5jX18pO1xcbi1cXHRcXHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cXG4tXFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcXG4rXFx0XFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcXG4rXFx0XFx0XFx0V0FSTigxLFxcbitcXHRcXHRcXHQgICAgIFxcXCIlczogZmFpbGVkIHRvIHJlbmFtZSBkZXZpY2UgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgX19mdW5jX18sIHJldCk7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCIlczogQ291bGRuJ3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgX19mdW5jX18pO1xcbitcXHRcXHRcXHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cXG4rXFx0XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcXG4rXFx0XFx0XFx0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBjdXJfbmV0KTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdHJzY3B5KGRldmljZS1cXHUwMDNlbmFtZSwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSxcXG4rXFx0XFx0XFx0SUJfREVWSUNFX05BTUVfTUFYKTtcXG4gXFx0fVxcbityZW5hbWVfZG9uZTpcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbiBcXG4gXFx0cmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpO1xcbiBcXHRpZiAocmV0Mikge1xcbkBAIC0xNzQwLDM2ICsxODkwLDcyIEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4gfVxcbiBcXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdG5ldCA9IGdldF9uZXRfbnNfYnlfZmQobnNfZmQpO1xcbiBcXHRpZiAoSVNfRVJSKG5ldCkpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCB0YXJnZXQgbmV0IG5hbWVzcGFjZSBmZFxcXCIpO1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKG5ldCk7XFxuIFxcdFxcdGdvdG8gbmV0X2VycjtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJNaXNzaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FUEVSTTtcXG4gXFx0XFx0Z290byBuc19lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE1vdmluZyBhIGRldmljZSB0byB0aGUgbmFtZXNwYWNlIGl0IGFscmVhZHkgbGl2ZXMgaW4gaXMgYSBuby1vcDsgYVxcbitcXHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXFxuK1xcdCAqL1xcbitcXHRpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KFxcdTAwMjZkZXYtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xcbitcXHRcXHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcXG4rXFxuK1xcdFxcdGlmIChyZXQgPT0gLUVFWElTVClcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbitcXHRcXHRlbHNlIGlmIChyZXQgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBuYW1lKVxcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuK1xcdFxcdGdvdG8gbnNfZXJyO1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBBbGwgdGhlIGliX2NsaWVudHMsIGluY2x1ZGluZyB1dmVyYnMsIGFyZSByZXNldCB3aGVuIHRoZSBuYW1lc3BhY2UgaXNcXG4gXFx0ICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG9cXG4gXFx0ICogc29tZXRoaW5nLCBzbyBkaXNhc3NvY2lhdGlvbiBpcyBtYW5kYXRvcnkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWRldi1cXHUwMDNlb3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xcbitcXHRpZiAoaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkNhbm5vdCBjaGFuZ2UgbmV0IG5hbWVzcGFjZSBvZiBSRE1BIGRldmljZSBpbiBzaGFyZWQgbmV0bnMgbW9kZVxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Z290byBuc19lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2UgY2hhbmdlcyAobm8gZGlzYXNzb2NpYXRlIHN1cHBvcnQpXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbiBcXHRcXHRnb3RvIG5zX2VycjtcXG4gXFx0fVxcbiBcXG4gXFx0Z2V0X2RldmljZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRpYl9kZXZpY2VfcHV0KGRldik7XFxuLVxcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucywgbmV0KTtcXG4rXFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cXHUwMDNlbnNwcm94eS1cXHUwMDNlbmV0X25zLCBuZXQsIG5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICBOVUxMKTtcXG4gXFx0cHV0X2RldmljZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocmV0ID09IC1FRVhJU1QpXFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcXFwiKTtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IC1FSU5WQUwgXFx1MDAyNlxcdTAwMjYgbmFtZSlcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIlVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbiBcXG4gXFx0cHV0X25ldChuZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xcbmluZGV4IGY1OTljMjRiMzRlODFiLi40NzNiZjk2NjdmODNlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xcbkBAIC0xMTc3LDYgKzExNzcsMjQgQEAgc3RhdGljIGludCBubGRldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0aWYgKCFkZXZpY2UpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xcbitcXHRcXHRjaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9O1xcbitcXHRcXHR1MzIgbnNfZmQ7XFxuK1xcbitcXHRcXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xcbitcXHRcXHRcXHRubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLFxcbitcXHRcXHRcXHRcXHQgICAgSUJfREVWSUNFX05BTUVfTUFYKTtcXG4rXFx0XFx0XFx0aWYgKHN0cmxlbihuYW1lKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdG5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTtcXG4rXFx0XFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBuYW1lWzBdID8gbmFtZSA6IE5VTEwsIGV4dGFjayk7XFxuK1xcdFxcdGdvdG8gcHV0X2RvbmU7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XFxuIFxcdFxcdGNoYXIgbmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdID0ge307XFxuIFxcbkBAIC0xMTkwLDE0ICsxMjA4LDYgQEAgc3RhdGljIGludCBubGRldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7XFxuLVxcdFxcdHUzMiBuc19mZDtcXG4tXFxuLVxcdFxcdG5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTtcXG4tXFx0XFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkKTtcXG4tXFx0XFx0Z290byBwdXRfZG9uZTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkge1xcbiBcXHRcXHR1OCB1c2VfZGltO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcXG5pbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcXG5AQCAtNzAwLDYgKzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxcbiBcXHRpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNFTGludXggbGFiZWxzIGFuIGVuZHBvcnQgYnkgKGRldmljZSBuYW1lLCBwb3J0KSBmcm9tIGEgZ2xvYmFsXFxuK1xcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxcbitcXHQgKiB0aGUgc2FtZSBsYWJlbDsgZGlzdGluZ3Vpc2hpbmcgdGhlbSB3b3VsZCBuZWVkIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydFxcbitcXHQgKiBpbiB0aGUgcG9saWN5IGxhbmd1YWdlIGFuZCB0b29saW5nLlxcbitcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcXG4gXFx0cmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LVxcdTAwM2VzZWN1cml0eSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZGV2X25hbWUoXFx1MDAyNmFnZW50LVxcdTAwM2VkZXZpY2UtXFx1MDAzZWRldiksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXFxuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXFxuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxcbiBcXHRcXHRyeGVfZXJyX3VjKHVjLCBcXFwiY2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcXG4re1xcbit9XFxuK1xcbiAvKiBwZCAqL1xcbiBzdGF0aWMgaW50IHJ4ZV9hbGxvY19wZChzdHJ1Y3QgaWJfcGQgKmlicGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpXFxuIHtcXG5AQCAtMTQ3OCw2ICsxNDgyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xcbiBcXHQuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsXFxuIFxcdC5kZXRhY2hfbWNhc3QgPSByeGVfZGV0YWNoX21jYXN0LFxcbiBcXHQuZGV2aWNlX2dyb3VwID0gXFx1MDAyNnJ4ZV9hdHRyX2dyb3VwLFxcbitcXHQuZGlzYXNzb2NpYXRlX3Vjb250ZXh0ID0gcnhlX2Rpc2Fzc29jaWF0ZV91Y29udGV4dCxcXG4gXFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcXG4gXFx0LmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tcixcXG4gXFx0LmdldF9od19zdGF0cyA9IHJ4ZV9pYl9nZXRfaHdfc3RhdHMsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcXG5pbmRleCBhY2JkNzg3ZGUyNjViNS4uYTA3MGZjZjg2ZThhNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xcbkBAIC0zMTg5LDEwICszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcXG4gXFxuIEFUVFJJQlVURV9HUk9VUFMoc3JwX2NsYXNzKTtcXG4gXFxuKy8qXFxuKyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYlxcbisgKiBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKnNycF9uZXRfbmFtZXNwYWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LVxcdTAwM2VzcnBfZGV2LVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XFxuIFxcdC5uYW1lICAgID0gXFxcImluZmluaWJhbmRfc3JwXFxcIixcXG4gXFx0LmRldl9ncm91cHMgPSBzcnBfY2xhc3NfZ3JvdXBzLFxcbi1cXHQuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXZcXG4rXFx0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LFxcbitcXHQubnNfdHlwZSA9IFxcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxcbitcXHQubmFtZXNwYWNlID0gc3JwX25ldF9uYW1lc3BhY2UsXFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXFxuaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjcxMTcwY2IwZTE5ZTM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxcbkBAIC03LDYgKzcsNyBAQFxcbiAjZGVmaW5lIF9DR1JPVVBfUkRNQV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZVxcbiBcXG4gZW51bSByZG1hY2dfcmVzb3VyY2VfdHlwZSB7XFxuIFxcdFJETUFDR19SRVNPVVJDRV9IQ0FfSEFORExFLFxcbkBAIC0zNCw2ICszNSwxNSBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRkZXZfbm9kZTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHJwb29scztcXG4gXFx0Y2hhclxcdFxcdFxcdCpuYW1lO1xcbitcXHQvKlxcbitcXHQgKiBOZXQgbmFtZXNwYWNlIHRoZSBkZXZpY2UgYmVsb25ncyB0by4gQG5ldG5zX3NoYXJlZCBtaXJyb3JzXFxuK1xcdCAqIGliX2RldmljZXNfc2hhcmVkX25ldG5zOiB3aGVuIHRydWUgdGhlIGRldmljZSBpcyB2aXNpYmxlIGZyb20gZXZlcnlcXG4rXFx0ICogbmV0IG5hbWVzcGFjZSAoc2hhcmVkIG1vZGUpOyBvdGhlcndpc2UgQG5ldCBpcyB0aGUgb25seSBuYW1lc3BhY2VcXG4rXFx0ICogdGhhdCBtYXkgc2VlIGFuZCBjb25maWd1cmUgaXQuIEBuZXRuc19zaGFyZWQgaXMgdXBkYXRlZCB3aGVuIHRoZVxcbitcXHQgKiBzaGFyaW5nIG1vZGUgY2hhbmdlcywgc28gdXNlIHtSRUFELFdSSVRFfV9PTkNFKCkgdG8gYWNjZXNzIGl0LlxcbitcXHQgKi9cXG4rXFx0cG9zc2libGVfbmV0X3RcXHRcXHRuZXQ7XFxuK1xcdGJvb2xcXHRcXHRcXHRuZXRuc19zaGFyZWQ7XFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXFxuaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcXG5AQCAtNTE2LDcgKzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XFxuIFxcdFJETUFfTkxERVZfQVRUUl9ERVZfUFJPVE9DT0wsXFx0XFx0Lyogc3RyaW5nICovXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxcbitcXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdC4gTWF5IGJlIGNvbWJpbmVkXFxuK1xcdCAqIHdpdGggUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FIChhIGxpdGVyYWwgZGV2aWNlIG5hbWUpIHRvIGFsc28gcmVuYW1lXFxuK1xcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXFxuK1xcdCAqIGlmIHRoYXQgbmFtZSBpcyBhbHJlYWR5IHRha2VuIHRoZXJlLlxcbiBcXHQgKi9cXG4gXFx0UkRNQV9OTERFVl9ORVRfTlNfRkQsXFx0XFx0XFx0LyogdTMyICovXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jIGIva2VybmVsL2Nncm91cC9yZG1hLmNcXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Nncm91cC9yZG1hLmNcXG4rKysgYi9rZXJuZWwvY2dyb3VwL3JkbWEuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZ3JvdXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhcnNlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwX3JkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25zcHJveHkuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgUkRNQUNHX01BWF9TVFIgXFxcIm1heFxcXCJcXG4gXFxuQEAgLTQ2NCw2ICs0NjUsMTMgQEAgdm9pZCByZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XFxuIFxcbisvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXFxuK3N0YXRpYyBib29sIHJkbWFjZ19kZXZpY2VfdmlzaWJsZShjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHJldHVybiBSRUFEX09OQ0UoZGV2aWNlLVxcdTAwM2VuZXRuc19zaGFyZWQpIHx8XFxuK1xcdCAgICAgICBuZXRfZXEocmVhZF9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZW5ldCksIGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0c3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZTtcXG5AQCAtNDcxLDcgKzQ3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkbWFjZ19tdXRleCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcXG4tXFx0XFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2aWNlLVxcdTAwM2VuYW1lKSlcXG4rXFx0XFx0aWYgKHJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhc3RyY21wKG5hbWUsIGRldmljZS1cXHUwMDNlbmFtZSkpXFxuIFxcdFxcdFxcdHJldHVybiBkZXZpY2U7XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtNjI2LDYgKzYzNSw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX3Jlc291cmNlX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxuK1xcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuIFxcbiBcXHRcXHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xcbkBAIC02NDgsNiArNjYwLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxuK1xcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcXG4gXFxuIFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcyBcXFwiLCBkZXZpY2UtXFx1MDAzZW5hbWUpO1xcbkBAIC02NzcsNiArNjkyLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxuK1xcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcXG4gXFxuIFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcyBcXFwiLCBkZXZpY2UtXFx1MDAzZW5hbWUpO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmNcXG5pbmRleCA2M2UyODZlMmRmYWE4ZC4uZmY5YzljMzVjYzJmNWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXFxuKysrIGIvbmV0L3NtYy9zbWNfcG5ldC5jXFxuQEAgLTMwNCwxMyArMzA0LDE4IEBAIHN0YXRpYyBib29sIHNtY19wbmV0aWRfdmFsaWQoY29uc3QgY2hhciAqcG5ldF9uYW1lLCBjaGFyICpwbmV0aWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi0vKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZS4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihjaGFyICppYl9uYW1lKVxcbisvKlxcbisgKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZSwgcmVzdHJpY3RlZCB0byB0aGUgZGV2aWNlc1xcbisgKiBhY2Nlc3NpYmxlIGZyb20gQG5ldC4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKVxcbiB7XFxuIFxcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldjtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnNtY19pYl9kZXZpY2VzLm11dGV4KTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpYmRldiwgXFx1MDAyNnNtY19pYl9kZXZpY2VzLmxpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoaWJkZXYtXFx1MDAzZWliZGV2LCBuZXQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFzdHJuY21wKGliZGV2LVxcdTAwM2VpYmRldi1cXHUwMDNlbmFtZSwgaWJfbmFtZSxcXG4gXFx0XFx0XFx0ICAgICBzaXplb2YoaWJkZXYtXFx1MDAzZWliZGV2LVxcdTAwM2VuYW1lKSkgfHxcXG4gXFx0XFx0ICAgIChpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZWRldi5wYXJlbnQgXFx1MDAyNlxcdTAwMjZcXG5AQCAtNDA4LDggKzQxMyw4IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2V0aChzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcXG4tXFx0XFx0XFx0ICAgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxcbitzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdCAgIGNoYXIgKmliX25hbWUsIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21jX3BuZXRlbnRyeSAqdG1wX3BlLCAqbmV3X3BlO1xcbiBcXHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJfZGV2O1xcbkBAIC00MTksNyArNDI0LDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcXG4gXFx0Ym9vbCBuZXdfaWJkZXY7XFxuIFxcbiBcXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xcbi1cXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKGliX25hbWUpO1xcbitcXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XFxuIFxcdGlmIChpYl9kZXYpIHtcXG4gXFx0XFx0aWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTtcXG4gXFx0XFx0aWYgKGliZGV2X2FwcGxpZWQpXFxuQEAgLTUxOCw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2VudGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSlcXG4gXFx0XFx0XFx0aWYgKGlicG9ydCBcXHUwMDNjIDEgfHwgaWJwb3J0IFxcdTAwM2UgU01DX01BWF9QT1JUUylcXG4gXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIHN0cmluZywgaWJwb3J0LCBwbmV0X25hbWUpO1xcbitcXHRcXHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XFxuIFxcdFxcdGlmICghcmMpXFxuIFxcdFxcdFxcdG5ld19pYmRldiA9IHRydWU7XFxuIFxcdFxcdGVsc2UgaWYgKHJjICE9IC1FRVhJU1QpXFxuQEAgLTExNzAsNiArMTE3NSw5IEBAIGludCBzbWNfcG5ldGlkX2J5X3RhYmxlX2liKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJfcG9ydClcXG4gXFx0c3RydWN0IHNtY19uZXQgKnNuO1xcbiBcXHRpbnQgcmMgPSAtRU5PRU5UO1xcbiBcXG4rXFx0aWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoc21jaWJkZXYtXFx1MDAzZWliZGV2LCBcXHUwMDI2aW5pdF9uZXQpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuIFxcdC8qIGdldCBwbmV0dGFibGUgZm9yIGluaXQgbmFtZXNwYWNlICovXFxuIFxcdHNuID0gbmV0X2dlbmVyaWMoXFx1MDAyNmluaXRfbmV0LCBzbWNfbmV0X2lkKTtcXG4gXFx0cG5ldHRhYmxlID0gXFx1MDAyNnNuLVxcdTAwM2VwbmV0dGFibGU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXFxuaW5kZXggMDdhZjdmMTVjMWJmNzQuLmE5MWMxNGM0NTAwNmUzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXFxuQEAgLTMsNiArMyw3IEBAIFRFU1RfUFJPR1MgOj0gcnhlX3JwaW5nX2JldHdlZW5fbmV0bnMuc2ggXFxcXFxcbiBcXHRcXHRyeGVfaXB2Ni5zaCBcXFxcXFxuIFxcdFxcdHJ4ZV9zb2NrZXRfd2l0aF9uZXRucy5zaCBcXFxcXFxuIFxcdFxcdHJ4ZV90ZXN0X05FVERFVl9VTlJFR0lTVEVSLnNoIFxcXFxcXG4tXFx0XFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaFxcbitcXHRcXHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoIFxcXFxcXG4rXFx0XFx0cnhlX25ldG5zX25hbWVzLnNoXFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXFxuaW5kZXggNGZmYjgxNGUyNTNiYmQuLmUxZmY1NGVjMGY1NzkwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcXG5AQCAtMSwzICsxLDUgQEBcXG4gQ09ORklHX1RVTlxcbiBDT05GSUdfVkVUSFxcbitDT05GSUdfRFVNTVlcXG4rQ09ORklHX05FVF9OU1xcbiBDT05GSUdfUkRNQV9SWEVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE3ZTU3NzA2ZmRmZjc1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXFxuQEAgLTAsMCArMSwyODIgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjXFxuKyMgRXhlcmNpc2UgUkRNQSBkZXZpY2UgbmFtZSBoYW5kbGluZyBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxcbitcXG4rc291cmNlIFxcXCIkKGRpcm5hbWUgXFxcIiQwXFxcIikvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxcXCJcXG4rXFxuK05BTUVfUFJFRklYPVxcXCJyeGVfbmV0bnNfbmFtZXNfJCRcXFwiXFxuK05FVERFVl9QUkVGSVg9XFxcInJ4biQkXFxcIlxcbitOUzE9XFxcIiR7TkFNRV9QUkVGSVh9bnMxXFxcIlxcbitOUzI9XFxcIiR7TkFNRV9QUkVGSVh9bnMyXFxcIlxcbitSWEVfQT1cXFwiJHtOQU1FX1BSRUZJWH1yeGVfYVxcXCJcXG4rUlhFX0I9XFxcIiR7TkFNRV9QUkVGSVh9cnhlX2JcXFwiXFxuK1JYRV9TQU1FPVxcXCIke05BTUVfUFJFRklYfXJ4ZV9zYW1lXFxcIlxcbitSWEVfTkVXPVxcXCIke05BTUVfUFJFRklYfXJ4ZV9uZXdcXFwiXFxuK0RVTU1ZX0E9XFxcIiR7TkVUREVWX1BSRUZJWH1hXFxcIlxcbitEVU1NWV9CPVxcXCIke05FVERFVl9QUkVGSVh9YlxcXCJcXG4rT0xEX01PREU9XFxcIlxcXCJcXG4rTU9ERV9DSEFOR0VEPTBcXG4rTU9EUz0oXFxcImR1bW15XFxcIiBcXFwicmRtYV9yeGVcXFwiKVxcbitURVNUX1NBTUVfTkFNRVM9XFxcInNhbWUgUkRNQSBkZXZpY2UgbmFtZSBjYW4gZXhpc3QgaW4gdHdvIG5ldCBuYW1lc3BhY2VzXFxcIlxcbitURVNUX01PVkVfQ09ORkxJQ1Q9XFxcIm1vdmUgd2l0aG91dCByZW5hbWUgZmFpbHMgb24gZGVzdGluYXRpb24gbmFtZSBjb25mbGljdFxcXCJcXG4rVEVTVF9NT1ZFX1JFTkFNRT1cXFwibW92ZSB0aGVuIHJlbmFtZSBzdWNjZWVkc1xcXCJcXG4rVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRT1cXFwibW92ZSB3aXRoIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBuYW1lIHN1Y2NlZWRzXFxcIlxcbitURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRT1cXFwic2FtZS1uZXRucyByZW5hbWUgcmVqZWN0cyBkdXBsaWNhdGUgbmFtZVxcXCJcXG4rVEVTVF9URUFSRE9XTl9SRVRVUk49XFxcIm5ldG5zIGRlbGV0ZSByZXR1cm5zIGRldmljZSB0byBpbml0X25ldCBhbmQgcmVuYW1lcyBvbiBjb25mbGljdFxcXCJcXG4rXFxuK2tzZnRfc2tpcCgpXFxuK3tcXG4rXFx0a3RhcF9za2lwX2FsbCBcXFwiJCpcXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK31cXG4rXFxuK2ZhaWwoKVxcbit7XFxuK1xcdGt0YXBfZXhpdF9mYWlsX21zZyBcXFwiJCpcXFwiXFxuK31cXG4rXFxuK25lZWRfY21kKClcXG4re1xcbitcXHRjb21tYW5kIC12IFxcXCIkMVxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIHx8IGtzZnRfc2tpcCBcXFwibWlzc2luZyBjb21tYW5kOiAkMVxcXCJcXG4rfVxcbitcXG4rcmRtYV9ucygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9JDFcXG4rXFxuK1xcdHNoaWZ0XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc1xcXCIgcmRtYSBcXFwiJEBcXFwiXFxuK31cXG4rXFxuK3JkbWFfZGV2X2V4aXN0cygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9JDFcXG4rXFx0bG9jYWwgZGV2PSQyXFxuK1xcbitcXHRpZiBbIC1uIFxcXCIkbnNcXFwiIF07IHRoZW5cXG4rXFx0XFx0cmRtYV9ucyBcXFwiJG5zXFxcIiBkZXYgc2hvdyBcXFwiJGRldlxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuK1xcdGVsc2VcXG4rXFx0XFx0cmRtYSBkZXYgc2hvdyBcXFwiJGRldlxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuK1xcdGZpXFxuK31cXG4rXFxuK2FkZF9kdW1teSgpXFxuK3tcXG4rXFx0bG9jYWwgbmV0ZGV2PSQxXFxuK1xcbitcXHRpcCBsaW5rIGFkZCBcXFwiJG5ldGRldlxcXCIgdHlwZSBkdW1teSB8fCByZXR1cm4gMVxcbitcXHRpcCBsaW5rIHNldCBcXFwiJG5ldGRldlxcXCIgdXAgfHwgcmV0dXJuIDFcXG4rfVxcbitcXG4rYWRkX3J4ZSgpXFxuK3tcXG4rXFx0bG9jYWwgZGV2PSQxXFxuK1xcdGxvY2FsIG5ldGRldj0kMlxcbitcXG4rXFx0cmRtYSBsaW5rIGFkZCBcXFwiJGRldlxcXCIgdHlwZSByeGUgbmV0ZGV2IFxcXCIkbmV0ZGV2XFxcIlxcbit9XFxuK1xcbityZG1hX2Rldl9vbl9uZXRkZXYoKVxcbit7XFxuK1xcdGxvY2FsIG5ldGRldj0kMVxcbitcXG4rXFx0cmRtYSBsaW5rIHNob3cgMlxcdTAwM2UvZGV2L251bGwgfCBhd2sgLXYgd2FudD1cXFwiJG5ldGRldlxcXCIgJ1xcbitcXHRcXHR7XFxuK1xcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBORjsgaSsrKVxcbitcXHRcXHRcXHRcXHRpZiAoJGkgPT0gXFxcIm5ldGRldlxcXCIgXFx1MDAyNlxcdTAwMjYgJChpICsgMSkgPT0gd2FudCkge1xcbitcXHRcXHRcXHRcXHRcXHRkZXYgPSAkMlxcbitcXHRcXHRcXHRcXHRcXHRzdWIoL1xcXFwvLiovLCBcXFwiXFxcIiwgZGV2KVxcbitcXHRcXHRcXHRcXHRcXHRwcmludCBkZXZcXG4rXFx0XFx0XFx0XFx0XFx0ZXhpdFxcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdH0nXFxuK31cXG4rXFxuK3dhaXRfcmRtYV9kZXZfb25fbmV0ZGV2KClcXG4re1xcbitcXHRsb2NhbCBuZXRkZXY9JDFcXG4rXFx0bG9jYWwgZGV2XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRkZXY9JChyZG1hX2Rldl9vbl9uZXRkZXYgXFxcIiRuZXRkZXZcXFwiKVxcbitcXHRcXHRpZiBbIC1uIFxcXCIkZGV2XFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdGVjaG8gXFxcIiRkZXZcXFwiXFxuK1xcdFxcdFxcdHJldHVybiAwXFxuK1xcdFxcdGZpXFxuK1xcdFxcdHNsZWVwIDAuMVxcbitcXHRkb25lXFxuK1xcbitcXHRyZXR1cm4gMVxcbit9XFxuK1xcbitzZXR1cF9kZXZzKClcXG4re1xcbitcXHRjbGVhbnVwX2RldnNcXG4rXFxuK1xcdGFkZF9kdW1teSBcXFwiJERVTU1ZX0FcXFwiIHx8IHJldHVybiAxXFxuK1xcdGFkZF9kdW1teSBcXFwiJERVTU1ZX0JcXFwiIHx8IHJldHVybiAxXFxuK1xcbitcXHRhZGRfcnhlIFxcXCIkUlhFX0FcXFwiIFxcXCIkRFVNTVlfQVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0YWRkX3J4ZSBcXFwiJFJYRV9CXFxcIiBcXFwiJERVTU1ZX0JcXFwiIHx8IHJldHVybiAxXFxuK31cXG4rXFxuK2NsZWFudXBfZGV2cygpXFxuK3tcXG4rXFx0aXAgbGluayBkZWwgXFxcIiREVU1NWV9BXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpcCBsaW5rIGRlbCBcXFwiJERVTU1ZX0JcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK31cXG4rXFxuK3NldHVwKClcXG4re1xcbitcXHRPTERfTU9ERT0kKHJkbWEgc3lzdGVtIHNob3cgMlxcdTAwM2UvZGV2L251bGwgfFxcbitcXHRcXHQgICBzZWQgLW4gJ3MvLipuZXRucyBcXFxcKFteIF0qXFxcXCkuKi9cXFxcMS9wJylcXG4rXFx0WyAtbiBcXFwiJE9MRF9NT0RFXFxcIiBdIHx8IGtzZnRfc2tpcCBcXFwiZmFpbGVkIHRvIHJlYWQgUkRNQSBuZXRucyBtb2RlXFxcIlxcbitcXG4rXFx0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHxcXG4rXFx0XFx0a3NmdF9za2lwIFxcXCJyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcXFwiXFxuK1xcdE1PREVfQ0hBTkdFRD0xXFxuK1xcbitcXHRpcCBuZXRucyBhZGQgXFxcIiROUzFcXFwiIHx8IHJldHVybiAxXFxuK1xcdGlwIG5ldG5zIGFkZCBcXFwiJE5TMlxcXCIgfHwgcmV0dXJuIDFcXG4rfVxcbitcXG4rY2xlYW51cCgpXFxuK3tcXG4rXFx0Y2xlYW51cF9kZXZzXFxuK1xcbitcXHRpcCBuZXRucyBkZWwgXFxcIiROUzFcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJE5TMlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFxuK1xcdGlmIFsgXFxcIiRNT0RFX0NIQU5HRURcXFwiIC1lcSAxIF07IHRoZW5cXG4rXFx0XFx0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIFxcXCIkT0xEX01PREVcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGZpXFxuK1xcbitcXHRmb3IgbSBpbiBcXFwiJHtNT0RTW0BdfVxcXCI7IGRvXFxuK1xcdFxcdG1vZHByb2JlIC1yIFxcXCIkbVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZG9uZVxcbit9XFxuK1xcbityZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lKClcXG4re1xcbitcXHRyZG1hIGRldiBoZWxwIDJcXHUwMDNlXFx1MDAyNjEgfCBncmVwIC1FcSAnbmV0bnMgLipuYW1lfG5hbWUgLipuZXRucydcXG4rfVxcbitcXG4rWyBcXFwiJChpZCAtdSlcXFwiIC1lcSAwIF0gfHwga3NmdF9za2lwIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbituZWVkX2NtZCBpcFxcbituZWVkX2NtZCByZG1hXFxuK25lZWRfY21kIG1vZHByb2JlXFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rZm9yIG0gaW4gXFxcIiR7TU9EU1tAXX1cXFwiOyBkb1xcbitcXHRtb2RpbmZvIFxcXCIkbVxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIHx8IGtzZnRfc2tpcCBcXFwibW9kdWxlICRtIG5vdCBmb3VuZFxcXCJcXG4rXFx0bW9kcHJvYmUgXFxcIiRtXFxcIiB8fCBmYWlsIFxcXCJmYWlsZWQgdG8gbG9hZCAkbVxcXCJcXG4rZG9uZVxcbitcXG4rc2V0dXAgfHwgZmFpbCBcXFwiZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlc1xcXCJcXG4rXFxuK2t0YXBfcHJpbnRfaGVhZGVyXFxuK2t0YXBfc2V0X3BsYW4gN1xcbitcXG4raWYgc2V0dXBfZGV2cyBcXHUwMDI2XFx1MDAyNlxcbisgICByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzFcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfbnMgXFxcIiROUzFcXFwiIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICByZG1hIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmV0bnMgXFxcIiROUzJcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICByZG1hX2Rldl9leGlzdHMgXFxcIiROUzFcXFwiIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMlxcXCIgXFxcIiRSWEVfU0FNRVxcXCI7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX1NBTUVfTkFNRVNcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX1NBTUVfTkFNRVNcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzIHx8XFxuKyAgICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5ldG5zIFxcXCIkTlMxXFxcIiB8fFxcbisgICAhIHJkbWFfbnMgXFxcIiROUzFcXFwiIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiB8fFxcbisgICAhIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgfHxcXG4rICAgISByZG1hX25zIFxcXCIkTlMyXFxcIiBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5hbWUgXFxcIiRSWEVfU0FNRVxcXCI7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2VsaWYgcmRtYV9ucyBcXFwiJE5TMVxcXCIgZGV2IHNldCBcXFwiJFJYRV9TQU1FXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXFxcIlxcbitlbGlmIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMVxcXCIgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgICByZG1hX2Rldl9leGlzdHMgXFxcIiROUzJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXFxcIlxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfTU9WRV9SRU5BTUVcXFwiXFxuK2VsaWYgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICAgIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9ORVdcXFwiOyB0aGVuXFxuK1xcdGlmIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMlxcXCIgXFxcIiRSWEVfTkVXXFxcIiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcXFwiXFxcIiBcXFwiJFJYRV9BXFxcIjsgdGhlblxcbitcXHRcXHRrdGFwX3Rlc3RfcGFzcyBcXFwiJFRFU1RfTU9WRV9SRU5BTUVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfUkVOQU1FXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX1JFTkFNRVxcXCJcXG4rZmlcXG4rY2xlYW51cF9kZXZzXFxuK1xcbitpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3NraXAgXFxcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXFxcIlxcbitlbGlmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK2VsaWYgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiBuYW1lIFxcXCIkUlhFX05FV1xcXCI7IHRoZW5cXG4rXFx0aWYgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9ORVdcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICEgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX0FcXFwiOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK1xcdGZpXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitlbGlmIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgICAgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5hbWUgXFxcIiRSWEVfTkVXXFxcIjsgdGhlblxcbitcXHRpZiByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9ORVdcXFwiIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitcXHRlbGlmIHJkbWFfZGV2X2V4aXN0cyBcXFwiXFxcIiBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiXFxcIiBcXFwiJFJYRV9ORVdcXFwiOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVxcXCJcXG4rXFx0ZmlcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgc2V0dXBfZGV2czsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitlbGlmICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5hbWUgXFxcIiRSWEVfU0FNRVxcXCIgfHxcXG4rICAgICAhIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgfHxcXG4rICAgICAhIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiB8fFxcbisgICAgICEgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9TQU1FXFxcIjsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitlbHNlXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJE5TMlxcXCJcXG4rXFx0cmV0dXJuZWQ9JCh3YWl0X3JkbWFfZGV2X29uX25ldGRldiBcXFwiJERVTU1ZX0JcXFwiKVxcbitcXHRrdGFwX3ByaW50X21zZyBcXFwiZGV2aWNlIHJldHVybmVkIHRvIGluaXRfbmV0IGFzICcke3JldHVybmVkOi1cXHUwMDNjbWlzc2luZ1xcdTAwM2V9J1xcXCJcXG4rXFx0aWYgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgIFsgLW4gXFxcIiRyZXR1cm5lZFxcXCIgXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICBbIFxcXCIkcmV0dXJuZWRcXFwiICE9IFxcXCIkUlhFX1NBTUVcXFwiIF0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgWyBcXFwiJHtyZXR1cm5lZCNpYmRldn1cXFwiICE9IFxcXCIkcmV0dXJuZWRcXFwiIF07IHRoZW5cXG4rXFx0XFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX1RFQVJET1dOX1JFVFVSTlxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitcXHRmaVxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2t0YXBfZmluaXNoZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6MjcuNTAwNjU0NjQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM3NzI4NTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EX1NSUFwiLFxuICAgIFwiUkRNQV9SWEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfZGV2aWNlX3Zpc2libGVcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgICBcInNycF9uZXRfbmFtZXNwYWNlXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDc2YWU5ZjdjNTU5MzVmYjFjMzhiODk4NmQ5MDVkNGVlZDU1OWY2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDAzOjU1OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuQEAgLTEyLDYgKzEyLDEwIEBAIERlc2NyaXB0aW9uOiBcdEludGVyZmFjZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBSRE1BLWNhYmxlIEhDQXMgaW4gcmVzcGVjdCB0b1xuIFx0XHRmb3IgdGhpcyBIQ0EgaGFzIHRvIGJlIGNyZWF0ZWQ6XG4gXHRcdG1rZGlyIC1wIC9jb25maWcvcmRtYV9jbS9cdTAwM2NoY2FcdTAwM2VcbiBcbitcdFx0Tm90ZTogY29uZmlnZnMgaGFzIG5vIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQsIHNvIHRoaXNcbitcdFx0aW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW5cbitcdFx0ZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcyAocG9zc2libGUgaW4gZXhjbHVzaXZlIG5ldG5zIG1vZGUpLlxuK1xuIFxuIFdoYXQ6IFx0XHQvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlL3BvcnRzL1x1MDAzY3BvcnQtbnVtXHUwMDNlL2RlZmF1bHRfcm9jZV9tb2RlXG4gRGF0ZTogXHRcdE5vdmVtYmVyIDI5LCAyMDE1XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uNDUyM2MxODg0ZDY3MTUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI3NTIsNiArMjc1MiwxMyBAQCBSRE1BXG4gVGhlIFwicmRtYVwiIGNvbnRyb2xsZXIgcmVndWxhdGVzIHRoZSBkaXN0cmlidXRpb24gYW5kIGFjY291bnRpbmcgb2ZcbiBSRE1BIHJlc291cmNlcy5cbiBcbitXaGVuIFJETUEgZGV2aWNlcyBhcmUgaXNvbGF0ZWQgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIChleGNsdXNpdmUgbW9kZSksXG4rZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgb25seSB3aXRoaW4gYSBuZXR3b3JrIG5hbWVzcGFjZS4gVGhlIGRldmljZSBsaW5lc1xuK2JlbG93IGFyZSB0aGVyZWZvcmUgc2NvcGVkIHRvIHRoZSByZWFkaW5nIG9yIHdyaXRpbmcgcHJvY2VzcydzIG5ldHdvcmtcbituYW1lc3BhY2U6IG9ubHkgZGV2aWNlcyBhY2Nlc3NpYmxlIGZyb20gdGhhdCBuYW1lc3BhY2UgYXJlIGxpc3RlZCwgYW5kIGFcbitsaW1pdCBpcyBhcHBsaWVkIHRvIHRoZSBkZXZpY2Ugb2YgdGhhdCBuYW1lIGluIHRoYXQgbmFtZXNwYWNlLiBDb25maWd1cmVcbitsaW1pdHMgZnJvbSB0aGUgc2FtZSBuZXR3b3JrIG5hbWVzcGFjZSBhcyB0aGUgd29ya2xvYWRzLlxuK1xuIFJETUEgSW50ZXJmYWNlIEZpbGVzXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG5pbmRleCAxZjAzN2ZlMDE0NTBlZi4uN2EyMTZlZDQ1MTk5YmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbkBAIC0xNyw2ICsxNyw4IEBAXG4gdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiB7XG4gXHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5hbWUgPSBkZXZpY2UtXHUwMDNlbmFtZTtcbitcdGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0bnNfc2hhcmVkID0gaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM7XG4rXHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0LCByZG1hX2Rldl9uZXQoZGV2aWNlKSk7XG4gXHRyZG1hY2dfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNmRldmljZS1cdTAwM2VjZ19kZXZpY2UpO1xuIH1cbiBcbkBAIC0zNCw2ICszNiwxNiBAQCB2b2lkIGliX2RldmljZV91bnJlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4gXHRyZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2ZGV2aWNlLVx1MDAzZWNnX2RldmljZSk7XG4gfVxuIFxuK3ZvaWQgaWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5ldCwgbmV0KTtcbit9XG4rXG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZClcbit7XG4rXHRXUklURV9PTkNFKGRldmljZS1cdTAwM2VjZ19kZXZpY2UubmV0bnNfc2hhcmVkLCBzaGFyZWQpO1xuK31cbitcbiBpbnQgaWJfcmRtYWNnX3RyeV9jaGFyZ2Uoc3RydWN0IGliX3JkbWFjZ19vYmplY3QgKmNnX29iaixcbiBcdFx0XHQgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdCBlbnVtIHJkbWFjZ19yZXNvdXJjZV90eXBlIHJlc291cmNlX2luZGV4KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbmluZGV4IDg5MWU1MmFmYjhmNGJhLi5jMzg5ZDRlMzdiNmJjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuQEAgLTY1LDYgKzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwLCBncm91cCk7XG4gfVxuIFxuKy8qXG4rICogY29uZmlnZnMgaXMgbm90IG5ldCBuYW1lc3BhY2UgYXdhcmUsIHNvIGEgbmFtZSBzaGFyZWQgYnkgZGV2aWNlcyBpblxuKyAqIGRpZmZlcmVudCBuYW1lc3BhY2VzIHJlc29sdmVzIHRvIHRoZSBmaXJzdCBtYXRjaCBoZXJlLlxuKyAqL1xuIHN0YXRpYyBib29sIGZpbHRlcl9ieV9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliX2Rldiwgdm9pZCAqY29va2llKVxuIHtcbiBcdHJldHVybiAhc3RyY21wKGRldl9uYW1lKFx1MDAyNmliX2Rldi1cdTAwM2VkZXYpLCBjb29raWUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbmluZGV4IDE5MTA0YzU0MmIyNzBkLi45Y2Q2NzFlMmRiMjA0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuQEAgLTE1Niw2ICsxNTYsOCBAQCB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50X2NsaWVudHMoc3RydWN0IGliX2V2ZW50ICpldmVudCk7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfUkRNQVxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgaWJfZGV2aWNlX3VucmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7XG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBpYl9kZXZpY2VfcmRtYWNnX3NldF9uZXRuc19zaGFyZWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBib29sIHNoYXJlZCk7XG4gXG4gaW50IGliX3JkbWFjZ190cnlfY2hhcmdlKHN0cnVjdCBpYl9yZG1hY2dfb2JqZWN0ICpjZ19vYmosXG4gXHRcdFx0IHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbkBAIC0xNzMsNiArMTc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpYl9kZXZpY2VfdW5yZWdpc3Rlcl9yZG1hY2coc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSxcbitcdFx0XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdFx0ICAgICBib29sIHNoYXJlZClcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IGliX3JkbWFjZ190cnlfY2hhcmdlKHN0cnVjdCBpYl9yZG1hY2dfb2JqZWN0ICpjZ19vYmosXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0ICAgICAgIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUgcmVzb3VyY2VfaW5kZXgpXG5AQCAtMzU2LDcgKzM2OCw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG4gXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcbitcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XG4gdm9pZCByZG1hX25sX25ldF9leGl0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbmluZGV4IGI4MTkzZTA3N2E3NDZmLi5jZmZiMGRlMWMwMDE2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xuIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlO1xuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxuLVx0XHQgXCJTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVwiKTtcbitcdFx0IFwiU2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXCIpO1xuIC8qKlxuICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkXG4gICpcdFx0XHQgICAgIGZyb20gYSBzcGVjaWZpZWQgbmV0IG5hbWVzcGFjZSBvciBub3QuXG5AQCAtMjY4LDcgKzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCk7XG4rXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKTtcbiBcbiAvKiBQb2ludGVyIHRvIHRoZSBSQ1UgaGVhZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGliX3BvcnRfZGF0YSBhcnJheSAqL1xuIHN0cnVjdCBpYl9wb3J0X2RhdGFfcmN1IHtcbkBAIC0zNTEsMTMgKzM1MiwxNSBAQCB2b2lkIGliX2RldmljZV9wdXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdHhhX2Zvcl9lYWNoIChcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4rXHRcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4gXHRcdFx0cmV0dXJuIGRldmljZTtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTM5NSw3ICszOTgsNyBAQCBpbnQgaWJfZGV2aWNlX3JlbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHtcbitcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lLCByZG1hX2Rldl9uZXQoaWJkZXYpKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG5AQCAtNDM1LDcgKzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuKy8qXG4rICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAnJWQnIHN0eWxlIEBuYW1lIHBhdHRlcm4gd2l0aGluIG5ldCBuYW1lc3BhY2VcbisgKiBAbmV0LiBSZXR1cm5zIHRoZSBpbmRleCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8uIFRoZSBjYWxsZXIgYnVpbGRzXG4rICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cbisgKi9cbitzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuQEAgLTQ0OCw2ICs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR4YV9mb3JfZWFjaCAoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSkge1xuIFx0XHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xuIFxuK1x0XHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzc2NhbmYoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksIG5hbWUsIFx1MDAyNmkpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSBJTlRfTUFYKVxuQEAgLTQ2MiwxNSArNDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdH1cbiBcbiBcdHJjID0gaWRhX2FsbG9jKFx1MDAyNmludXNlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyYyA9IGRldl9zZXRfbmFtZShcdTAwMjZpYmRldi1cdTAwM2VkZXYsIG5hbWUsIHJjKTtcbiBvdXQ6XG4gXHRpZGFfZGVzdHJveShcdTAwMjZpbnVzZSk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIF9fYWxsb2NfbmFtZV9pZChuZXQsIG5hbWUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aW50IGlkO1xuK1xuK1x0aWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpO1xuK1x0aWYgKGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaWQ7XG4rXG4rXHRyZXR1cm4gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgaWQpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcbkBAIC0xMDk0LDYgKzExMTcsNyBAQCBzdGF0aWMgaW50IGFkZF9hbGxfY29tcGF0X2RldnModm9pZClcbiBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcbiB7XG4gXHRzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0O1xuK1x0c3RydWN0IGliX2RldmljZSAqZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTExMTYsNiArMTE0MCwxMiBAQCBpbnQgcmRtYV9jb21wYXRkZXZfc2V0KHU4IGVuYWJsZSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4rXHQvKiBLZWVwIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UncyByZG1hIGNncm91cCB2aXNpYmlsaXR5IGluIHN5bmMuICovXG4rXHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHR4YV9mb3JfZWFjaF9tYXJrZWQoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldiwgREVWSUNFX1JFR0lTVEVSRUQpXG4rXHRcdGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChkZXYsIGVuYWJsZSk7XG4rXHR1cF9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1xuIFx0aWYgKGVuYWJsZSlcbiBcdFx0cmV0ID0gYWRkX2FsbF9jb21wYXRfZGV2cygpO1xuIFx0ZWxzZVxuQEAgLTExNTEsOCArMTE4MSwxNyBAQCBzdGF0aWMgdm9pZCByZG1hX2Rldl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSByZWFsIGRldmljZSBpcyBpbiB0aGUgTlMgdGhlbiBtb3ZlIGl0IGJhY2sgdG8gaW5pdC5cbitcdFx0ICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0XG4rXHRcdCAqIGNhbm5vdCBtYWtlIHRoZSB0ZWFyZG93biBtb3ZlIGZhaWwuXG4gXHRcdCAqL1xuLVx0XHRyZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFx1MDAyNmluaXRfbmV0KTtcbitcdFx0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcdTAwMjZkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XG4rXHRcdFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCxcbitcdFx0XHRcdFx0XHQgICAgTlVMTCwgXCJpYmRldiVkXCIpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRXQVJOKDEsXG4rXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIG1vdmUgUkRNQSBkZXZpY2UgJXMgdG8gaW5pdF9uZXQgb24gbmV0bnMgZXhpdDogJWRcXG5cIixcbitcdFx0XHRcdCAgICAgZGV2X25hbWUoXHUwMDI2ZGV2LVx1MDAzZWRldiksIHJldCk7XG4rXHRcdH1cbiBcbiBcdFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiBcdFx0ZG93bl9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuQEAgLTEyMDYsNyArMTI0NSw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuIC8qXG4tICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhpcyBpc1xuKyAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoZSBkZXZpY2VcbisgKiBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIG5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0by4gVGhpcyBpc1xuICAqIHVuZG9uZSBieSBpYl9kZWFsbG9jX2RldmljZS5cbiAgKi9cbiBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbkBAIC0xMjIzLDcgKzEyNjMsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSkge1xuK1x0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpLFxuK1x0XHRcdFx0ICAgIHJkbWFfZGV2X25ldChkZXZpY2UpKSkge1xuIFx0XHRyZXQgPSAtRU5GSUxFO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xMzIyLDYgKzEzNjMsNyBAQCBzdGF0aWMgaW50IGVuYWJsZV9kZXZpY2VfYW5kX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4gXHQgKi9cbiBcdHJlZmNvdW50X3NldChcdTAwMjZkZXZpY2UtXHUwMDNlcmVmY291bnQsIDIpO1xuIFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcdGliX2RldmljZV9yZG1hY2dfc2V0X25ldG5zX3NoYXJlZChkZXZpY2UsIGliX2RldmljZXNfc2hhcmVkX25ldG5zKTtcbiBcdHhhX3NldF9tYXJrKFx1MDAyNmRldmljZXMsIGRldmljZS1cdTAwM2VpbmRleCwgREVWSUNFX1JFR0lTVEVSRUQpO1xuIFxuIFx0LypcbkBAIC0xMzg4LDggKzE0MzAsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiAvKipcbiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlXG4gICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbFxuLSAqIFx0ICBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGUgcGFzc2VkIGRldmljZSBuYW1lLlxuKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXlcbisgKlx0ICBpbmNsdWRlIGEgJyUnIHdoaWNoIHdpbGwgY2F1c2UgYSB1bmlxdWUgaW5kZXggdG8gYmUgYWRkZWQgdG8gdGhlXG4rICpcdCAgcGFzc2VkIGRldmljZSBuYW1lLlxuICAqIEBkbWFfZGV2aWNlOiBwb2ludGVyIHRvIGEgRE1BLWNhcGFibGUgZGV2aWNlLiBJZiAlTlVMTCwgdGhlbiB0aGUgSUJcbiAgKlx0ICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxlciBzaG91bGQgZnVsbHlcbiAgKlx0XHRzZXR1cCB0aGUgaWJkZXYgZm9yIERNQS4gVGhpcyB1c3VhbGx5IG1lYW5zIHVzaW5nIGRtYV92aXJ0X29wcy5cbkBAIC0xNjcwLDE0ICsxNzEzLDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuIFxuK3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4rXHRcdGlmIChkZXZpY2UgIT0gc2tpcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLypcbisgKiBDaG9vc2UgdGhlIG5hbWUgQGRldmljZSBzaG91bGQgdXNlIGluIG5ldCBuYW1lc3BhY2UgQG5ldC4gQHJlcXVlc3RlZF9uYW1lXG4rICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWVcbisgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJyVkJyBAZmFsbGJhY2tfcGF0dGVybiBmb3IgdGVhcmRvd24uIFRoZVxuKyAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbS5cbisgKi9cbitzdGF0aWMgaW50IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKm5ldCxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuLFxuK1x0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxuK3tcbitcdGludCBpZDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXG4rXHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbitcdFx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSkpIHtcbitcdFx0XHQqbmV3X25hbWUgPSByZXF1ZXN0ZWRfbmFtZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbitcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4rXHRcdCpuZXdfbmFtZSA9IGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghZmFsbGJhY2tfcGF0dGVybilcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFwiaWJkZXYldVwiLCBkZXZpY2UtXHUwMDNlaW5kZXgpO1xuK1x0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBidWYpKSB7XG4rXHRcdCpuZXdfbmFtZSA9IGJ1ZjtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7XG4rXHRpZiAoaWQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBpZDtcbitcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgZmFsbGJhY2tfcGF0dGVybiwgaWQpO1xuK1x0Km5ld19uYW1lID0gYnVmO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogVGhlIGNhbGxlciBtdXN0IHBhc3MgaW4gYSBkZXZpY2UgdGhhdCBoYXMgdGhlIGtyZWYgaGVsZCBhbmQgdGhlIHJlZmNvdW50XG4gICogcmVsZWFzZWQuIElmIHRoZSBkZXZpY2UgaXMgaW4gY3VyX25ldCBhbmQgc3RpbGwgcmVnaXN0ZXJlZCB0aGVuIGl0IGlzIG1vdmVkXG4gICogaW50byBuZXQuXG4rICpcbisgKiBOYW1pbmcgcnVsZXMgYXJlIGhhbmRsZWQgYnkgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKCkuXG4gICovXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldClcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pXG4ge1xuK1x0Y2hhciBidWZbSUJfREVWSUNFX05BTUVfTUFYXTtcbitcdGNvbnN0IGNoYXIgKm5ld19uYW1lO1xuIFx0aW50IHJldDIgPSAtRUlOVkFMO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNjk0LDMwICsxODA2LDY4IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRpZiAoIWZhbGxiYWNrX3BhdHRlcm4pIHtcbitcdFx0LypcbitcdFx0ICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZ1xuK1x0XHQgKiBkb3duLCBzbyBhIGRvb21lZCB1c2VyIG1vdmUgZG9lcyBub3QgZGlzYWJsZSBhIGxpdmUgZGV2aWNlLlxuK1x0XHQgKi9cbitcdFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcdFx0cmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZixcbitcdFx0XHRcdFx0ICAgICAgIHNpemVvZihidWYpLCBcdTAwMjZuZXdfbmFtZSk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldi5rb2JqLCBLT0JKX1JFTU9WRSk7XG4gXHRkaXNhYmxlX2RldmljZShkZXZpY2UpO1xuIFxuIFx0Lypcbi1cdCAqIEF0IHRoaXMgcG9pbnQgbm8gb25lIGNhbiBiZSB1c2luZyB0aGUgZGV2aWNlLCBzbyBpdCBpcyBzYWZlIHRvXG4tXHQgKiBjaGFuZ2UgdGhlIG5hbWVzcGFjZS5cbitcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXG4rXHQgKiBub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGRpc2FibGVkLCBjbG9zaW5nIHJhY2VzIHdpdGggYSBjb25jdXJyZW50XG4rXHQgKiByZWdpc3RyYXRpb24gb3IgcmVuYW1lLCB0aGVuIHB1Ymxpc2ggdGhlIG5ldyBuYW1lc3BhY2UgYXQgdGhlIHN5c2ZzXG4rXHQgKiBsZXZlbC5cbiBcdCAqL1xuLVx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbitcdGRvd25fd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHRyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2bmV3X25hbWUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xuK1x0XHRcdFdBUk4oMSxcbitcdFx0XHQgICAgIFwiJXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXFxuXCIsXG4rXHRcdFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcbitcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuK1x0XHRcdGliX2RldmljZV9yZG1hY2dfY2hhbmdlX25ldG5zKGRldmljZSwgbmV0KTtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHR9XG4rXHRcdGdvdG8gcmVuYW1lX2RvbmU7XG4rXHR9XG4gXG4tXHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4tXHQvKlxuLVx0ICogQ3VycmVudGx5IHJkbWEgZGV2aWNlcyBhcmUgc3lzdGVtIHdpZGUgdW5pcXVlLiBTbyB0aGUgZGV2aWNlIG5hbWVcbi1cdCAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZVxuLVx0ICogYXQgdGhlIHN5c2ZzIGxldmVsLlxuLVx0ICovXG4tXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKTtcbi1cdHVwX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuK1x0aWJfZGV2aWNlX3JkbWFjZ19jaGFuZ2VfbmV0bnMoZGV2aWNlLCBuZXQpO1xuK1x0cmV0ID0gZGV2aWNlX3JlbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LCBuZXdfbmFtZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdGRldl93YXJuKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsXG4tXHRcdFx0IFwiJXM6IENvdWxkbid0IHJlbmFtZSBkZXZpY2UgYWZ0ZXIgbmFtZXNwYWNlIGNoYW5nZVxcblwiLFxuLVx0XHRcdCBfX2Z1bmNfXyk7XG4tXHRcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xuLVx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbitcdFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcbitcdFx0XHRXQVJOKDEsXG4rXHRcdFx0ICAgICBcIiVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcblwiLFxuK1x0XHRcdCAgICAgX19mdW5jX18sIHJldCk7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LFxuK1x0XHRcdFx0IFwiJXM6IENvdWxkbid0IHJlbmFtZSBkZXZpY2UgYWZ0ZXIgbmFtZXNwYWNlIGNoYW5nZVxcblwiLFxuK1x0XHRcdFx0IF9fZnVuY19fKTtcbitcdFx0XHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cbitcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbitcdFx0XHRpYl9kZXZpY2VfcmRtYWNnX2NoYW5nZV9uZXRucyhkZXZpY2UsIGN1cl9uZXQpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRzdHJzY3B5KGRldmljZS1cdTAwM2VuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSxcbitcdFx0XHRJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuIFx0fVxuK3JlbmFtZV9kb25lOlxuK1x0dXBfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4gXG4gXHRyZXQyID0gZW5hYmxlX2RldmljZV9hbmRfZ2V0KGRldmljZSk7XG4gXHRpZiAocmV0Mikge1xuQEAgLTE3NDAsMzYgKzE4OTAsNzIgQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuIH1cbiBcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpXG4rXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IHJldDtcbiBcbiBcdG5ldCA9IGdldF9uZXRfbnNfYnlfZmQobnNfZmQpO1xuIFx0aWYgKElTX0VSUihuZXQpKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXCIpO1xuIFx0XHRyZXQgPSBQVFJfRVJSKG5ldCk7XG4gXHRcdGdvdG8gbmV0X2VycjtcbiBcdH1cbiBcbiBcdGlmICghbmV0bGlua19uc19jYXBhYmxlKHNrYiwgbmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJNaXNzaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCIpO1xuIFx0XHRyZXQgPSAtRVBFUk07XG4gXHRcdGdvdG8gbnNfZXJyO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIE1vdmluZyBhIGRldmljZSB0byB0aGUgbmFtZXNwYWNlIGl0IGFscmVhZHkgbGl2ZXMgaW4gaXMgYSBuby1vcDsgYVxuK1x0ICogc3VwcGxpZWQgbmFtZSBzdGlsbCByZW5hbWVzIGl0IGluIHBsYWNlLlxuK1x0ICovXG4rXHRpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmRldi1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0KSkpIHtcbitcdFx0cmV0ID0gbmFtZSA/IGliX2RldmljZV9yZW5hbWUoZGV2LCBuYW1lKSA6IDA7XG4rXG4rXHRcdGlmIChyZXQgPT0gLUVFWElTVClcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcIik7XG4rXHRcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIlVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbitcdFx0Z290byBuc19lcnI7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogQWxsIHRoZSBpYl9jbGllbnRzLCBpbmNsdWRpbmcgdXZlcmJzLCBhcmUgcmVzZXQgd2hlbiB0aGUgbmFtZXNwYWNlIGlzXG4gXHQgKiBjaGFuZ2VkIGFuZCB0aGlzIGNhbm5vdCBiZSBibG9ja2VkIHdhaXRpbmcgZm9yIHVzZXJzcGFjZSB0byBkb1xuIFx0ICogc29tZXRoaW5nLCBzbyBkaXNhc3NvY2lhdGlvbiBpcyBtYW5kYXRvcnkuXG4gXHQgKi9cbi1cdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQgfHwgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHtcbitcdGlmIChpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiQ2Fubm90IGNoYW5nZSBuZXQgbmFtZXNwYWNlIG9mIFJETUEgZGV2aWNlIGluIHNoYXJlZCBuZXRucyBtb2RlXCIpO1xuK1x0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBuc19lcnI7XG4rXHR9XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2UgY2hhbmdlcyAobm8gZGlzYXNzb2NpYXRlIHN1cHBvcnQpXCIpO1xuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0aWJfZGV2aWNlX3B1dChkZXYpO1xuLVx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0KTtcbitcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnMsIG5ldCwgbmFtZSxcbitcdFx0XHRcdCAgICBOVUxMKTtcbiBcdHB1dF9kZXZpY2UoXHUwMDI2ZGV2LVx1MDAzZWRldik7XG4rXHRpZiAocmV0ID09IC1FRVhJU1QpXG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcIik7XG4rXHRlbHNlIGlmIChyZXQgPT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgbmFtZSlcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIlVuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbiBcbiBcdHB1dF9uZXQobmV0KTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbmluZGV4IGY1OTljMjRiMzRlODFiLi40NzNiZjk2NjdmODNlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbkBAIC0xMTc3LDYgKzExNzcsMjQgQEAgc3RhdGljIGludCBubGRldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghZGV2aWNlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbitcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbitcdFx0dTMyIG5zX2ZkO1xuK1xuK1x0XHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuK1x0XHRcdG5sYV9zdHJzY3B5KG5hbWUsIHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0sXG4rXHRcdFx0XHQgICAgSUJfREVWSUNFX05BTUVfTUFYKTtcbitcdFx0XHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdG5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTtcbitcdFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxuK1x0XHRcdFx0XHQgICAgICBuYW1lWzBdID8gbmFtZSA6IE5VTEwsIGV4dGFjayk7XG4rXHRcdGdvdG8gcHV0X2RvbmU7XG4rXHR9XG4rXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuIFx0XHRjaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9O1xuIFxuQEAgLTExOTAsMTQgKzEyMDgsNiBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRnb3RvIGRvbmU7XG4gXHR9XG4gXG4tXHRpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7XG4tXHRcdHUzMiBuc19mZDtcbi1cbi1cdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuLVx0XHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQpO1xuLVx0XHRnb3RvIHB1dF9kb25lO1xuLVx0fVxuLVxuIFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkge1xuIFx0XHR1OCB1c2VfZGltO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXG5pbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXG5AQCAtNzAwLDYgKzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxuIFx0aWYgKHFwX3R5cGUgIT0gSUJfUVBUX1NNSSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKlxuK1x0ICogU0VMaW51eCBsYWJlbHMgYW4gZW5kcG9ydCBieSAoZGV2aWNlIG5hbWUsIHBvcnQpIGZyb20gYSBnbG9iYWxcbitcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxuK1x0ICogdGhlIHNhbWUgbGFiZWw7IGRpc3Rpbmd1aXNoaW5nIHRoZW0gd291bGQgbmVlZCBuZXQgbmFtZXNwYWNlIHN1cHBvcnRcbitcdCAqIGluIHRoZSBwb2xpY3kgbGFuZ3VhZ2UgYW5kIHRvb2xpbmcuXG4rXHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcbiBcdHJldCA9IHNlY3VyaXR5X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldChhZ2VudC1cdTAwM2VzZWN1cml0eSxcbiBcdFx0XHRcdFx0XHRkZXZfbmFtZShcdTAwMjZhZ2VudC1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2KSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxuIFx0XHRyeGVfZXJyX3VjKHVjLCBcImNsZWFudXAgZmFpbGVkLCBlcnIgPSAlZFxcblwiLCBlcnIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1Yylcbit7XG4rfVxuK1xuIC8qIHBkICovXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuIHtcbkBAIC0xNDc4LDYgKzE0ODIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgcnhlX2Rldl9vcHMgPSB7XG4gXHQuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsXG4gXHQuZGV0YWNoX21jYXN0ID0gcnhlX2RldGFjaF9tY2FzdCxcbiBcdC5kZXZpY2VfZ3JvdXAgPSBcdTAwMjZyeGVfYXR0cl9ncm91cCxcbitcdC5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LFxuIFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcbiBcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXG4gXHQuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG5pbmRleCBhY2JkNzg3ZGUyNjViNS4uYTA3MGZjZjg2ZThhNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbkBAIC0zMTg5LDEwICszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcbiBcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4gXG4rLypcbisgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcbisgKiBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcmRtYV9kZXZfbmV0KGhvc3QtXHUwMDNlc3JwX2Rldi1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XG4gXHQubmFtZSAgICA9IFwiaW5maW5pYmFuZF9zcnBcIixcbiBcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3Vwcyxcbi1cdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldlxuK1x0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LFxuK1x0Lm5zX3R5cGUgPSBcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxuK1x0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG5pbmRleCA0MDRlNzQ2NTUyY2E4Zi4uNzExNzBjYjBlMTllMzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuQEAgLTcsNiArNyw3IEBAXG4gI2RlZmluZSBfQ0dST1VQX1JETUFfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nncm91cC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuIFxuIGVudW0gcmRtYWNnX3Jlc291cmNlX3R5cGUge1xuIFx0UkRNQUNHX1JFU09VUkNFX0hDQV9IQU5ETEUsXG5AQCAtMzQsNiArMzUsMTUgQEAgc3RydWN0IHJkbWFjZ19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZGV2X25vZGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRycG9vbHM7XG4gXHRjaGFyXHRcdFx0Km5hbWU7XG4rXHQvKlxuK1x0ICogTmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8uIEBuZXRuc19zaGFyZWQgbWlycm9yc1xuK1x0ICogaWJfZGV2aWNlc19zaGFyZWRfbmV0bnM6IHdoZW4gdHJ1ZSB0aGUgZGV2aWNlIGlzIHZpc2libGUgZnJvbSBldmVyeVxuK1x0ICogbmV0IG5hbWVzcGFjZSAoc2hhcmVkIG1vZGUpOyBvdGhlcndpc2UgQG5ldCBpcyB0aGUgb25seSBuYW1lc3BhY2VcbitcdCAqIHRoYXQgbWF5IHNlZSBhbmQgY29uZmlndXJlIGl0LiBAbmV0bnNfc2hhcmVkIGlzIHVwZGF0ZWQgd2hlbiB0aGVcbitcdCAqIHNoYXJpbmcgbW9kZSBjaGFuZ2VzLCBzbyB1c2Uge1JFQUQsV1JJVEV9X09OQ0UoKSB0byBhY2Nlc3MgaXQuXG4rXHQgKi9cbitcdHBvc3NpYmxlX25ldF90XHRcdG5ldDtcbitcdGJvb2xcdFx0XHRuZXRuc19zaGFyZWQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbmluZGV4IDNhZjk0NmVjYmFjM2VkLi5lZTExYzNiYmJhZTIyYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG4rKysgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuQEAgLTUxNiw3ICs1MTYsMTAgQEAgZW51bSByZG1hX25sZGV2X2F0dHIge1xuIFx0UkRNQV9OTERFVl9BVFRSX0RFVl9QUk9UT0NPTCxcdFx0Lyogc3RyaW5nICovXG4gXG4gXHQvKlxuLVx0ICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3RcbitcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcbitcdCAqIHdpdGggUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FIChhIGxpdGVyYWwgZGV2aWNlIG5hbWUpIHRvIGFsc28gcmVuYW1lXG4rXHQgKiB0aGUgZGV2aWNlIGluIHRoZSBkZXN0aW5hdGlvbiBuYW1lc3BhY2U7IHRoZSBtb3ZlIGZhaWxzIHdpdGggLUVFWElTVFxuK1x0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXG4gXHQgKi9cbiBcdFJETUFfTkxERVZfTkVUX05TX0ZELFx0XHRcdC8qIHUzMiAqL1xuIFx0LypcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL3JkbWEuYyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uYzhiNGUzZGU3NjMwNTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuKysrIGIva2VybmVsL2Nncm91cC9yZG1hLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nncm91cF9yZG1hLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbiBcbiAjZGVmaW5lIFJETUFDR19NQVhfU1RSIFwibWF4XCJcbiBcbkBAIC00NjQsNiArNDY1LDEzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4gfVxuIEVYUE9SVF9TWU1CT0wocmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKTtcbiBcbisvKiBuZXRuc19zaGFyZWQgaXMgdG9nZ2xlZCB3aXRob3V0IHJkbWFjZ19tdXRleCwgaGVuY2UgUkVBRF9PTkNFKCkuICovXG4rc3RhdGljIGJvb2wgcmRtYWNnX2RldmljZV92aXNpYmxlKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRShkZXZpY2UtXHUwMDNlbmV0bnNfc2hhcmVkKSB8fFxuK1x0ICAgICAgIG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZW5ldCksIGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnMpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7XG5AQCAtNDcxLDcgKzQ3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4rXHRcdGlmIChyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuIFx0XHRcdHJldHVybiBkZXZpY2U7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC02MjYsNiArNjM1LDkgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuK1x0XHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRzZXFfcHJpbnRmKHNmLCBcIiVzIFwiLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4gXG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG5AQCAtNjQ4LDYgKzY2MCw5IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG4rXHRcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG4gXG4gXHRcdHNlcV9wcmludGYoc2YsIFwiJXMgXCIsIGRldmljZS1cdTAwM2VuYW1lKTtcbkBAIC02NzcsNiArNjkyLDkgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdG11dGV4X2xvY2soXHUwMDI2cmRtYWNnX211dGV4KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbitcdFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbiBcdFx0c2VxX3ByaW50ZihzZiwgXCIlcyBcIiwgZGV2aWNlLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xuaW5kZXggNjNlMjg2ZTJkZmFhOGQuLmZmOWM5YzM1Y2MyZjViIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfcG5ldC5jXG4rKysgYi9uZXQvc21jL3NtY19wbmV0LmNcbkBAIC0zMDQsMTMgKzMwNCwxOCBAQCBzdGF0aWMgYm9vbCBzbWNfcG5ldGlkX3ZhbGlkKGNvbnN0IGNoYXIgKnBuZXRfbmFtZSwgY2hhciAqcG5ldGlkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi9cbi1zdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoY2hhciAqaWJfbmFtZSlcbisvKlxuKyAqIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLCByZXN0cmljdGVkIHRvIHRoZSBkZXZpY2VzXG4rICogYWNjZXNzaWJsZSBmcm9tIEBuZXQuIFRoZSBkZXZpY2UgbWlnaHQgbm90IGV4aXN0LlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmliX25hbWUpXG4ge1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZzbWNfaWJfZGV2aWNlcy5tdXRleCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGliZGV2LCBcdTAwMjZzbWNfaWJfZGV2aWNlcy5saXN0LCBsaXN0KSB7XG4rXHRcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKGliZGV2LVx1MDAzZWliZGV2LCBuZXQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXN0cm5jbXAoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSwgaWJfbmFtZSxcbiBcdFx0XHQgICAgIHNpemVvZihpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VuYW1lKSkgfHxcbiBcdFx0ICAgIChpYmRldi1cdTAwM2VpYmRldi1cdTAwM2VkZXYucGFyZW50IFx1MDAyNlx1MDAyNlxuQEAgLTQwOCw4ICs0MTMsOCBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9ldGgoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuLVx0XHRcdCAgIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbitzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0ICAgY2hhciAqaWJfbmFtZSwgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxuIHtcbiBcdHN0cnVjdCBzbWNfcG5ldGVudHJ5ICp0bXBfcGUsICpuZXdfcGU7XG4gXHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJfZGV2O1xuQEAgLTQxOSw3ICs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxuIFx0Ym9vbCBuZXdfaWJkZXY7XG4gXG4gXHQvKiB0cnkgdG8gYXBwbHkgdGhlIHBuZXRpZCB0byBhY3RpdmUgZGV2aWNlcyAqL1xuLVx0aWJfZGV2ID0gc21jX3BuZXRfZmluZF9pYihpYl9uYW1lKTtcbitcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcbiBcdGlmIChpYl9kZXYpIHtcbiBcdFx0aWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTtcbiBcdFx0aWYgKGliZGV2X2FwcGxpZWQpXG5AQCAtNTE4LDcgKzUyMyw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZW50ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdKVxuIFx0XHRcdGlmIChpYnBvcnQgXHUwMDNjIDEgfHwgaWJwb3J0IFx1MDAzZSBTTUNfTUFYX1BPUlRTKVxuIFx0XHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuLVx0XHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIHN0cmluZywgaWJwb3J0LCBwbmV0X25hbWUpO1xuK1x0XHRyYyA9IHNtY19wbmV0X2FkZF9pYihwbmV0dGFibGUsIG5ldCwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmICghcmMpXG4gXHRcdFx0bmV3X2liZGV2ID0gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAocmMgIT0gLUVFWElTVClcbkBAIC0xMTcwLDYgKzExNzUsOSBAQCBpbnQgc21jX3BuZXRpZF9ieV90YWJsZV9pYihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGliX3BvcnQpXG4gXHRzdHJ1Y3Qgc21jX25ldCAqc247XG4gXHRpbnQgcmMgPSAtRU5PRU5UO1xuIFxuK1x0aWYgKCFyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoc21jaWJkZXYtXHUwMDNlaWJkZXYsIFx1MDAyNmluaXRfbmV0KSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4gXHQvKiBnZXQgcG5ldHRhYmxlIGZvciBpbml0IG5hbWVzcGFjZSAqL1xuIFx0c24gPSBuZXRfZ2VuZXJpYyhcdTAwMjZpbml0X25ldCwgc21jX25ldF9pZCk7XG4gXHRwbmV0dGFibGUgPSBcdTAwMjZzbi1cdTAwM2VwbmV0dGFibGU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbmluZGV4IDA3YWY3ZjE1YzFiZjc0Li5hOTFjMTRjNDUwMDZlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQCBURVNUX1BST0dTIDo9IHJ4ZV9ycGluZ19iZXR3ZWVuX25ldG5zLnNoIFxcXG4gXHRcdHJ4ZV9pcHY2LnNoIFxcXG4gXHRcdHJ4ZV9zb2NrZXRfd2l0aF9uZXRucy5zaCBcXFxuIFx0XHRyeGVfdGVzdF9ORVRERVZfVU5SRUdJU1RFUi5zaCBcXFxuLVx0XHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoXG4rXHRcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXFxcbitcdFx0cnhlX25ldG5zX25hbWVzLnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5pbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbkBAIC0xLDMgKzEsNSBAQFxuIENPTkZJR19UVU5cbiBDT05GSUdfVkVUSFxuK0NPTkZJR19EVU1NWVxuK0NPTkZJR19ORVRfTlNcbiBDT05GSUdfUkRNQV9SWEVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE3ZTU3NzA2ZmRmZjc1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxuQEAgLTAsMCArMSwyODIgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBFeGVyY2lzZSBSRE1BIGRldmljZSBuYW1lIGhhbmRsaW5nIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXG4rXG4rc291cmNlIFwiJChkaXJuYW1lIFwiJDBcIikvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFwiXG4rXG4rTkFNRV9QUkVGSVg9XCJyeGVfbmV0bnNfbmFtZXNfJCRcIlxuK05FVERFVl9QUkVGSVg9XCJyeG4kJFwiXG4rTlMxPVwiJHtOQU1FX1BSRUZJWH1uczFcIlxuK05TMj1cIiR7TkFNRV9QUkVGSVh9bnMyXCJcbitSWEVfQT1cIiR7TkFNRV9QUkVGSVh9cnhlX2FcIlxuK1JYRV9CPVwiJHtOQU1FX1BSRUZJWH1yeGVfYlwiXG4rUlhFX1NBTUU9XCIke05BTUVfUFJFRklYfXJ4ZV9zYW1lXCJcbitSWEVfTkVXPVwiJHtOQU1FX1BSRUZJWH1yeGVfbmV3XCJcbitEVU1NWV9BPVwiJHtORVRERVZfUFJFRklYfWFcIlxuK0RVTU1ZX0I9XCIke05FVERFVl9QUkVGSVh9YlwiXG4rT0xEX01PREU9XCJcIlxuK01PREVfQ0hBTkdFRD0wXG4rTU9EUz0oXCJkdW1teVwiIFwicmRtYV9yeGVcIilcbitURVNUX1NBTUVfTkFNRVM9XCJzYW1lIFJETUEgZGV2aWNlIG5hbWUgY2FuIGV4aXN0IGluIHR3byBuZXQgbmFtZXNwYWNlc1wiXG4rVEVTVF9NT1ZFX0NPTkZMSUNUPVwibW92ZSB3aXRob3V0IHJlbmFtZSBmYWlscyBvbiBkZXN0aW5hdGlvbiBuYW1lIGNvbmZsaWN0XCJcbitURVNUX01PVkVfUkVOQU1FPVwibW92ZSB0aGVuIHJlbmFtZSBzdWNjZWVkc1wiXG4rVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRT1cIm1vdmUgd2l0aCByZXF1ZXN0ZWQgZGVzdGluYXRpb24gbmFtZSBzdWNjZWVkc1wiXG4rVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUU9XCJzYW1lLW5ldG5zIHJlbmFtZSByZWplY3RzIGR1cGxpY2F0ZSBuYW1lXCJcbitURVNUX1RFQVJET1dOX1JFVFVSTj1cIm5ldG5zIGRlbGV0ZSByZXR1cm5zIGRldmljZSB0byBpbml0X25ldCBhbmQgcmVuYW1lcyBvbiBjb25mbGljdFwiXG4rXG4ra3NmdF9za2lwKClcbit7XG4rXHRrdGFwX3NraXBfYWxsIFwiJCpcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK31cbitcbitmYWlsKClcbit7XG4rXHRrdGFwX2V4aXRfZmFpbF9tc2cgXCIkKlwiXG4rfVxuK1xuK25lZWRfY21kKClcbit7XG4rXHRjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwga3NmdF9za2lwIFwibWlzc2luZyBjb21tYW5kOiAkMVwiXG4rfVxuK1xuK3JkbWFfbnMoKVxuK3tcbitcdGxvY2FsIG5zPSQxXG4rXG4rXHRzaGlmdFxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc1wiIHJkbWEgXCIkQFwiXG4rfVxuK1xuK3JkbWFfZGV2X2V4aXN0cygpXG4re1xuK1x0bG9jYWwgbnM9JDFcbitcdGxvY2FsIGRldj0kMlxuK1xuK1x0aWYgWyAtbiBcIiRuc1wiIF07IHRoZW5cbitcdFx0cmRtYV9ucyBcIiRuc1wiIGRldiBzaG93IFwiJGRldlwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0ZWxzZVxuK1x0XHRyZG1hIGRldiBzaG93IFwiJGRldlwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0Zmlcbit9XG4rXG4rYWRkX2R1bW15KClcbit7XG4rXHRsb2NhbCBuZXRkZXY9JDFcbitcbitcdGlwIGxpbmsgYWRkIFwiJG5ldGRldlwiIHR5cGUgZHVtbXkgfHwgcmV0dXJuIDFcbitcdGlwIGxpbmsgc2V0IFwiJG5ldGRldlwiIHVwIHx8IHJldHVybiAxXG4rfVxuK1xuK2FkZF9yeGUoKVxuK3tcbitcdGxvY2FsIGRldj0kMVxuK1x0bG9jYWwgbmV0ZGV2PSQyXG4rXG4rXHRyZG1hIGxpbmsgYWRkIFwiJGRldlwiIHR5cGUgcnhlIG5ldGRldiBcIiRuZXRkZXZcIlxuK31cbitcbityZG1hX2Rldl9vbl9uZXRkZXYoKVxuK3tcbitcdGxvY2FsIG5ldGRldj0kMVxuK1xuK1x0cmRtYSBsaW5rIHNob3cgMlx1MDAzZS9kZXYvbnVsbCB8IGF3ayAtdiB3YW50PVwiJG5ldGRldlwiICdcbitcdFx0e1xuK1x0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIE5GOyBpKyspXG4rXHRcdFx0XHRpZiAoJGkgPT0gXCJuZXRkZXZcIiBcdTAwMjZcdTAwMjYgJChpICsgMSkgPT0gd2FudCkge1xuK1x0XHRcdFx0XHRkZXYgPSAkMlxuK1x0XHRcdFx0XHRzdWIoL1xcLy4qLywgXCJcIiwgZGV2KVxuK1x0XHRcdFx0XHRwcmludCBkZXZcbitcdFx0XHRcdFx0ZXhpdFxuK1x0XHRcdFx0fVxuK1x0XHR9J1xuK31cbitcbit3YWl0X3JkbWFfZGV2X29uX25ldGRldigpXG4re1xuK1x0bG9jYWwgbmV0ZGV2PSQxXG4rXHRsb2NhbCBkZXZcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRkZXY9JChyZG1hX2Rldl9vbl9uZXRkZXYgXCIkbmV0ZGV2XCIpXG4rXHRcdGlmIFsgLW4gXCIkZGV2XCIgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCIkZGV2XCJcbitcdFx0XHRyZXR1cm4gMFxuK1x0XHRmaVxuK1x0XHRzbGVlcCAwLjFcbitcdGRvbmVcbitcbitcdHJldHVybiAxXG4rfVxuK1xuK3NldHVwX2RldnMoKVxuK3tcbitcdGNsZWFudXBfZGV2c1xuK1xuK1x0YWRkX2R1bW15IFwiJERVTU1ZX0FcIiB8fCByZXR1cm4gMVxuK1x0YWRkX2R1bW15IFwiJERVTU1ZX0JcIiB8fCByZXR1cm4gMVxuK1xuK1x0YWRkX3J4ZSBcIiRSWEVfQVwiIFwiJERVTU1ZX0FcIiB8fCByZXR1cm4gMVxuK1x0YWRkX3J4ZSBcIiRSWEVfQlwiIFwiJERVTU1ZX0JcIiB8fCByZXR1cm4gMVxuK31cbitcbitjbGVhbnVwX2RldnMoKVxuK3tcbitcdGlwIGxpbmsgZGVsIFwiJERVTU1ZX0FcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBsaW5rIGRlbCBcIiREVU1NWV9CXCIgMlx1MDAzZS9kZXYvbnVsbFxuK31cbitcbitzZXR1cCgpXG4re1xuK1x0T0xEX01PREU9JChyZG1hIHN5c3RlbSBzaG93IDJcdTAwM2UvZGV2L251bGwgfFxuK1x0XHQgICBzZWQgLW4gJ3MvLipuZXRucyBcXChbXiBdKlxcKS4qL1xcMS9wJylcbitcdFsgLW4gXCIkT0xEX01PREVcIiBdIHx8IGtzZnRfc2tpcCBcImZhaWxlZCB0byByZWFkIFJETUEgbmV0bnMgbW9kZVwiXG4rXG4rXHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fFxuK1x0XHRrc2Z0X3NraXAgXCJyZG1hIG5ldG5zIGV4Y2x1c2l2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcIlxuK1x0TU9ERV9DSEFOR0VEPTFcbitcbitcdGlwIG5ldG5zIGFkZCBcIiROUzFcIiB8fCByZXR1cm4gMVxuK1x0aXAgbmV0bnMgYWRkIFwiJE5TMlwiIHx8IHJldHVybiAxXG4rfVxuK1xuK2NsZWFudXAoKVxuK3tcbitcdGNsZWFudXBfZGV2c1xuK1xuK1x0aXAgbmV0bnMgZGVsIFwiJE5TMVwiIDJcdTAwM2UvZGV2L251bGxcbitcdGlwIG5ldG5zIGRlbCBcIiROUzJcIiAyXHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiBbIFwiJE1PREVfQ0hBTkdFRFwiIC1lcSAxIF07IHRoZW5cbitcdFx0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIFwiJE9MRF9NT0RFXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbitcbitcdGZvciBtIGluIFwiJHtNT0RTW0BdfVwiOyBkb1xuK1x0XHRtb2Rwcm9iZSAtciBcIiRtXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZG9uZVxuK31cbitcbityZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lKClcbit7XG4rXHRyZG1hIGRldiBoZWxwIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtRXEgJ25ldG5zIC4qbmFtZXxuYW1lIC4qbmV0bnMnXG4rfVxuK1xuK1sgXCIkKGlkIC11KVwiIC1lcSAwIF0gfHwga3NmdF9za2lwIFwibXVzdCBiZSBydW4gYXMgcm9vdFwiXG4rbmVlZF9jbWQgaXBcbituZWVkX2NtZCByZG1hXG4rbmVlZF9jbWQgbW9kcHJvYmVcbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK2ZvciBtIGluIFwiJHtNT0RTW0BdfVwiOyBkb1xuK1x0bW9kaW5mbyBcIiRtXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8IGtzZnRfc2tpcCBcIm1vZHVsZSAkbSBub3QgZm91bmRcIlxuK1x0bW9kcHJvYmUgXCIkbVwiIHx8IGZhaWwgXCJmYWlsZWQgdG8gbG9hZCAkbVwiXG4rZG9uZVxuK1xuK3NldHVwIHx8IGZhaWwgXCJmYWlsZWQgdG8gY3JlYXRlIG5ldCBuYW1lc3BhY2VzXCJcbitcbitrdGFwX3ByaW50X2hlYWRlclxuK2t0YXBfc2V0X3BsYW4gN1xuK1xuK2lmIHNldHVwX2RldnMgXHUwMDI2XHUwMDI2XG4rICAgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmV0bnMgXCIkTlMxXCIgXHUwMDI2XHUwMDI2XG4rICAgcmRtYV9ucyBcIiROUzFcIiBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWEgZGV2IHNldCBcIiRSWEVfQlwiIG5ldG5zIFwiJE5TMlwiIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWFfbnMgXCIkTlMyXCIgZGV2IHNldCBcIiRSWEVfQlwiIG5hbWUgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hX2Rldl9leGlzdHMgXCIkTlMxXCIgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX1NBTUVcIjsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9TQU1FX05BTUVTXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1NBTUVfTkFNRVNcIlxuK2ZpXG4rY2xlYW51cF9kZXZzXG4rXG4raWYgISBzZXR1cF9kZXZzIHx8XG4rICAgISByZG1hIGRldiBzZXQgXCIkUlhFX0FcIiBuZXRucyBcIiROUzFcIiB8fFxuKyAgICEgcmRtYV9ucyBcIiROUzFcIiBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfU0FNRVwiIHx8XG4rICAgISByZG1hIGRldiBzZXQgXCIkUlhFX0JcIiBuZXRucyBcIiROUzJcIiB8fFxuKyAgICEgcmRtYV9ucyBcIiROUzJcIiBkZXYgc2V0IFwiJFJYRV9CXCIgbmFtZSBcIiRSWEVfU0FNRVwiOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfQ09ORkxJQ1RcIlxuK2VsaWYgcmRtYV9ucyBcIiROUzFcIiBkZXYgc2V0IFwiJFJYRV9TQU1FXCIgbmV0bnMgXCIkTlMyXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfQ09ORkxJQ1RcIlxuK2VsaWYgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMVwiIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rICAgICByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX1NBTUVcIjsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfQ09ORkxJQ1RcIlxuK2ZpXG4rY2xlYW51cF9kZXZzXG4rXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfUkVOQU1FXCJcbitlbGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5ldG5zIFwiJE5TMlwiIFx1MDAyNlx1MDAyNlxuKyAgICAgcmRtYV9ucyBcIiROUzJcIiBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdGlmIHJkbWFfZGV2X2V4aXN0cyBcIiROUzJcIiBcIiRSWEVfTkVXXCIgXHUwMDI2XHUwMDI2XG4rXHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9BXCI7IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9NT1ZFX1JFTkFNRVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfTU9WRV9SRU5BTUVcIlxuK1x0ZmlcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfUkVOQU1FXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgcmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZTsgdGhlblxuK1x0a3RhcF90ZXN0X3NraXAgXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwiXG4rZWxpZiAhIHNldHVwX2RldnM7IHRoZW5cbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK2VsaWYgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmV0bnMgXCIkTlMyXCIgbmFtZSBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdGlmIHJkbWFfZGV2X2V4aXN0cyBcIiROUzJcIiBcIiRSWEVfTkVXXCIgXHUwMDI2XHUwMDI2XG4rXHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9BXCI7IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK1x0ZmlcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2czsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK2VsaWYgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmFtZSBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuKyAgICAgcmRtYSBkZXYgc2V0IFwiJFJYRV9CXCIgbmFtZSBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX05FV1wiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwiXG4rXHRlbGlmIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJkbWFfZGV2X2V4aXN0cyBcIlwiIFwiJFJYRV9ORVdcIjsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK2ZpXG4rY2xlYW51cF9kZXZzXG4rXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1RFQVJET1dOX1JFVFVSTlwiXG4rZWxpZiAhIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiB8fFxuKyAgICAgISByZG1hIGRldiBzZXQgXCIkUlhFX0JcIiBuZXRucyBcIiROUzJcIiB8fFxuKyAgICAgISByZG1hX25zIFwiJE5TMlwiIGRldiBzZXQgXCIkUlhFX0JcIiBuYW1lIFwiJFJYRV9TQU1FXCIgfHxcbisgICAgICEgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMlwiIFwiJFJYRV9TQU1FXCI7IHRoZW5cbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXCJcbitlbHNlXG4rXHRpcCBuZXRucyBkZWwgXCIkTlMyXCJcbitcdHJldHVybmVkPSQod2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYgXCIkRFVNTVlfQlwiKVxuK1x0a3RhcF9wcmludF9tc2cgXCJkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJyR7cmV0dXJuZWQ6LVx1MDAzY21pc3NpbmdcdTAwM2V9J1wiXG4rXHRpZiByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuK1x0ICAgWyAtbiBcIiRyZXR1cm5lZFwiIF0gXHUwMDI2XHUwMDI2XG4rXHQgICBbIFwiJHJldHVybmVkXCIgIT0gXCIkUlhFX1NBTUVcIiBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgWyBcIiR7cmV0dXJuZWQjaWJkZXZ9XCIgIT0gXCIkcmV0dXJuZWRcIiBdOyB0aGVuXG4rXHRcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXCJcbitcdGVsc2VcbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cIlxuK1x0ZmlcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2t0YXBfZmluaXNoZWRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjI3LjUwMDY1NTgyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTMwMjQzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRNQSBDb3JlIGFuZCBDZ3JvdXAgU3Vic3lzdGVtIENoYW5nZXM6IFJlYWNoYWJpbGl0eSBhbmQgRnV6emFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSBhbmQgaXRzIGNncm91cCBpbnRlZ3JhdGlvbi4gSXQncyB0b3VjaGluZyBhIGxvdCBvZiBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB0aGUgZGV2aWNlIG5hbWluZyBhbmQgbmV0d29yayBuYW1lc3BhY2UgaGFuZGxpbmcgd2l0aGluIHRoZSBSRE1BIHN1YnN5c3RlbS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYW5kIHRoZSBgYWxsb2NfbmFtZWAgZnVuY3Rpb24sIGFsb25nIHdpdGggYWx0ZXJhdGlvbnMgdG8gYGNncm91cF9yZG1hLmhgIGFuZCBgY2dyb3VwL3JkbWEuY2AgaXRzZWxmLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIFJETUEgY2dyb3VwcyBuZXR3b3JrIG5hbWVzcGFjZS1hd2FyZSwgd2hpY2ggaXMgYSBiaWcgZGVhbCBmb3IgaXNvbGF0aW9uLlxuXG5JIGFsc28gc2VlIHRoYXQgaXQncyByZXN0cmljdGluZyBgc21jX3BuZXRfZmluZF9pYmAgdG8gb25seSBzZWUgZGV2aWNlcyBhdmFpbGFibGUgaW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHRocm91Z2ggY2hhbmdlcyB0byBgc21jX3BuZXQuY2AuICBUaGVyZSBhcmUgYWRkaXRpb25zIG9mIGByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0YCBpbiBgcnhlX3ZlcmJzLmNgLCBhbmQgYSBuZXcgYHNycF9uZXRfbmFtZXNwYWNlYCB2YXJpYWJsZSBpcyBhZGRlZCB0byBgaWJfc3JwLmNgLiBQbHVzIGl0J3MgbW9kaWZ5aW5nIGBubGRldi5jYCB0byBhbGxvdyBwYXNzaW5nIGEgZGV2aWNlIG5hbWUgd2hlbiBjaGFuZ2luZyBuZXRucy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBIb3cgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSBpcyB0aGlzIGNvZGU/XCIgV2UgbmVlZCB0byBiZSBhYmxlIHRvIGhpdCB0aGlzIGNvZGUgcGF0aCBhbmQgdmVyaWZ5IGl0cyBiZWhhdmlvciB3aXRoIHJlYXNvbmFibGUgY29uZmlkZW5jZS4gVGhlIG1haW4gZmlsZXMgb2YgaW50ZXJlc3QgYXJlIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY2AsIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jYCwgYW5kIGBrZXJuZWwvY2dyb3VwL3JkbWEuY2AsIGFzIHRoZXNlIGFyZSB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBkaXJlY3RseSBtb2RpZmllZC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIOKAkyBhZGRpbmcgbmV0bnMgc3VwcG9ydCwgcG90ZW50aWFsbHkgcmVuYW1pbmcgZGV2aWNlcyBwZXIgbmV0bnMg4oCTIHRoaXMgc21lbGxzIGxpa2UgYSBwb3RlbnRpYWwgYXZlbnVlIGZvciBmdXp6aW5nLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gUkRNQSBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIGdpdmVuIHN5emthbGxlciBjb3ZlcmFnZSwgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGljaCBgQ09ORklHX2Agb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBjb2RlIHBhdGhzIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfQ0dST1VQX1JETUFgIGFuZCBgQ09ORklHX0lORklOSUJBTkRgLiBBbmQgSSBrbm93IGBDT05GSUdfUkRNQV9SWEVgIGlzIHVzZWQgaW4gdGhlIHNlbGZ0ZXN0LiBUaGUgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfSU5GSU5JQkFORGAgaXMgZW5hYmxlZC4gYGtlcm5lbC9jZ3JvdXAvcmRtYS5jYCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfQ0dST1VQX1JETUFgLCBhbmQgYG5ldC9zbWMvc21jX3BuZXQuY2AgYnkgYENPTkZJR19TTUNgLiBgZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY2AgcmVxdWlyZXMgYENPTkZJR19SRE1BX1JYRWAgdG8gYmUgZW5hYmxlZCwgYW5kIGBkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY2AgcmVsaWVzIG9uIGBDT05GSUdfSU5GSU5JQkFORF9TUlBgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgcGF0aHMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NTozNi45OTM2ODI0NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NDA0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5vYmotXFxcXCRcXFxcKENPTkZJR19DR1JPVVBfUkRNQVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9jZ3JvdXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9jZ3JvdXAvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfQ0dST1VQX1BJRFMpICs9IHBpZHMub1xcbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQ0dST1VQX1JETUEpICs9IHJkbWEub1xcbmtlcm5lbC9jZ3JvdXAvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfQ1BVU0VUUykgKz0gY3B1c2V0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6MzcuMTA5MDkzNzIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODcyNDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSW5maW5pYmFuZCBDb3JlIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGNvcmUgbW9kdWxlIGlzIGJ1aWx0LCBhbmQgZnJhbmtseSwgSSBleHBlY3QgdGhpcyBNYWtlZmlsZSB0byBiZSB0aGUgaGVhcnQgb2YgdGhhdC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBzdGFuZGFyZCBzdHVmZjogb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBpbmNsdWRlIHBhdGhzLCBtYXliZSBzb21lIGFyY2gtc3BlY2lmaWMgZGVmaW5pdGlvbnMgaWYgd2UncmUgbHVja3ksIGFuZCBvZiBjb3Vyc2UsIHRoZSBsaW5rZXIgZmxhZ3MuIE15IGd1dCBzYXlzIHRoaXMgd2lsbCBsaWtlbHkgYmUgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBNYWtlZmlsZTsgaXQncyB0aGUgY29yZSwgc28gaXQgc2hvdWxkIGJlIHdlbGwtb3JnYW5pemVkIGFuZCBtb2R1bGFyLCByaWdodD8gTGV0J3Mgc2VlIGlmIHRoZSBidWlsZCBwcm9jZXNzIHV0aWxpemVzIHRoZSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgc3lzdGVtIHZhcmlhYmxlcyBhbmQgY29udmVudGlvbnMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mIG9yIGlzIGl0IGEgZmFpcmx5IGdlbmVyaWMgYnVpbGQgZm9yIG5vdz8gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjQwLjUwNzgyMDUzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODk4MTMwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXm9iai1cXFxcJFxcXFwoQ09ORklHX0lORklOSUJBTkRcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGU9Mz11c2VyX2FjY2Vzcy0kKENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlMpXFx0Oj0gcmRtYV91Y20ub1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlLTQtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfSU5GSU5JQkFORCkgKz1cXHRcXHRpYl9jb3JlLm8gaWJfY20ubyBpd19jbS5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZS02LVxcdFxcdFxcdFxcdFxcdCQoaW5maW5pYmFuZC15KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NTo0MS4wOTc2Mzc3NzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM0MDI2NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgUlhFIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUlhFIChSZWxpYWJsZSBlWHByZXNzIEV0aGVybmV0KSBkcml2ZXIncyBidWlsZCBwcm9jZXNzIGlzIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGJ1aWxkIG1hZ2ljIGZvciB0aGlzIG1vZHVsZSBzaG91bGQgYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBvYmplY3QgZmlsZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBydWxlcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtb3JnYW5pemVkIGFuZCBkb2Vzbid0IGludm9sdmUgYW55IG92ZXJseSBjb252b2x1dGVkIG9yIG9ic2N1cmUgbWFrZWZpbGUgdHJpY2tzLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhbnkgc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzIG9yIHRvb2xzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhleSBoYW5kbGUgdGhpbmdzIGxpa2UgaGVhZGVyIGluY2x1c2lvbiwgbW9kdWxlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBhbmQgYW55IHNwZWNpYWwgb3B0aW9ucyBvciBsaWJyYXJpZXMgdGhleSdyZSBsaW5raW5nIGFnYWluc3QuIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQ2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NDQuNDMxNjY3MDM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzI0NTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLVxcXFwkXFxcXChDT05GSUdfUkRNQV9SWEVcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUkRNQV9SWEUpICs9IHJkbWFfcnhlLm9cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlLTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjQ0LjU0NDkxODI2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDAxMDM1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgdGhvdWdodCBwcm9jZXNzIGRlc2NyaWJlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU1JQIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGBkcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIFNSUCAoU0NTSSBSRE1BIFByb3RvY29sKSBkcml2ZXIgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN0YWNrIHdpbGwgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgdGhpcyBzcGVjaWZpYyBVTFAgKFVwcGVyIExheWVyIFByb3RvY29sKSBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgd2FudCB0byBzZWUgaG93IHRoZSBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBJbmZpbmliYW5kIGNvbXBvbmVudHMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGN1c3RvbSBidWlsZCBmbGFncyBvciBsaW5rZXIgZGlyZWN0aXZlcyBzcGVjaWZpYyB0byBTUlAuIFVuZGVyc3RhbmRpbmcgdGhpcyBNYWtlZmlsZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3VlcywgZm9yIG1ha2luZyBjdXN0b21pemF0aW9ucywgYW5kIGZvciB2ZXJpZnlpbmcgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIElCIHN0YWNrLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBvYmplY3QgZmlsZSBkZWZpbml0aW9ucywgaW5jbHVkZXMgb2Ygb3RoZXIgcmVsZXZhbnQgaGVhZGVycyB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5IG9yIGZyb20gaGlnaGVyIGluIHRoZSBJQiBzdHJ1Y3R1cmUsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjI0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NDcuOTg1MDI1MzI5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU2ODYwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXm9iai1cXFxcJFxcXFwoQ09ORklHX0lORklOSUJBTkRfU1JQXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tidWlsZC0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LYnVpbGQ6MjpvYmotJChDT05GSUdfSU5GSU5JQkFORF9TUlApXFx0XFx0XFx0Kz0gaWJfc3JwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NDguMTEwNzIxMTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTg4ODA4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgTWFrZWZpbGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrJ3MgaGFuZGxpbmcgb2YgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb24pLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L3NtYy9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpbnZlc3RpZ2F0aW5nIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gU01DIGZ1bmN0aW9uYWxpdHkuIEJ5IGV4YW1pbmluZyB0aGlzIE1ha2VmaWxlLCBJIGNhbiBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTTUMgbW9kdWxlcyBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgb3IgcmVsZXZhbnQgbmV0d29yayBjb21wb25lbnRzLiBJdCdsbCByZXZlYWwgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzLCBwb3RlbnRpYWwgdGFyZ2V0LXNwZWNpZmljIHNldHRpbmdzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYW55IGFyZWFzIHdoZXJlIHRoZXJlIG1pZ2h0IGJlIG1pc2NvbmZpZ3VyYXRpb25zIG9yIG92ZXJsb29rZWQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGNhdXNpbmcgaXNzdWVzIHdpdGggdGhlIFNNQyBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgZmFzdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGZvciB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NTIuMzA5NjA0ODM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTE4Njk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLVxcXFwkXFxcXChDT05GSUdfU01DXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9NYWtlZmlsZT0yPWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbm5ldC9zbWMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfU01DKVxcdCs9IHNtYy5vXFxubmV0L3NtYy9NYWtlZmlsZS00LW9iai0kKENPTkZJR19TTUNfRElBRylcXHQrPSBzbWNfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU1OjUyLjQwNDc5NzgxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzcwNzk4OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgbnVtYmVyIG9mIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIG5hbWVzcGFjZXMgYW5kIFJETUEuIEkgc2VlIGl0J3MgbW9kaWZ5aW5nIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYW5kIGBzcnBfbmV0X25hbWVzcGFjZWAuIFJpZ2h0IGF3YXksIHRoaXMgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBSRE1BIGRldmljZXMgYXJlIGhhbmRsZWQgd2l0aGluIGRpZmZlcmVudCBuZXR3b3JrIGNvbnRleHRzLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdGhlIGltcGFjdCBvbiBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMsIGJhc2VkIG9uIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLCBpcyBob3cgdGhlIGRldmljZSBpcyBtb3ZlZCBiZXR3ZWVuIG5hbWVzcGFjZXMsIGhvdyBpdCBwaWNrcyB0aGUgY29ycmVjdCBuYW1lc3BhY2UgbmFtZSwgYW5kIGhvdyBpdHMgdmlzaWJpbGl0eSBpcyBkZXRlcm1pbmVkIHdpdGhpbiB0aGUgUkRNQSBlY29zeXN0ZW0uIEkgd2lsbCBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGBubGRldl9zZXRfZG9pdGAsIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgLCBgc21jX3BuZXRfZmluZF9pYmAsIGFuZCBgc3JwX25ldF9uYW1lc3BhY2VgLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBkZXZpY2UgbWFuYWdlbWVudCBhbmQgbmV0bGluayBpbnRlcmZhY2VzLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgYG5sZGV2X3NldF9kb2l0YCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdGhlIGFjY3VyYXRlIG5hbWUuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBpcyBub3QgYSB0eXBvIG9yIHBsYWNlaG9sZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMwMywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NTo1Ny43NzU1OTkzMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTA5MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubGRldl9zZXRfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTExMj1zdGF0aWMgaW50IG5sZGV2X2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMTYxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTE2MjpzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTE2My1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9Mjk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJkbWFfbmxfY2JzIG5sZGV2X2NiX3RhYmxlW1JETUFfTkxERVZfTlVNX09QU10gPSB7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI5NzgtXFx0W1JETUFfTkxERVZfQ01EX1NFVF0gPSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyOTc5OlxcdFxcdC5kb2l0ID0gbmxkZXZfc2V0X2RvaXQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yOTgwLVxcdFxcdC5mbGFncyA9IFJETUFfTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTU6NTcuOTA0Njk0NTk5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU1NDkyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipWZXJpZnlpbmcgdGhlIFNldHVwKipcblxuQWxyaWdodCwgdGhhdCBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYG5sZGV2X3NldF9kb2l0YCBpcyBzcG90IG9uLCBzZWVtcyBsaWtlIHdlJ3JlIGdvb2QgdG8gZ28gdGhlcmUuIE5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiBgcmRtYWNnX2RldmljZV92aXNpYmxlYC4gV2FudCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGFsaWduZWQgYW5kIHdlIGRpZG4ndCBtaXNzIGFueXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBpbml0aWFsIHNldHVwLiBJIGFsd2F5cyBsaWtlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBiYXNlIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjAxLjc1MDI0Njk2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwMzQ2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRtYWNnX2RldmljZV92aXNpYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9jZ3JvdXAvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9jZ3JvdXAvcmRtYS5jPTQ2Nj1FWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00NjgtLyogbmV0bnNfc2hhcmVkIGlzIHRvZ2dsZWQgd2l0aG91dCByZG1hY2dfbXV0ZXgsIGhlbmNlIFJFQURfT05DRSgpLiAqL1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjQ2OTpzdGF0aWMgYm9vbCByZG1hY2dfZGV2aWNlX3Zpc2libGUoY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00NzAte1xcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NDc1PXN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy00ODEtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFxcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NDgyOlxcdFxcdGlmIChyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTQ4My1cXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZpY2UtXFx1MDAzZW5hbWUpKVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NjI5PXN0YXRpYyBpbnQgcmRtYWNnX3Jlc291cmNlX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTYzNy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjYzODpcXHRcXHRpZiAoIXJkbWFjZ19kZXZpY2VfdmlzaWJsZShkZXZpY2UpKVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTYzOS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTY1Mz1zdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNjYyLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6NjYzOlxcdFxcdGlmICghcmRtYWNnX2RldmljZV92aXNpYmxlKGRldmljZSkpXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNjY0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9Njg1PXN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFxcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo2OTU6XFx0XFx0aWYgKCFyZG1hY2dfZGV2aWNlX3Zpc2libGUoZGV2aWNlKSlcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy02OTYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjAxLjgzNDI4ODM5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk3MTI5ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IHRoaW5raW5nIHJpZ2h0IG5vdyBpcyBjZW50ZXJlZCBvbiB0aGlzIGByZG1hY2dfZGV2aWNlX3Zpc2libGVgIGZ1bmN0aW9uLiBTaW5jZSBpdCdzIHN0YXRpYywgaW5jbHVkaW5nIGl0IHNlZW1zIHNhZmUgZW5vdWdoLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHdoZXRoZXIgdG8gYnJpbmcgaW4gYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAsIGByZG1hY2dfcmVzb3VyY2VfcmVhZGAsIGByZG1hY2dfZXZlbnRzX3Nob3dgLCBhbmQgYHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvd2AuIFdhaXQsIG9uIHNlY29uZCB0aG91Z2h0LCBgcmRtYWNnX2RldmljZV92aXNpYmxlYCBzaG91bGQgYmUgcGVyZmVjdGx5IGFkZXF1YXRlIG9uIGl0cyBvd24gZm9yIHRoZSBjdXJyZW50IHB1cnBvc2UuXG5cbk5vdywgSSdsbCBzd2l0Y2ggZ2VhcnMgdG8gZXhhbWluZSBgc21jX3BuZXRfZmluZF9pYmAuIExldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAyMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjA1LjAzMTQyMTI2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjEzOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfcG5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3BuZXQuYz0yODU9c3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy0zMTAtICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjMxMTpzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKVxcbm5ldC9zbWMvc21jX3BuZXQuYy0zMTIte1xcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTQxNj1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtNDI2LVxcdC8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovXFxubmV0L3NtYy9zbWNfcG5ldC5jOjQyNzpcXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTQyOC1cXHRpZiAoaWJfZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjA1LjE0NzA0MjQ2N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc3MzUxNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgYHNycF9uZXRfbmFtZXNwYWNlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgc3JwX25ldF9uYW1lc3BhY2VgLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIHNldHRpbmdzIHRvIGVuc3VyZSB0aGF0IGl0J3MgY29uc2lzdGVudCB3aXRoIG15IG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBkZXNpZ24gYW5kIHRoYXQgaXQncyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBuZXR3b3JrLiBObyBwb2ludCBpbiBwcm9jZWVkaW5nIHdpdGhvdXQgdGhpcyBiYXNlIGJlaW5nIHN0cm9uZy4gTGV0J3MgZGVsdmUgaW4gYW5kIGZpbmQgb3V0IHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjA4LjQyNDM5Nzk2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0ODA3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3JwX25ldF9uYW1lc3BhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM9MzE5MD1BVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMTk1LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jOjMxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBuc19jb21tb24gKnNycF9uZXRfbmFtZXNwYWNlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMTk3LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jPTMyMDQ9c3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYy0zMjA4LVxcdC5uc190eXBlID0gXFx1MDAyNm5ldF9uc190eXBlX29wZXJhdGlvbnMsXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmM6MzIwOTpcXHQubmFtZXNwYWNlID0gc3JwX25ldF9uYW1lc3BhY2UsXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMtMzIxMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjowOC41MTU4ODQyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUyMzM2MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbiBOYW1pbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5k4oCmIGxldCdzIGRpdmUgcmlnaHQgaW4uIFRoZSBpbW1lZGlhdGUgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgbWluZCBpcyB0byB6ZXJvIGluIG9uIGBfX2FsbG9jX25hbWVfaWRgLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3QgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbiwgaXNu4oCZdCBpdD8gQW55IHRpbWUgSSBzZWUgYSBtZW1vcnkgYWxsb2NhdGlvbi1yZWxhdGVkIGlzc3VlLCB1bmRlcnN0YW5kaW5nIGhvdyBhbGxvY2F0aW9uIG5hbWVzIGFyZSBoYW5kbGVkLCBvciByYXRoZXIsIHRoZSBpbnRlcm5hbCBJRCBnZW5lcmF0aW9uLCBiZWNvbWVzIHBhcmFtb3VudC4gQSBsb3Qgb2Ygc3VidGxlIHByb2JsZW1zIGNhbiBzdGVtIGZyb20gbWlzbWFuYWdlZCBuYW1lcywgcGFydGljdWxhcmx5IGluIGNvbXBsZXgsIG11bHRpdGhyZWFkZWQgc3lzdGVtcy4gU28sIG15IGluaXRpYWwgdGhvdWdodD8gTGV0J3MgdmVyaWZ5IGhvdyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gYmVoYXZlcywgbWFrZSBzdXJlIHRoZSBJRCdzIGFyZSBjb3JyZWN0bHkgc2V0IGFuZCBtYW5hZ2VkLiBUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IHN0ZXAgaW4gbXkgYW5hbHlzaXMuIEl0J3MgdGhlIGx5bmNocGluIGZvciB0cmFja2luZyBhbmQgZGVidWdnaW5nIHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucyBvciBsZWFrcy4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3VyIGlzIHRoZSBiYXNlbGluZSBmb3IgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjoxNC42NjgyMjQwMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjY4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfbmFtZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz00MzI9aW50IGliX2RldmljZV9zZXRfZGltKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCB1c2VfZGltKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDQ1LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjQ0NjpzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDQ3LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKnNraXApXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYz00ODE9c3RhdGljIGludCBhbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy00ODIte1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjQ4MzpcXHRyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtNDg0LX1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jPTE3Mzk9c3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzcxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3NzI6XFx0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NzMtXFx0aWYgKGlkIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6MTQuNzUzODk4MzgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njc0NjAxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgLiBJIGtub3cgdGhpcyBmdW5jdGlvbi92YXJpYWJsZS9tZWNoYW5pc20gKGNvbnRleHQgZGVwZW5kaW5nLCBuYXR1cmFsbHkpIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIFJETUEgZGV2aWNlcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLiBJJ20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGFuIGlzc3VlIHJlbGF0ZWQgdG8gZGV2aWNlIHZpc2liaWxpdHkgb3IgcGVyaGFwcyBjcm9zcy1uYW1lc3BhY2UgY29tbXVuaWNhdGlvbiBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2F1c2UuIFRoaXMgaW1wbGllcyBJJ20gZWl0aGVyIGRlYnVnZ2luZyBhIGxpdmUgc3lzdGVtLCBleGFtaW5pbmcgY29kZSwgb3IgcmV2aWV3aW5nIGEgcG90ZW50aWFsIHBhdGNoL2NvbmZpZ3VyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQncyBkZWZpbmVkLCBob3cgaXQncyB1c2VkLCBhbmQgd2hhdCBpdHMgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhcmUuIEknbGwgbGlrZWx5IGJlIGFzc2Vzc2luZyBpdHMgcm9sZSBpbiBkZXZpY2UgZW51bWVyYXRpb24sIHBlcm1pc3Npb24gY2hlY2tzLCBvciByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGUgc3BlY2lmaWNzIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB0aGUgcGFydGljdWxhciBSRE1BIHN0YWNrIGluIHF1ZXN0aW9uLCBidXQgdGhlIGNvcmUgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBuZXR3b3JrIG5hbWVzcGFjZSBpc29sYXRpb24gaXMgKG9yIGlzbid0KSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byBSRE1BIGRldmljZSBuYW1pbmcuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGVsaW1pbmF0ZSB0aGUgc2ltcGxlIHBvc3NpYmlsaXRpZXMgYW5kIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwMCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjE4LjUyMTM2MTQ3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODU4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmM9MTcxND1FWFBPUlRfU1lNQk9MKGliX3VucmVnaXN0ZXJfZGV2aWNlX3F1ZXVlZCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTcxNS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzE2OnN0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3MTctXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jPTE3Mzk9c3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzQ5LVxcdGlmIChyZXF1ZXN0ZWRfbmFtZSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jOjE3NTA6XFx0XFx0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSkpIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzUxLVxcdFxcdFxcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMtMTc1Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzU4OlxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzU5LVxcdFxcdCpuZXdfbmFtZSA9IGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldik7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYy0xNzY2LVxcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXFxcImliZGV2JXVcXFwiLCBkZXZpY2UtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYzoxNzY3OlxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkge1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jLTE3NjgtXFx0XFx0Km5ld19uYW1lID0gYnVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjoxOC42MjIyMjUwNDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNzcyNjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSRE1BIE5ldCBOYW1lc3BhY2UgUGF0Y2g6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcy4gRXNzZW50aWFsbHksIGl0IGFsbG93cyB0aGVzZSBkZXZpY2VzIHRvIGhhdmUgdW5pcXVlIG5hbWVzIHdpdGhpbiBlYWNoIG5ldHdvcmsgbmFtZXNwYWNlLCB3aGljaCBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0IHRvdWNoZXMgYm90aCB0aGUgY29yZSBSRE1BIHN1YnN5c3RlbSBhbmQgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYW5kIGNvcm5lciBjYXNlcyBpcyBoaWdoIHdpdGggdGhpcyBsZXZlbCBvZiBjb3JlIG1vZGlmaWNhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSBhIHByb3BlciB0ZXN0IGVudmlyb25tZW50LiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBDR1JPVVBfUkRNQWAsIGBJTkZJTklCQU5EYCwgYE5FVF9OU2AsIGBTTUNgLCBhbmQgYElORklOSUJBTkRfU1JQYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBORVRfTlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQgb3IgaWYgaXQncyB1c3VhbGx5IGNvbXBpbGVkIGluIGFscmVhZHksIHdoaWNoIGlzIGxpa2VseS4gYENHUk9VUF9SRE1BYCBzZWVtcyBlc3NlbnRpYWwgZm9yIHRoZSBjZ3JvdXAtcmVsYXRlZCBtb2RpZmljYXRpb25zLCBhbmQgYElORklOSUJBTkRgIGlzIG9idmlvdXNseSBuZWNlc3NhcnkgZm9yIHRoZSBjb3JlIFJETUEgY2hhbmdlcy4gVGhlIHByZXNlbmNlIG9mIGBTTUNgIGluZGljYXRlcyBsaWtlbHkgY2hhbmdlcyB0byB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucy4gRmluYWxseSwgYElORklOSUJBTkRfU1JQYCBpcyByZXF1aXJlZCBmb3IgdGhlIFNSUCBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZG8gYSBxdWljayBzY2FuIG9uIGBDT05GSUdfU01DYCB0byBjb25maXJtIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTEwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjIzLjIyOTk1NTY4M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTY4Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6MjMuMzg1OTMwMDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NDY3NjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIEluZmluaUJhbmQgU1JQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2UncmUgbG9va2luZyBhdCBgQ09ORklHX0lORklOSUJBTkRfU1JQYFwiLiBUaGF0IGltbWVkaWF0ZWx5IHNpZ25hbHMgd2UncmUgZGVhbGluZyB3aXRoIFNlcmlhbGl6ZWQgUmVzZXJ2ZSBQcm90b2NvbCwgd2hpY2ggb2YgY291cnNlIEknbSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGguIFRoZSBmb2N1cyBoZXJlIGlzIGxpa2VseSBvbiBob3cgaXQncyBiZWluZyBjb25maWd1cmVkLCBvciBwZXJoYXBzIHdoZXRoZXIgaXQgKmlzKiBjb25maWd1cmVkLiBBcmUgd2UgdHJ5aW5nIHRvIGVuYWJsZSBpdCwgZGlzYWJsZSBpdCwgb3Igc2ltcGx5IGF1ZGl0IGl0cyBjdXJyZW50IHN0YXRlPyBUaGUgY29udGV4dCBoZXJlIGlzIGtleS4gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnM6IHBvdGVudGlhbCBpbXBhY3Qgb24gc3RvcmFnZSBwZXJmb3JtYW5jZSwgdGhlIGludGVycGxheSB3aXRoIG90aGVyIEluZmluaUJhbmQgb3B0aW9ucyBsaWtlIFJETUEgYW5kIHZlcmJzLCBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2hlcmUgYXJlIHdlIHJ1bm5pbmc/IFdoYXQncyB0aGUgdGFyZ2V0IHBsYXRmb3JtPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGFmZmVjdCBob3cgSSBpbnRlcnByZXQgdGhpcyBzaW1wbGUgY2hlY2suIERlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQsIG15IG5leHQgc3RlcCBjb3VsZCBiZSB0byB2ZXJpZnkgbW9kdWxlIGxvYWRpbmcsIGNoZWNrIGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcnMsIG9yIHJldmlldyBleGlzdGluZyBibG9jayBkZXZpY2Ugc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6MjYuODYwNjA4ODIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1NDU0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRfU1JQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjoyNy4wMDYxNTkxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3ODM2Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQ2hlY2tpbmcgdGhlIFJETUEgQ2dyb3VwIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcyBSRE1BLXJlbGF0ZWQgaXNzdWUsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYSBiYXNpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBjaGVjayB0aGUgc3RhdGUgb2YgYENPTkZJR19DR1JPVVBfUkRNQWAuIEl0J3MgYSBjcml0aWNhbCBrbm9iIHdoZW4gd29ya2luZyB3aXRoIFJETUEgd2l0aGluIGNncm91cHMuIElmIGl0J3MgZGlzYWJsZWQsIHRoZW4gbW9zdCBvZiBteSBlZmZvcnRzIHdpbGwgYmUgaGFtcGVyZWQgZnJvbSB0aGUgc3RhcnQuIEkgd2FudCB0byBydWxlIG91dCBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uIGJlZm9yZSBJIHN0YXJ0IHRyb3VibGVzaG9vdGluZyB0aGUgY29tcGxleGl0aWVzIHRoYXQgbWlnaHQgZm9sbG93LiBUaGlzIGlzIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCwgc28gdG8gc3BlYWssIGFuZCBJJ2QgYmUgcmVtaXNzIG5vdCB0byBlbGltaW5hdGUgaXQgYXMgYSBwcmltYXJ5IGNhdXNlLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgc2V0dGluZyBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjozMC4wMTM5OTgwMTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTQ5OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfUkRNQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyMzc9Y29uZmlnIENHUk9VUF9QSURTXFxuLS1cXG5pbml0L0tjb25maWctMTI1Mi1cXG5pbml0L0tjb25maWc6MTI1Mzpjb25maWcgQ0dST1VQX1JETUFcXG5pbml0L0tjb25maWctMTI1NC1cXHRib29sIFxcXCJSRE1BIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAzOjU2OjMwLjEwNzk1MjU3NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ4NDY0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb246XG5cbioqQ2hlY2tpbmcgYENPTkZJR19SRE1BX1JYRWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1JETUFfUlhFYCBpcyBjb3JyZWN0bHkgc2V0LiBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MgdGhlIGx5bmNocGluIGZvciBSZWNlaXZlciBFeHRlbnNpb25zIChSWEUpIHN1cHBvcnQgaW4gb3VyIFJETUEgc2V0dXAuIFRoaXMgcGFyYW1ldGVyIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IgZm9yIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBlbmFibGUgdGhlIFJYRSBmdW5jdGlvbmFsaXR5OyB3aXRob3V0IGl0IGVuYWJsZWQgd2XigJlyZSBzdW5rLlxuXG5JIGltbWVkaWF0ZWx5IG5lZWQgdG8gY29uZmlybSBpdHMgdmFsdWUsIGJlY2F1c2UgaWYgaXQncyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlbiB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciBjb25maWd1cmluZywgaXNuJ3QgZ29pbmcgdG8gd29yay4gSXMgaXQgZW5hYmxlZD8gRGlzYWJsZWQ/IFNldCBhcyBhIG1vZHVsZT8gVGhlIG51YW5jZXMgdGhlcmUgY2FuIGRyYW1hdGljYWxseSBzaGlmdCBob3cgSSBuZWVkIHRvIHByb2NlZWQgYW5kIHdoYXQgSSBtYXkgYmUgZW5jb3VudGVyaW5nLiBJZiBpdCdzIGRpc2FibGVkLCBJIGtub3cgdG8gcHVyc3VlIG90aGVyIGF2ZW51ZXMgYW5kIHNvbHV0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGhvdXQgUlhFLCBidXQsIGlmIGVuYWJsZWQsIEkga25vdyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLiBUaGlzIG9wdGlvbiB3aWxsIGluZmx1ZW5jZSBvdGhlciBkZXBlbmRlbmNpZXMsIGFuZCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjozNC42NTY0MTk3NDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTg0NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSRE1BX1JYRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnOjI6Y29uZmlnIFJETUFfUlhFXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMzo1NjozNC43NDY2MTA5MTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5NTk5MDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJETUEgTmV0d29yayBOYW1lc3BhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGNoYW5nZXMsIHNvIEkgc2VlIGl0IHRvdWNoZXMgYSB3aWRlIHJhbmdlIG9mIFJETUEtcmVsYXRlZCBjb2RlOiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNgLCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY2AsIGBrZXJuZWwvY2dyb3VwL3JkbWEuY2AsIGBuZXQvc21jL3NtY19wbmV0LmNgLCBgZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY2AsIGFuZCBgZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNgLiBUaGF0J3MgYSBwcmV0dHkgZGl2ZXJzZSBzZXQgb2YgYXJlYXMg4oCTIGNvcmUgZGV2aWNlIGhhbmRsaW5nLCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLCBjZ3JvdXAgaW50ZWdyYXRpb24sIFNNQywgU1JQLCBhbmQgZXZlbiBSWEUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cbk15IG5leHQgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJ20gc2VlaW5nIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19kZXZpY2VfdmlzaWJsZWAsIGBzbWNfcG5ldF9maW5kX2liYCwgYHNycF9uZXRfbmFtZXNwYWNlYCwgYF9fYWxsb2NfbmFtZV9pZGAsIGFuZCBgcmRtYV9kZXZfbmFtZV9pbl9uZXRuc2AuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgbmV0d29yayBuYW1lc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBSRE1BIGRldmljZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgaW52b2x2ZSBuYW1lIGFsbG9jYXRpb24gKGBfX2FsbG9jX25hbWVfaWRgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgKSBhbmQgdmlzaWJpbGl0eSBjaGVja3MgKGByZG1hY2dfZGV2aWNlX3Zpc2libGVgKSBzdWdnZXN0cyBzaWduaWZpY2FudCB3b3JrIG9uIGhvdyBSRE1BIGRldmljZXMgYW5kIHRoZWlyIG5hbWVzIGFyZSBtYW5hZ2VkIHdpdGhpbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLiBUaGUgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBhbmQgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AgZnVuY3Rpb25zIGFyZSBhbHNvIGNyaXRpY2FsbHkgaW1wb3J0YW50LlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCwgYElORklOSUJBTkRgLCBgQ0dST1VQX1JETUFgLCBgU01DYCwgYElORklOSUJBTkRfU1JQYCwgYW5kIGBSRE1BX1JYRWAgdGVsbHMgbWUgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiB0aGUgUkRNQSBmZWF0dXJlIHNldC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsIG9mIHRoZXNlIGZlYXR1cmVzIGlzIGNvcnJlY3QuXG5cbkFscmlnaHQsIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9mIHRoZSBcIndoYXQuXCIgTm93LCBpdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kICpob3cqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kICp3aHkqIHRoZXNlIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBlbnN1cmUgcHJvcGVyIG5ldHdvcmsgbmFtZXNwYWNlIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3ltYm9scyBpbnRlcmFjdCBpbiB0aGUgb3ZlcmFsbCBkZXZpY2UgbWFuYWdlbWVudCwgY2dyb3VwIGludGVncmF0aW9uLCBhbmQgU01DL1NSUCBzdXBwb3J0LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIHRoZW4gY29tcGFyZSB0aGlzIHdpdGggcHJldmlvdXMgcGF0Y2hlcy5cblxuTm93LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI2MSwiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDM6NTY6NDIuNzQyNjA1MDY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzI4NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EX1NSUFwiLFxuICAgIFwiUkRNQV9SWEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfZGV2aWNlX3Zpc2libGVcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIixcbiAgICBcInNycF9uZXRfbmFtZXNwYWNlXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJkbWFfZGV2X25hbWVfaW5fbmV0bnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzLCBhbGxvd2luZyB0aGVtIHRvIGJlIGlzb2xhdGVkIGFuZCByZW5hbWVkIHBlciBuZXR3b3JrIG5hbWVzcGFjZS4gVGhpcyBpbnZvbHZlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFJETUEgY29yZSwgUkRNQSBjZ3JvdXBzLCBTTUMsIGFuZCBTUlAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgY2dyb3VwZnMsIGFuZCB0aHVzIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiQ0dST1VQX1JETUFcIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORF9TUlBcIixcbiAgICBcIlJETUFfUlhFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZGV2aWNlX3NldF9uZXRuc19wdXRcIixcbiAgICBcInJkbWFfZGV2X2NoYW5nZV9uZXRuc1wiLFxuICAgIFwicmRtYV9kZXZfcGlja19uZXRuc19uYW1lXCIsXG4gICAgXCJubGRldl9zZXRfZG9pdFwiLFxuICAgIFwicmRtYWNnX2RldmljZV92aXNpYmxlXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX2liXCIsXG4gICAgXCJzcnBfbmV0X25hbWVzcGFjZVwiLFxuICAgIFwiX19hbGxvY19uYW1lX2lkXCIsXG4gICAgXCJyZG1hX2Rldl9uYW1lX2luX25ldG5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXQgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcywgYWxsb3dpbmcgdGhlbSB0byBiZSBpc29sYXRlZCBhbmQgcmVuYW1lZCBwZXIgbmV0d29yayBuYW1lc3BhY2UuIFRoaXMgaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBSRE1BIGNvcmUsIFJETUEgY2dyb3VwcywgU01DLCBhbmQgU1JQLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGNncm91cGZzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[1] Phase: Succeeded StartedAt: 2026-07-10 03:56:54 +0000 UTC FinishedAt: 2026-07-10 03:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 03:56:54 +0000 UTC FinishedAt: 2026-07-10 03:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2] Phase: Succeeded StartedAt: 2026-07-10 03:56:54 +0000 UTC FinishedAt: 2026-07-10 08:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 03:56:54 +0000 UTC FinishedAt: 2026-07-10 08:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 03:56:54 +0000 UTC FinishedAt: 2026-07-10 03:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 03:56:54 +0000 UTC FinishedAt: 2026-07-10 03:56:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowchvt2/series-workflowchvt2-convert-artifact-4273313756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 03:57:04 +0000 UTC FinishedAt: 2026-07-10 04:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 03:57:04 +0000 UTC FinishedAt: 2026-07-10 04:35:34 +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:*7c799c75-7632-46fb-b40f-f0e43e2c3ce8,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-workflowchvt2/series-workflowchvt2-convert-artifact-4273313756/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": "22a75ae9-5dea-471d-8a69-496c9a329e39", "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-workflowchvt2/series-workflowchvt2-build-action-1300744970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 03:57:04 +0000 UTC FinishedAt: 2026-07-10 04:35:24 +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:*7c799c75-7632-46fb-b40f-f0e43e2c3ce8,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-workflowchvt2/series-workflowchvt2-convert-artifact-4273313756/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": "22a75ae9-5dea-471d-8a69-496c9a329e39", "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-workflowchvt2/series-workflowchvt2-build-action-1300744970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 04:35:34 +0000 UTC FinishedAt: 2026-07-10 04:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 04:35:34 +0000 UTC FinishedAt: 2026-07-10 04:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 04:35:34 +0000 UTC FinishedAt: 2026-07-10 04:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 04:35:34 +0000 UTC FinishedAt: 2026-07-10 04:35:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowchvt2/series-workflowchvt2-convert-artifact-1616623131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 04:35:44 +0000 UTC FinishedAt: 2026-07-10 04:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 04:35:44 +0000 UTC FinishedAt: 2026-07-10 04:38:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*22a75ae9-5dea-471d-8a69-496c9a329e39,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-workflowchvt2/series-workflowchvt2-build-action-1300744970/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-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 04:38:17 +0000 UTC FinishedAt: 2026-07-10 04:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 04:38:17 +0000 UTC FinishedAt: 2026-07-10 04:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 04:38:17 +0000 UTC FinishedAt: 2026-07-10 05:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 04:38:17 +0000 UTC FinishedAt: 2026-07-10 05:17:00 +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:*7c799c75-7632-46fb-b40f-f0e43e2c3ce8,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-workflowchvt2/series-workflowchvt2-convert-artifact-1616623131/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": "9a156855-483c-4489-8ee9-20440428e749", "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-workflowchvt2/series-workflowchvt2-build-action-3265995199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 04:38:17 +0000 UTC FinishedAt: 2026-07-10 05:16:25 +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:*7c799c75-7632-46fb-b40f-f0e43e2c3ce8,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-workflowchvt2/series-workflowchvt2-convert-artifact-1616623131/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": "9a156855-483c-4489-8ee9-20440428e749", "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-workflowchvt2/series-workflowchvt2-build-action-3265995199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 05:17:00 +0000 UTC FinishedAt: 2026-07-10 05:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 05:17:00 +0000 UTC FinishedAt: 2026-07-10 05:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 05:17:00 +0000 UTC FinishedAt: 2026-07-10 05:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 05:17:00 +0000 UTC FinishedAt: 2026-07-10 05:19:01 +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:*9a156855-483c-4489-8ee9-20440428e749,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-workflowchvt2/series-workflowchvt2-build-action-3265995199/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-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 08:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 08:24:10 +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":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"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:*22a75ae9-5dea-471d-8a69-496c9a329e39,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9a156855-483c-4489-8ee9-20440428e749,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-workflowchvt2/series-workflowchvt2-build-action-1300744970/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-workflowchvt2/series-workflowchvt2-build-action-3265995199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 05:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 05:19:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"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-workflowchvt2/series-workflowchvt2-convert-artifact-2149507092/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 05:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 05:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 05:19:11 +0000 UTC FinishedAt: 2026-07-10 05:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 05:19:21 +0000 UTC FinishedAt: 2026-07-10 08:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchvt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_device_visible","smc_pnet_find_ib","srp_net_namespace","__alloc_name_id","rdma_dev_name_in_netns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0850cfd16dca49228fd18f1d12b37157f8c4e8ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","CGROUP_RDMA","SMC","INFINIBAND_SRP","RDMA_RXE"],"series_id":"e90e9b9d-d3f5-434e-ab40-e221903237e3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 05:19:21 +0000 UTC FinishedAt: 2026-07-10 08:24:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*22a75ae9-5dea-471d-8a69-496c9a329e39,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9a156855-483c-4489-8ee9-20440428e749,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-workflowchvt2/series-workflowchvt2-build-action-1300744970/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-workflowchvt2/series-workflowchvt2-build-action-3265995199/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-workflowchvt2/series-workflowchvt2-convert-artifact-2149507092/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,}